Test reporting in CI in Selenium Python - Build an Automation Script
import pytest from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC @ pytest.fixture def driver(): driver = webdriver.Chrome() driver.implicitly_wait(5) # short implicit wait yield driver driver.quit() def test_login_success(driver): driver.get('https://example.com/login') username_input = driver.find_element(By.ID, 'username') password_input = driver.find_element(By.ID, 'password') login_button = driver.find_element(By.ID, 'loginBtn') username_input.send_keys('testuser') password_input.send_keys('Test@1234') login_button.click() # Wait until URL changes to dashboard WebDriverWait(driver, 10).until(EC.url_to_be('https://example.com/dashboard')) assert driver.current_url == 'https://example.com/dashboard', f"Expected URL to be dashboard but got {driver.current_url}" # Wait for welcome message welcome_msg = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.ID, 'welcomeMsg')) ) assert welcome_msg.text == 'Welcome, testuser!', f"Expected welcome message text to be 'Welcome, testuser!' but got '{welcome_msg.text}'" # To run and generate JUnit XML report for CI: # pytest test_login.py --junitxml=report.xml
This test script uses pytest and selenium to automate the login test.
The driver fixture sets up and tears down the Chrome WebDriver cleanly.
The test opens the login page, enters the username and password, and clicks the login button.
It uses WebDriverWait to wait explicitly for the URL to change to the dashboard URL, avoiding unreliable fixed waits.
Then it waits for the welcome message element to appear and asserts its text matches the expected greeting.
Assertions verify the URL and welcome message text to confirm successful login.
For CI integration, running pytest with --junitxml=report.xml generates a test report in XML format that CI tools can read.
This approach follows best practices: explicit waits, clear locators, fixture usage, and proper reporting.
Now add data-driven testing with 3 different username and password combinations to verify login success or failure.
Practice
Solution
Step 1: Understand CI test reporting role
Test reporting in CI is designed to give fast feedback on whether tests pass or fail after code changes.Step 2: Identify the correct purpose
Among the options, only providing quick automatic feedback matches the main purpose of test reporting in CI.Final Answer:
To provide quick feedback on test results automatically -> Option AQuick Check:
Test reporting = quick feedback [OK]
- Confusing test reporting with deployment
- Thinking test reporting is about writing tests
- Mixing test reporting with documentation
Solution
Step 1: Recall pytest report options
Pytest uses--junitxmlto create XML reports compatible with many CI tools.Step 2: Match option to XML report
Among the options, only--junitxml=report.xmlgenerates the correct XML format for CI.Final Answer:
--junitxml=report.xml -> Option BQuick Check:
Pytest XML report = --junitxml [OK]
- Using --html instead of --junitxml
- Confusing JSON or text output with XML
- Missing the file name after the option
pytest tests/ --junitxml=results.xmlWhat will happen after the tests run?
Solution
Step 1: Understand the command effect
The--junitxml=results.xmloption tells pytest to save test results in XML format to the file named results.xml.Step 2: Identify the output file type
The file created is XML, not HTML, and the command syntax is correct, so tests run and report is saved.Final Answer:
A file named results.xml will be created with test results in XML format -> Option CQuick Check:
--junitxml creates XML report file [OK]
- Thinking no report is created
- Confusing XML with HTML report
- Assuming command syntax error
--junitxml=report.xml to your pytest command, but the CI tool shows no test report. What is the most likely cause?Solution
Step 1: Check report file location
CI tools need the report file in the workspace folder to read it. If saved elsewhere, the tool won't find it.Step 2: Verify other causes
The command syntax is correct, tests likely ran, and most CI tools support XML reports, so the missing file location is the main issue.Final Answer:
The report.xml file is not saved in the CI workspace directory -> Option DQuick Check:
Report file location matters in CI [OK]
- Assuming command syntax error without checking
- Ignoring file save location
- Thinking CI tools don't support XML reports
Solution
Step 1: Generate machine-readable test report
Using--junitxml=report.xmlcreates a detailed XML report that CI tools can parse.Step 2: Configure CI to fail build on test failures
CI tools can read the XML report and mark the build as failed if tests fail, automating quality checks.Final Answer:
Run pytest with --junitxml=report.xml and configure CI to fail on test failures using this report -> Option AQuick Check:
Use XML report + CI fail on test fail [OK]
- Ignoring test failures in CI
- Not generating machine-readable reports
- Relying on manual log checks
Ready to prove it?
Pass the test and this pattern moves unknown
