testNG的DataProvider返回Iterator<Object[]>的妙用

TestNG中使用DataProvider有如下好处:

1. 在执行用例的时候,dataProvider迭代中的每组数据都是作为一个用例执行,实现数据驱动执行

2. 在测试数据有规律的情况下,免去了在XML中添加测试数据的烦恼,直接将测试数据放到dataProvider中即可

其中dataProvider作为数据提供者,只能返回Object[][]和Iterator<Object[]>类型的数据

 

当测试数据包含类对象来达到数据驱动,使用DataProvider的Iterator<Object[]>类型的数据返回就显得那么方便,看个例子。

testdata.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{    "name":"test1",
     "url":"/v1/test",
     "method":"post",
     "body":
        {
            "platformCode": "10001",
            "productCode": "10002",
            "userId": "123456"
        }
};
{
     "name":"test2",
     "url":"/v2/test",
     "method":"post",
     "body":
        {
            "platformCode": "10003",
            "productCode": "10004",
            "userId": "211234"
        }
}

  

TestCase.java文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*
 * 接口测试中,接口的信息封装成一个对象
 */
@Data
public class TestCase {
//  接口name
    private String name;
//  接口url
    private String url;
//      接口的请求方式
    private String method;
//      接口的请求体
    private Map<String,Object> body;
    
}

 

测试数据源:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
 *  从外部txt文件中读取测试数据
 * @param MethodName
 * @return
 */
@DataProvider(name="iterator")
public Iterator<Object[]>  getMethodData1(Method method){
    String data=fileUtil.readFile();
    String[]  strArray=data.split(";");
    List<Object[]> testCases=new ArrayList<>();
    for(String str :strArray){ 
        TestCase testcase = JSON.parseObject(str    ,TestCase.class);
        if(testcase.getName().equals(method.getName())){
        //查询接口的信息要封装成对象
            testCases.add(new Object[]{JSON.parseObject(str ,TestCase.class)});
        }
    }
    return testCases.iterator();
}

 测试方法: 

  根据测试方法执行对应的测试数据,如test1只运行其对应的测试数据。

1
2
3
4
5
@Test(dataProvider="iterator")
public void test1(TestCase testcase){
    System.out.println(testcase.toString());
     
}

  

posted @   sunshine_coast  阅读(788)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示