Home > Mobile >  How can i add response time in selenium python report
How can i add response time in selenium python report

Time:02-25

I have a selenium-python automation test, I am generating HTML/JSON reports using Pytest. I want to add response time in the HTML/JSON report, Is this even possible?

following is my code

test_screenshot.py

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pytest_html
from selenium.common.exceptions import InvalidSessionIdException

    def test_Openurl(setup):
        driver = setup["driver"]
        url = setup["url"]
        try:
            before_time = datetime.now().strftime('%H%M%S%f')  #  Timestamp
            driver.get(url)
            now_time = datetime.now().strftime('%H%M%S%f')  #  Timestamp
            response_time = int(now_time) - int(before_time)
        except Exception as e:
            print(e.message)
    
        assert driver.current_url == URL
        driver.save_screenshot("ss.png")
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        driver.save_screenshot("ss1.png")
        driver.close()

Conftest.py

import pytest
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

    def pytest_addoption(parser):
        parser.addoption("--url", action="store", default="https://google.com/")
    
    @pytest.fixture()
    def setup(pytestconfig):
        s = Service("C:/Users/Yash/Downloads/chromedriver_win32/chromedriver.exe") 
        driver = webdriver.Chrome(service=s)
        driver.maximize_window()
        yield {"driver":driver, "url": pytestconfig.getoption("url")}

Following is the command i am using to generate reports

pytest -v -s --json-report --json-report-indent=4 --json-report-file=report/report.json --html=report/report.html test_screenshot.py

CodePudding user response:

you can use some hooks to JSON reports to do this. something along the line of these in your conftest.py file:

@hookimpl(optionalhook=True)
def pytest_json_runtest_metadata(call):
    """
    fixture from the pytest-json-report plugin that will add your info
    """
    if call.when != 'call':
       return {}

    # collect the start and finish times in ISO format for the US/Eastern timezone
    start_iso_dt = timezone('US/Eastern').localize(datetime.fromtimestamp(call.start)).isoformat()
    stop_iso_dt = timezone('US/Eastern').localize(datetime.fromtimestamp(call.stop)).isoformat()
    return {'start': start_iso_dt, 'stop': stop_iso_dt

That will land up in your json_report metadata. (my code needed that US/Eastern timezone, you can obviously adjust accordingly, or just do the difference calculation in this function and return {'response_time': mydiff}

  • Related