在多个浏览器上测试NG并行执行始终只考虑单个浏览器



我正在尝试使用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 的方法,它会有问题吗?

最新更新