Report publishing in CI in Selenium Java - Build an Automation Script
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.io.File; import java.time.Duration; public class ReportPublishingTest { private WebDriver driver; @BeforeClass public void setUp() { // Set path to chromedriver executable if needed // System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver"); driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); } @Test public void sampleTest() { driver.get("https://example.com"); String title = driver.getTitle(); Assert.assertTrue(title.contains("Example Domain"), "Title should contain 'Example Domain'"); } @AfterClass public void tearDown() { if (driver != null) { driver.quit(); } } // This method simulates verification of report file after tests run @Test(dependsOnMethods = {"sampleTest"}) public void verifyReportFile() { // Path to Maven Surefire report file File reportFile = new File("target/surefire-reports/index.html"); Assert.assertTrue(reportFile.exists(), "Test report file should exist"); Assert.assertTrue(reportFile.length() > 0, "Test report file should not be empty"); } }
The setUp method initializes the Chrome WebDriver with an implicit wait to handle element loading.
The sampleTest method navigates to example.com and asserts the page title contains 'Example Domain' to simulate a passing test.
The tearDown method closes the browser after tests complete.
The verifyReportFile test runs after the sample test and checks if the Maven Surefire report file target/surefire-reports/index.html exists and is not empty, ensuring the report was generated.
In a real CI environment, the pipeline should archive this report file as an artifact for publishing. This test confirms the report generation step.
Now add data-driven testing with 3 different URLs and verify their titles
Practice
Solution
Step 1: Understand CI pipeline goals
CI pipelines aim to integrate code changes frequently and provide feedback quickly.Step 2: Role of test reports in CI
Publishing test reports helps teams see if tests passed or failed right after changes.Final Answer:
To quickly show test results after code changes -> Option DQuick Check:
Test reports in CI = Quick feedback [OK]
- Confusing report publishing with speeding up tests
- Thinking reports reduce test cases
- Believing reports fix tests automatically
Solution
Step 1: Identify Jenkins syntax for JUnit reports
Jenkins uses thejunitstep with a file pattern to locate XML reports.Step 2: Match correct usage
junit '**/target/surefire-reports/*.xml'correctly points to JUnit XML files generated by Maven Surefire plugin.Final Answer:
Use thejunit '**/target/surefire-reports/*.xml'step in the pipeline script -> Option AQuick Check:
Jenkins pipeline uses junit step with XML path [OK]
- Trying to publish reports from Java code directly
- Using wrong Jenkins steps for report publishing
- Archiving HTML instead of XML for JUnit reports
junit '**/target/surefire-reports/*.xml' step if no XML files are found?
pipeline {
agent any
stages {
stage('Test') {
steps {
sh 'mvn test'
junit '**/target/surefire-reports/*.xml'
}
}
}
}Solution
Step 1: Understand junit step behavior with missing files
If no XML files match, Jenkins does not fail the build but records no test results.Step 2: Confirm build status
Since no test results are found, the build passes but shows zero tests executed.Final Answer:
The build will pass with no test results recorded -> Option BQuick Check:
No XML files = build passes, no tests recorded [OK]
- Assuming build fails if reports missing
- Thinking tests are marked skipped automatically
- Expecting automatic retries on missing reports
Solution
Step 1: Check report file paths in CI config
If the CI pipeline looks for reports in the wrong folder, it won't find or display them.Step 2: Verify report generation location
Ensure test reports are generated where the CI expects them, matching the configured path.Final Answer:
The test report files are generated in a different directory than specified in the CI config -> Option CQuick Check:
Report path mismatch = no reports shown [OK]
- Blaming test assertions for missing reports
- Assuming CI server cannot publish reports
- Thinking deprecated APIs affect report visibility
Solution
Step 1: Save test reports as artifacts
Useactions/upload-artifactto store test report files after running tests.Step 2: Use a report action to display results
Configureactions/junit-reportor similar to parse and show test results in GitHub UI.Final Answer:
Run tests with Maven, then useactions/upload-artifactto save reports, and configureactions/junit-reportto display them -> Option AQuick Check:
Upload artifact + report action = published test results [OK]
- Using upload-test-report action which does not exist
- Downloading artifacts instead of uploading
- Skipping report display step after upload
Ready to prove it?
Pass the test and this pattern moves unknown
