admin管理员组

文章数量:1623797

testng priority参数 可以在@Test注解中指明执行顺序


使用 priority参数在一个类中,对不同的Test方法排序,例如:

@Test(priority=1)

public void f() {

}

@Test(priority=2)

public void ff() {

}

@Test(priority=3)

public void fff() {

}

用例执行顺序将按照priority 由小到大的顺序执行,即f>ff>fff;

 

而实际在使用testng.xml 进行批量执行用例时会发现,有时一个class类中有多个Test方法,却只会执行第一个方法,然后就停止不动了,也不报错浏览器也不退出,selenium就开始执行下一个用例。

经过多次排查发现,出现问题的用例都使用了@priority方法。testng如果将用例配置到一个test集中,每个用例只会执行一次priority.

 

解决方法:

1.可以使用dependsOnMethods(依赖)来代替priority参数

@Test()

public void f() {

}

@Test(dependsOnMethods={"f"})

public void ff() {

}

@Test(dependsOnMethods={"ff"})

public void fff() {

}

执行顺序依然是f>ff>fff;

2.在testng.xml中建立多个test集,将有priority标识的用例区分开来

<test name="priority1" verbose="2">

<classes>

<class name="priorityTestCase1"/>

</classes>

</test>



<test name="priority2" verbose="2">

<classes>

<class name="priorityTestCase2"/>

</classes>

</test>

这样用例执行将不受影响

3.在class类中不指明执行顺序,而在testng中配置

利用include标签指明class类中Test方法的执行顺序,如:

<test name="priority1" verbose="2" preserve-order="true">

<classes>

<class name="priorityTestCase1"/>

<methods>

    <include name="f" />

    <include name="ff" />

    <include name="ff" />

</methods>

</classes>

</test>

4.如果一个test集合中只有一个java类中有用到priority,可以将它排到最后一个执行,也就不会受到影响了


本文标签: 顺序参数testngPriority