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"); }

 

转载于:https://www.cnblogs.com/xiaoyii/p/9634733.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值