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


    TestNG中使用DataProvider有如下好处:

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

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

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

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

    testdata.txt

    {    "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文件

    /*
     * 接口测试中,接口的信息封装成一个对象
     */
    @Data
    public class TestCase {
    //	接口name
    	private String name;
    //	接口url
       	private String url;
    //   	接口的请求方式
       	private String method;
    //   	接口的请求体
       	private Map<String,Object> body;
       
    }
    

    测试数据源:

    	/**
    	 *  从外部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只运行其对应的测试数据。

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

      

  • 相关阅读:
    javascript小括号、中括号、大括号学习总结
    第二次面试
    Python 类编码风格
    Python常见初级错误
    2.傅里叶变换
    1.仿射变换
    Leetcode 136. 只出现一次的数字
    003 Python与类C语言的区别(未完)
    01 C++ 多线程入门实例
    Leetcode 503. 下一个更大元素 II
  • 原文地址:https://www.cnblogs.com/sunshine2017/p/11436227.html
Copyright © 2020-2023  润新知