使用 Allure 报告进行跨浏览器测试

问题描述 投票:0回答:0

我有一个正在 2 种浏览器中测试的 Web 应用程序: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;
}

Next 是 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 称为 2 个独立的作业,一个用于 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 不支持跨浏览器测试吗?还是有别的东西?

java jenkins cross-browser testng allure
© www.soinside.com 2019 - 2024. All rights reserved.