TestNG+Factory,自定义方法的执行顺序

发表于:2018-2-05 10:28

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:渔歌子Q    来源:博客园

  最近使用TestNG有一个需求,希望在配合使用factory执行测试时,factory生成测试数据的执行顺序与生成时保持一致。
  在未做任何定制时,执行顺序是随机的,如果想要一致的顺序,就得额外配置拦截器:IMethodInterceptor
  具体实现方法, 如下:
  工厂类:
@Listeners(ExampleInterceptor.class) // 通过拦截器重新给方法排序, 否则是乱序的
public class FactoryTest_Order {
@Factory
public Object[] createInstance() {
return new Object[]{
new TestData().setName("Zidane").setOrder(1),
new TestData().setName("Eva").setOrder(2),
new TestData().setName("Jane").setOrder(3),
new TestData().setName("Jack").setOrder(4)
};
}
}
  测试类:
1 public class TestData {
2
3     private String name;
4     private int order;
5
6     public String getName() {
7         return name;
8     }
9
10     public TestData setName(String name) {
11         this.name = name;
12         return this;
13     }
14
15     public int getOrder() {
16         return order;
17     }
18
19     public TestData setOrder(int order) {
20         this.order = order;
21         return this;
22     }
23
24     @Test
25     public void test(){
26         System.out.println("order="+order);
27         System.out.println("Name="+name);
28     }
29 }
  拦截器(关键):
public class MethodInterceptor implements IMethodInterceptor {
@Override
public List<IMethodInstance> intercept(List<IMethodInstance> list, ITestContext iTestContext) {
Map<String,IMethodInstance> orders = new TreeMap<>(); // 有序map
for (IMethodInstance instance : list) {
TestData testData = (TestData) instance.getInstance();
orders.put(String.valueOf(testData.getOrder()), instance);
}
List<IMethodInstance> orderList = new ArrayList<>(list.size());
for (String order : orders.keySet()) { // 重新排序
IMethodInstance test = orders.get(order);
orderList.add(test);
}
return orderList; // TestNG会按这个返回的List内实例的顺序来执行
}
}

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号