我有一个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不支持跨浏览器测试吗?还是有其他问题?
1条答案
按热度按时间46qrfjad1#
您需要创建动态测试名称+使用Allure historyId进行操作,browserPrefix()需要由您实现:
示例如下:
字符串
的数据