TestNG - 奇怪的行为

TestNG - Weird behavior

我对这个 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 的行为有所不同?我怎样才能让线程按顺序在 <test> 中执行 <classes>

有一个名为 preserve-order 的属性。默认情况下,此属性在 <test> 级别和 <suite> 级别的值为 true

此属性启用后,会导致 TestNG 以与 <test> 标记中定义的顺序相同的顺序加载 类,然后 运行 中定义的所有 @Test 方法他们每个人。

但要使此属性起作用,您需要禁用并行性,即,您需要将属性 parallel 设置为 none

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

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

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

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