如何强制TestNG在类中运行所有方法而不切换到并行模式下的另一个线程

时间:2012-09-12 09:39:44

标签: java selenium webdriver testng

我有以下套件xml,用于使用Webdriver运行UI测试:

 <suite name="test suite" verbose="3" parallel="classes" thread-count="2">

<test name="extended_smoke_test_suite">
    <listeners>
        <listener
            ...
        </listener>
    </listeners>   
    <groups>
        <run>
            <include name="somegroup1" />
            <include name="somegroup2" />
        </run>
    </groups>
    <packages>
           <package name="tests.*" ></package>
    </packages>
</test>

当我运行这个套件时,它启动了几个浏览器(超过2个),我可以发现它只能在其中两个浏览器中运行。    看起来它启动了一些测试类(TestClass1),执行一个测试方法,然后切换到另一个类(TestClass2)。在TestClass2中完成测试方法后,它返回TestClass1并继续它 由于我有很多测试类,因此会打开多个浏览器。

有没有办法“说”TestNG从TestClass1执行所有测试,只有在切换到下一个之后,所以我们现在只有两个打开的和活动的浏览器

2 个答案:

答案 0 :(得分:0)

在我看来,要解决此问题,您应该在maven surefire插件方向进行调查。 目前我用它来构建我的测试套件。

我本地模块中的pom.xml

 <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.11</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit47</artifactId>
                        <version>2.12</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <!--<includes>-->
                        <!--<include>**/*.class</include>-->
                    <!--</includes>-->
                    <excludedGroups>com.exadel.rms.selenium.SeleniumTests</excludedGroups>

                </configuration>
            </plugin>

我使用

注释我的测试类
 @Category(SeleniumTests.class)
    public class HomePageTestSuite extends BaseSeleniumTest {
............

你可以在图片上看到整个结构: enter image description here

实际上,您可以获得here

的一些有用信息

还要看这个主题。 Prolly它也很有用:JUnit: Can (should) this be done?

希望这可以帮助你)

答案 1 :(得分:0)

您已设置TestNG配置以并行运行测试:

<suite name="test suite" verbose="3" parallel="classes" thread-count="2">

如果你只有两个类:TestClass1和TestClass2,那么TestNG将创建2个线程,并在一个线程中调用TestClass1的测试,在另一个线程中调用TestClass2。

如果您希望TestClass2在TestClass1之后运行,您有几个选项:

1.使类TestClass2依赖于TestClass1。这里有多个选项,因此请参阅TestNG文档的Dependcies部分。

2.设置thread-count="1"parallel="false"(或删除并行属性)。另外,请确保没有preserve-order="false"并将TestClass2放在xml中的T​​estClass1之后。

<test name="extended_smoke_test_suite">
    <classes>
        <class name="test.TestClass1"/>
        <class name="test.TestClass2"/>
    </classes>
</test>