0

我对这种 testNG 行为有点困惑。

考虑这个简单的 testNG 套件。Test2 依赖于 Test1。下面的套件也仅在 Test1 之后才启动 Test2,这很棒!

<suite name="testng-behvaior" parallel="none">

    <test name="test1">
        <parameter name="browser" value="chrome" />
        <classes>
            <class name="com.test.Test1" />
            <class name="com.test.Test2" />
        </classes>
    </test>

</suite> 

以上套件工作正常,没有任何问题。

但是考虑一下。根据 testNG 文档,所有这些<test>都将分配给不同的线程。因为我只有一个<test>,所以只有一个线程正在执行这个套件,这很好。但它在 Test1 之前从 Test2 开始。

   <suite name="testng-behvaior" parallel="tests">

        <test name="test1">
            <parameter name="browser" value="chrome" />
            <classes>
                <class name="com.test.Test1" />
                <class name="com.test.Test2" />
            </classes>
        </test>

    </suite> 

对我来说 - 在上述情况下,parallel="tests"parallel="none"应该有任何区别并且表现相同。

是什么让 testNG 表现得不同?我怎样才能让线程按<classes>顺序<test>执行?

4

2 回答 2

0

有一个属性叫做preserve-order。默认情况下,此属性true<test>级别和<suite>级别上都有一个值。

启用此属性后,TestNG 会按照标签中定义的顺序加载类,<test>然后运行@Test每个类中定义的所有方法。

但是要使此属性起作用,您需要禁用并行性,即,您需要将属性设置parallelnone.

只有这样,TestNG 才会按照在<test>标签中的顺序执行测试。

所以parallel="tests"等于 parallel="none"

于 2019-01-10T04:36:58.117 回答
0

对于那些面临类似问题的人 - 如果您希望测试是并行的,并且希望按顺序执行测试中的类,请使用以下方法

   <suite name="testng-behvaior" parallel="tests">

        <test name="test1" parallel="none"> <!-- we do not want parallel here -->
            <parameter name="browser" value="chrome" />
            <classes>
                <class name="com.test.Test1" />
                <class name="com.test.Test2" />
            </classes>
        </test>

    </suite> 
于 2019-01-10T16:15:57.330 回答