TestNG 在多个浏览器上并行执行,始终只考虑单个浏览器

TestNG parallel execution on multiple browsers always considering single browser only

我正在尝试使用 TestNG 在多个浏览器中并行执行测试。

但它总是只考虑第二个提到的浏览器。

TestNG.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 -->

我的测试引擎class:

@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_Projects\WorkSpace_Personal\TribuneWebScriptLess\TestNG.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 值时,它都会覆盖现有值。

所以我通过将 browserName 变量定义为 Threadlocal 变量解决了这个问题。但是通过将很多变量定义为ThreadLocal的方法,会不会有问题?