并行执行并具有“优先级”时的TestNG问题

时间:2016-10-21 02:16:01

标签: java unit-testing selenium testng

我有两节课。

第1课:

@Test
public void test1(){
    System.out.println("test1-1");
}

@Test(priority = 1)
public void test2(){
    System.out.println("test2-1");
}

@Test(priority = 6)
public void test3(){
    System.out.println("test3-1");
}

@Test(priority = 9)
public void test4(){
    System.out.println("test4-1");
}


第2类:

@Test
public void test1(){
    System.out.println("test1-2");
}

@Test(priority = 1)
public void test2(){
    System.out.println("test2-2");
}

@Test(priority = 2)
public void test3(){
    System.out.println("test3-2");
}

@Test(priority = 3)
public void test4(){
    System.out.println("test4-2");
}


XML:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Smoke" verbose="1" parallel="tests" thread-count="5" >
    <test name="GalaxyS7">
        <classes>
            <class name="TempTest.ClassTest1"/>
            <class name="TempTest.ClassTest2"/>
        </classes>
    </test>
</suite>

当我执行测试预期输出时:

  

test1-1
  test2-1
  test3-1
  test4-1
  test1-2
  test2-2
  test3-2
  test4-2

但实际输出是:

  

test1-1
  test1-2
  test2-1
  test2-2
  test3-2
  test4-2
  test3-1
  test4-1

但是当我删除parallel="tests"时,按预期执行。当我删除优先级parallel="tests"保留在XML中时 - 按预期执行。但我正在尝试并行运行我的测试,并在那里也有优先考虑。

它是TestNG中的错误还是我遗漏了什么?

感谢任何帮助。我的目标是从第一个类开始运行所有测试用例,然后从第二个类开始运行。

1 个答案:

答案 0 :(得分:0)

尽管我可以告诉你似乎期望一个对象的每个实例在并行模式下运行时都有自己的priorities集合,而你的测试套件将优先级视为全局变量,当优先级相等时,它会自上而下处理(TempTest.ClassTest1然后TempTest.ClassTest2)。

TL; DR:
priority在全球范围内使用,而不是在实例1上使用。