博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TestNG中在一个suite标签中的多个test标签之间共享中间数据的方法
阅读量:4180 次
发布时间:2019-05-26

本文共 1300 字,大约阅读时间需要 4 分钟。

在TestNG的一个测试suite中,可能存在多个<test>,那么在不同的<test>标签内部的测试类,其之间如何共享动态中间数据呢?

比如在一个<test>中的一个测试类Producer中,一个测试方法产生了中间数据groupIds;而在后续另一个<test>中的一个测试类Consumer中,一个测试方法要访问这个中间数据。测试套件如下:

    
      
        
      
    
    
      
        
      
    

这个问题在TestNG的文档和JavaDoc中都没有明确的提及。但是在分析TestNG的JavaDoc的过程中,通过查找IAttributes的子接口,ISuite接口映入眼帘。

在TestNG的JavaDoc中,一个ISuite对象就代表一个<suite>标签内的上下文。因而在一个<suite>中的多个<test>标签,可以通过ISuite对象共享数据。

回到TestNG的文档,我们在5.19依赖注入章节中,可以看到一个TestNG标注与可注入参数类型表,如下所示。但是,我强烈怀疑这个表的正确性,其中的XmlTest应该就是ISuite,因为想象不出什么时候会用到XmlTest。

但是无奈,SuiteRunner就是这么规定的,提示信息如下:

Can inject only one of 
into a @BeforeClass annotated ...
Can inject only one of 
into a @AfterClass annotated ...

幸好有Google,我找到了正解,借助于特立独行的org.testng.Reporter类的静态方法获取当前ISuite对象,然后就顺理成章了。

验证过程如下。

生产数据的测试类Producer,在任何需要设置中间数据的方法中:

...public static final String SERVER_GROUPS = "SERVER_GROUPS";ISuite suite = Reporter.getCurrentTestResult().getTestContext().getSuite();suite.setAttribute(SERVER_GROUPS, groupIds);...

消费数据的测试类Consumer,在任何需要获取中间数据的方法中:

...public List
groupIds;ISuite suite = Reporter.getCurrentTestResult().getTestContext().getSuite();groupIds = (List
) suite.getAttribute(attributeName);...

 

参考链接:

转载地址:http://mqlai.baihongyu.com/

你可能感兴趣的文章
Hibernate中的Query cache(查询缓存)
查看>>
Hibernate的interceptors与events
查看>>
Android常用代码
查看>>
Cardboard虚拟现实开发初步(二)
查看>>
60个优秀的免费3D模型下载网站
查看>>
Cardboard虚拟现实开发初步(三)
查看>>
Android native和h5混合开发几种常见的hybrid通信方式
查看>>
Vista/Win7 UAC兼容程序开发指南
查看>>
IOS程序开发框架
查看>>
安装jdk的步骤
查看>>
简述JAVA运算符
查看>>
简易ATM源代码及运行结果
查看>>
简述Java中的简单循环
查看>>
用JAVA实现各种乘法表
查看>>
for双重循环实现图形
查看>>
Java类和对象基础
查看>>
简述Java继承和多态
查看>>
Java中Arrays工具类的用法
查看>>
简述JAVA抽象类和接口
查看>>
JAVA常用基础类
查看>>