TestNG-详解preserve-order的作用与测试case的执行顺序
在TestNG xml配置文件中,關(guān)于<test>的配置里面,有一個屬性叫preserve-order,一開始以為這個屬性可以用來控制測試case(那些被@Test注解標注的方法)的執(zhí)行順序,后來測試了一把,發(fā)現(xiàn)沒有這種效果,最后上網(wǎng)找了一下這個屬性的作用,發(fā)現(xiàn)它是用來控制<test>里面所有<classes>的執(zhí)行順序的。<test>默認下的preserve-order為true,表示<test>下所有<classes>順序執(zhí)行,eg:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Preserve order test runs"> <test name="Regression 1" preserve-order="true"> <classes> <class name="com.pack.preserve.ClassOne"/> <class name="com.pack.preserve.ClassTwo"/> <class name="com.pack.preserve.ClassThree"/> </classes> </test> </suite>會依次執(zhí)行ClassTwo、ClassThree、ClassOne的測試方法。
【注意】?一個<class>類里面可能存在多個測試方法(被@Test注解的方法),這些方法的執(zhí)行順序不受preserve-order控制。默認測試方法的執(zhí)行順序是按照方法名的字典序升序排序執(zhí)行的。
那么,對于需要按照一定順序執(zhí)行測試方法的需求,我們應(yīng)該如何實現(xiàn)?
有以下幾種做法:
(1) 使用priority指定執(zhí)行順序(默認值為0),數(shù)值越小,越靠前執(zhí)行
eg:
@Test(priority = 0) public void testMethod1() { } @Test(priority = 1) public void testMethod2() { } @Test(priority = 2) public void testMethod3() { }?
這樣指定以后,將按照testMethod1、testMethod2、testMethod3順序執(zhí)行。
我們不推薦使用這種方式來指定測試方法的執(zhí)行順序。因為當(dāng)你中間需要修改執(zhí)行順序的時候,會相當(dāng)麻煩。而且,多個<class>的測試方法,如果指定了相同的priority,那么會產(chǎn)生與預(yù)期不一樣的執(zhí)行順序,TestNG會先跑所有相同priority的測試方法,而不管你的測試方法是不是在同一個<class>里面。
(2) 從方法名稱做手腳
因為默認執(zhí)行順序是按照方法名的字典序升序排序執(zhí)行的。那么,有目的地去定制方法名稱,就可以讓方法按照我們要求的順序執(zhí)行,比如:
@Test public void B() { }@Test public void A() { } @Test public void C() { }?
這樣方法就會按照A、B、C順序執(zhí)行。
這種方式使得我們命名測試方法名稱更加費勁,也不是最優(yōu)的解決方案。
(3) 在xml里面使用<include>指定需要執(zhí)行的方法和順序
比如:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Preserve order test runs"> <test name="Regression 1" preserve-order="true"> <classes> <class name="com.pack.preserve.ClassOne"> <methods> <include name="B" /> <include name="A" /> </methods> </class> </classes> </test> </如上配置,ClassOne會執(zhí)行兩個測試方法,先執(zhí)行B,然后執(zhí)行A。
我們推薦使用這種方式來指定方法的執(zhí)行順序,因為這是最靈活并且最直觀的。
轉(zhuǎn)載于:https://www.cnblogs.com/AryaZ/p/7192241.html
總結(jié)
以上是生活随笔為你收集整理的TestNG-详解preserve-order的作用与测试case的执行顺序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [BZOJ3173][Tjoi2013]
- 下一篇: mvn 修改所有子项目pom版本