jenkins Allure跨浏览器测试报告

7dl7o3gd  于 2023-11-17  发布在  Jenkins
关注(0)|答案(1)|浏览(181)

我有一个Web应用程序,我在2个浏览器中测试:Chrome和Edge。测试结果必须出现在Jenkins服务器上的Allure报告中。我面临的问题是Allure只显示测试运行的第二个浏览器上的测试结果,而忽略了第一个浏览器。
我的设置如下:一个BrowserFactory类,负责浏览器的设置和初始化。

public class BrowserFactory {
private static WebDriver driver;

public static WebDriver getDriver() {
    String browser = System.getProperty("BrowserName");
    if ("edge".equals(browser)) {
        driver = initializeEdgeDriver();
        return driver;
    }
    driver = initializeChromeDriver();
    return driver;
}

public static String getBrowserInfo() {
    return ((RemoteWebDriver) driver).getCapabilities().getBrowserVersion();
}

private static WebDriver initializeChromeDriver() {
    System.setProperty("webdriver.chrome.driver",
            Optional.ofNullable(BrowserFactory.class.getClassLoader()
                            .getResource("drivers//chromedriver.exe"))
                    .orElseThrow(() -> new RuntimeException("Missing driver!")).getPath());
    System.setProperty("webdriver.http.factory", "jdk-http-client");
    ChromeOptions chromeOptions = new ChromeOptions();
    chromeOptions.addArguments("--lang=en");
    chromeOptions.addArguments("--no-sandbox");
    chromeOptions.addArguments("--headless");
    chromeOptions.setAcceptInsecureCerts(true);
    WebDriver driver = new ChromeDriver(chromeOptions);
    configureDriver(driver);
    return driver;
}

字符串
接下来是Page类,它拥有所有可以在给定网页上进行的常规操作。下面的代码片段只包含与本主题相关的内容。我使用ThreadLocal进行并行测试。

public class Page {
protected static final ThreadLocal<WebDriver> driver = new ThreadLocal<>();

public static void startBrowser() {
    driver.set(ThreadGuard.protect(BrowserFactory.getDriver()));
}

public static WebDriver getDriver() {
    return driver.get();
}

public static void closeBrowser() {
    getDriver().close();
    getDriver().quit();
    driver.remove();
}


接下来是一堂测试课

public class TestSomething {
@BeforeMethod
public void setUp() {
    Page.startBrowser();
}

@AfterMethod(alwaysRun = true)
public void tearDown() {
    Page.closeBrowser();
}

@Test()
public void retrieveBearerToken() {
    //do some test     
}


在Jenkins中,我在两个单独的作业上调用这个runner,一个用于Chrome,一个用于edge,使用以下命令:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="Test something">
<listeners>
<listener class-name="org.evidian.qaautomation.util.testngcustomized.RetryFailedTestListener"/>
</listeners>
<test name="Test something">
<parameter name="BrowserName" value="${BrowserName}"/>
<classes>
<class name="ui.test.TestSomething"/>
</classes>
</test>
</suite>

test -DsuiteXMLFile=src/main/resources/Runner/test_Something.xml, -DBrowserName=edge
test -DsuiteXMLFile=src/main/resources/Runner/test_Something.xml, -DBrowserName=chrome


我错过了什么?Allure不支持跨浏览器测试吗?还是有其他问题?

46qrfjad

46qrfjad1#

您需要创建动态测试名称+使用Allure historyId进行操作,browserPrefix()需要由您实现:
示例如下:

@Story("Your Story Name")
@Test
public void loginStandardUser() {
  updateTestNameForAllure(browserPrefix() + "YourStoryName");
  standardUserActions.loginAction();
}

private void updateTestNameAndHistoryIdForAllure(String newName) {
  Allure.getLifecycle().updateTestCase(testResult -> testResult.setName(newName));
  String customHistoryId = Utils.generateConsistentHistoryId(newName, getBrowserName());
  Allure.getLifecycle().updateTestCase(testResult -> testResult.setHistoryId(customUUID));
}

privat String generateConsistentHistoryId(String newName, String browserName) {
  String baseString = newName + browserName;
  return UUID.nameUUIDFromBytes(baseString.getBytes()).toString();
}

字符串


的数据

相关问题