具有多个类的TestNG优先级

时间:2014-10-29 13:56:32

标签: testng

我面临以下问题:我创建了两个包含@Tests优先级属性的类:

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

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

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

......和......

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

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

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

我将这两个类放在testng.xml中的一个测试中,但是当我运行测试时,它会根据两个类的优先级命令我的@Tests:

testA1
testB1
testA2
testB2
testA3
testB3

我期待以下结果:

testA1
testA2
testA3
testB1
testB2
testB3

我的问题是,我怎样才能阻止根据这两个类订购@Tests并同时只从一个类运行@Tests?

6 个答案:

答案 0 :(得分:17)

在你的套件xml中使用group-by-instances =“true”

示例,其中TestClass1和TestClass2具有与您相同的内容

<suite thread-count="2" verbose="10" name="testSuite" parallel="tests">
<test verbose="2" name="MytestCase" group-by-instances="true">
    <classes>
        <class name="com.crazytests.dataproviderissue.TestClass1" />
        <class name="com.crazytests.dataproviderissue.TestClass2" />
    </classes>
</test>
</suite> 

我得到了输出

testA1

testA2

testA3

testB1

testB2

testB3

答案 1 :(得分:1)

您可以在每个班级的顶部提供@Test(testName="test1") / @Test(testName="test2"),优先级将按类自动分组。当然,你保留现有的注释。

答案 2 :(得分:1)

最正确的方法是使用dependsOnMethods。 优先级是测试的全局级别(不要与使用@Test注释的测试方法混合)。换一种说法: 当testng运行test(来自set_time_limit( 120 );标签)时,它按优先级对方法进行分组,然后运行它。在您的情况下,testA1和testB1的优先级均为1,因此将在开始时执行。

答案 3 :(得分:0)

你应该改变B测试的优先级 就像这样

 var tweets =
            await
            (from tweet in twitterCtx.Status
             where tweet.Type == StatusType.User &&
                   tweet.UserID == {UserId}
             select tweet)
            .ToListAsync();

并且对XML没有任何更改,因为它以优先级运行

答案 4 :(得分:0)

就我而言,我已将类分为不同的测试,分别位于testng.xml文件中,并且优先级与以前的版本相同。

<suite name="Suite1" verbose="1">
<test name="TVS_AUTO_TESTS 1">
    <classes>
        <class name="TVS_auto_tests.CheckLoginTests"/>
    </classes>
</test>
<test name="TVS_AUTO_TESTS 2">
    <classes>
        <class name="TVS_auto_tests.PageNavigationTests"/>
    </classes>
</test>

答案 5 :(得分:0)

将第一类的测试方法分组,然后将dependsOnGroups放在第二类的测试方法中。因此,按照下面显示的期望正确执行

ClassOne如下

    @Test( priority = 1,groups="FirstClass" )
    public void testA1() {
        System.out.println("testA1");
    }

    @Test( priority = 2,groups="FirstClass" )
    public void testA2() {
        System.out.println("testA2");
    }

    @Test( priority = 3,groups="FirstClass" )
    public void testA3() {
        System.out.println("testA3");
    }

ClassTwo如下

    @Test( priority = 1,dependsOnGroups="FirstClass")
    public void testB1() {
        System.out.println("testB1");
    }

    @Test( priority = 2,dependsOnGroups="FirstClass" )
    public void testB2() {
        System.out.println("testB2");
    }

    @Test( priority = 3,dependsOnGroups="FirstClass" )
    public void testB3() {
        System.out.println("testB3");
    }

最后testng.xml是

<suite name="Suite">
  <test thread-count="5" name="Test">
    <classes>
      <class name="TestCMD.ClassOne"/>
      <class name="TestCMD.ClassTwo"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

它的输出与在类和顺序中指定的优先级相同