代码之家  ›  专栏  ›  技术社区  ›  KitKarson

测试-奇怪的行为

  •  0
  • KitKarson  · 技术社区  · 7 年前

    我对这种测试行为有点困惑。

    考虑这个简单的测试套件。测试2取决于测试1。下面的套件也只在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> 
    

    上面的套房很好,没有任何问题。

    但是考虑一下这个。根据测试文件,所有 <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> 内 <测试与测试; 按顺序排列?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Krishnan Mahadevan    7 年前

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

    此属性启用后,会导致testng以与中定义的相同顺序加载类。 <测试与测试; 标记,然后运行所有 @Test 每个方法中定义的方法。

    但要使该属性工作,需要禁用并行性,即需要设置该属性 parallel 到 none .

    只有这样,testng才能按照在 <测试与测试; 标签。

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

        2
  •  0
  •   KitKarson    7 年前

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

       <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> 
    
    推荐文章