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

时间:2015-04-21 16:24:12

标签: java selenium-webdriver testng

我正在尝试使用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 -->

我的TestEngine课程:

@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)

提前致谢。

1 个答案:

答案 0 :(得分:0)

我理解了这个问题,browserName变量是静态的。由于静态变量在线程之间共享,因此每次线程设置browserName值时,它都会覆盖现有值。

所以我通过将browserName变量定义为Threadlocal变量来解决问题。但是通过将大量变量定义为ThreadLocal的方法,它会出现问题吗?