我正在尝试使用TestNG在多个浏览器中并行执行测试。
但它总是只考虑第二个提到的浏览器。
测试NG
.xml<?xml version="1.0" encoding="UTF-8"?>
<suite name="Parallel Tests" verbose="1" thread-count="10" parallel="tests">
<tests>
<test name="Test1">
<parameters>
<parameter name="platform" value="Windows" />
<parameter name="browser" value="chrome" />
<parameter name="version" value="8" />
</parameters>
<classes>
<class name="com.tribune.uiautomation.testscripts.TestEngine"/>
</classes>
</test> <!-- Test -->
<test name="Test2">
<parameters>
<parameter name="platform" value="Windows" />
<parameter name="browser" value="firefox" />
<parameter name="version" value="8" />
</parameters>
<classes>
<class name="com.tribune.uiautomation.testscripts.TestEngine"/>
</classes>
</test> <!-- Test -->
</tests>
</suite> <!-- Suite -->
我的测试引擎类:
@BeforeTest
@Parameters("browser")
public void beforeTest(String browser){
try{
Property.BrowserName = browser;
System.out.println("BrowserName got from XML is "+Property.BrowserName);
}
@test
public void Execute test() {
//code for launching browser & performing tests...
}
控制台输出类似于:
log4j:WARN [] should be System.out or System.err.
log4j:WARN Using previously set target, System.out by default.
[TestNG] Running:
D:Selenium_ProjectsWorkSpace_PersonalTribuneWebScriptLessTestNG.xml
BrowserName got from XML is chrome
BrowserName got from XML is firefox
//from here onwards it is considering only firefox browser only (i.e. both the tests mentioned in TestNG.xml are running in firefox only)
提前谢谢。
我理解了这个问题,browserName 变量是静态的。由于静态变量在线程之间共享,因此每次线程设置 browserName 值时,它都会覆盖现有值。
所以我通过将浏览器名称变量定义为线程变量来解决这个问题。但是通过定义大量变量作为 ThreadLocal 的方法,它会有问题吗?