testng 不同類中使用priority后,沒有按照類的順序執行


1.使用兩個類,priority都從1開始加

第一個類

  @Test(priority=1)
    public void testAddInfo() {
        System.out.println("testAddInfo");
    }
    @Test(priority=2)
    public void testPublishInfo() {
        System.out.println("testPublishInfo");
    }
    @Test(priority=3)
    public void testCancleInfo() {
        System.out.println("testCancleInfo");
    }
    @Test(priority=4)
    public void testDeleteInfo() {
        System.out.println("testDeleteInfo");
    }
    @Test(priority=5)
    public void testSearchInfo() {
        System.out.println("testSearchInfo");
    }

 

第二個類

  @Test(priority=1)
    public void testAdd() {
        System.out.println("testAdd");
    }
    @Test(priority=2)
    public void testPublish() {
        System.out.println("testPublis");
    }
    @Test(priority=3)
    public void testCancle() {
        System.out.println("testCancle");
    }
    @Test(priority=4)
    public void testDelete() {
        System.out.println("testDelete");
    }
    @Test(priority=5)
    public void testSearch() {
        System.out.println("testSearch");
    }
    

 

testng配置

  <test name="test" preserve-order="true">     
        <classes>
          <class name="cases.testeoder"></class> 
          <class name=".cases.testeoder2"></class>         
        </classes>
    </test>

 

運行結果

[RemoteTestNG] detected TestNG version 6.14.3
testAddInfo
testAdd
testPublishInfo
testPublis
testCancleInfo
testCancle
testDeleteInfo
testDelete
testSearchInfo
testAdd
testSearch

從中可以看出如果兩個類的priority 都從1開始遞增,則在執行的之后,即使指定了類的加載先后順序,但是不會按照預想的一個類按順序加載完成再執行另一個類。

主要原因:priority是在testng開始時候全部加載進去

 

測試發現 

1)將priority 換做dependsOnMethods運行效果也是一樣的。

2)即使給第一個類加上分組也是不行

 

解決方法:

1.參考 https://testerhome.com/topics/14824

寫一個監聽類 RePrioritizingListener

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.HashMap;
import org.testng.IAnnotationTransformer;
import org.testng.Reporter;
import org.testng.annotations.ITestAnnotation;

//Listener to fix TestNG Interleaving issue.  I had to re-write this as the original example I had did not allow for priority to be manually set on a test level.
public class RePrioritizingListener implements IAnnotationTransformer {

    HashMap<Object, Integer> priorityMap = new HashMap<Object, Integer>();
    Integer class_priorityCounter = 10000;
    // The length of the final priority assigned to each method.
    Integer max_testpriorityLength = 4;

    public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {


        // class of the test method.
        Class<?> declaringClass = testMethod.getDeclaringClass();
        // Current priority of the test assigned at the test method.
        Integer test_priority = annotation.getPriority();
        // Current class priority.
        Integer current_ClassPriority = priorityMap.get(declaringClass);

        if (current_ClassPriority == null) {
            current_ClassPriority = class_priorityCounter++;
            priorityMap.put(declaringClass, current_ClassPriority);
        }

        String concatenatedPriority = test_priority.toString();

        // Adds 0's to start of this number.
        while (concatenatedPriority.length() < max_testpriorityLength) {
            concatenatedPriority = "0" + concatenatedPriority;
        }

        // Concatenates our class counter to the test level priority (example
        // for test with a priority of 1: 1000100001; same test class with a
        // priority of 2: 1000100002; next class with a priority of 1. 1000200001)
        concatenatedPriority = current_ClassPriority.toString() + concatenatedPriority;

        //Sets the new priority to the test method.
        annotation.setPriority(Integer.parseInt(concatenatedPriority));

        String printText = testMethod.getName() + " Priority = " + concatenatedPriority;
        Reporter.log(printText);
        System.out.println(printText);

    }

}

然后在testng.xml配置中添加

    <listeners>
        <listener class-name="tools.testng_Listeners.RePrioritizingListener"></listener>
    </listeners>

 

 

2.添加dependsOnGroups,具體如下 

 

  第一個類
  @Test(priority=1, groups="1") public void testAddInfo() { System.out.println("testAddInfo"); } @Test(priority=2, groups="1") public void testPublishInfo() { System.out.println("testPublishInfo"); } @Test(priority=3, groups="1") public void testCancleInfo() { System.out.println("testCancleInfo"); } @Test(priority=4, groups="1") public void testDeleteInfo() { System.out.println("testDeleteInfo"); } @Test(priority=5, groups="1") public void testSearchInfo() { System.out.println("testSearchInfo"); }

第二個類

  @Test(priority=1,dependsOnGroups= {"1"}) public void testAdd() { System.out.println("testAdd"); } @Test(priority=2,dependsOnGroups= {"1"}) public void testPublish() { System.out.println("testPublish"); } @Test(priority=3,dependsOnGroups= {"1"}) public void testCancle() { System.out.println("testCancle"); } @Test(priority=4,dependsOnGroups= {"1"}) public void testDelete() { System.out.println("testDelete"); } @Test(priority=5,dependsOnGroups= {"1"}) public void testSearch() { System.out.println("testSearch"); }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM