TestNg数据驱动--利用@DataProvider传递参数

一、背景

       在了解@DataProvider前先简单介绍为啥会想到用@DataProvider。其实之前也了解过TestNg的@DataProvider,也用过它,对它的了解就是仅仅是提供数据的。直到今天学习写接口自动化测试过程中遇到一个问题才了解到它还有“对测试方法多次调用”的作用。

下面具体讲讲今天遇到的问题:

测试用例存放位置:将个接口的所有测试用例存放在一张数据库表中,一条记录为一条测试用例。

问题情况:在@test方法中通过for循环执行某个接口的所有测试用例。结果在测试报告中只展示了执行了一条测试用例。

TestNg数据驱动--利用@DataProvider传递参数_第1张图片

思考:思来想去,其实展示一条测试用例也是对的,因为也确实只有一个@test方法。那问题来了,怎样才能达到我想要的效果呢?在测试报告中可以展示执行了多条测试用例?经过百度,看到了TestNg的@DataProvider可以多次调用test,应该可以解决问题。决定试试。

最后解决方法:

从数据库中读取某接口的所有测试用例,放在一个数据提供者方法中。再由该数据提供者给@Test方法提供测试数据

@Test(dataProvider = "getUserInfoCaseDate")
    //这里方法中的参数类型和个数需要和DataProvider返回的数据类型和个数一一对应
    public void getUserInfoTrue(int id,String param1,String param2,...) throws IOException 
 {
     
 }
    /**
     * 获取数据库表getuserinfocase中isDelete=0的所有数据
     */

    @DataProvider (name = "getUserInfoCaseDate")
    public  Object[][] readDateFromDataBase() {
          Object[][] dataResult = new Object[5][6];
          //具体数据省略
          return  dataResult;
    }

结果:TestNg数据驱动--利用@DataProvider传递参数_第2张图片 

二、@DataProvider介绍 

数据提供者是用@DataProvider标注的方法。数据提供者返回一些Java对象,这些对象将作为参数传递给一个@Test标注的方法。从哪个数据提供者接收参数是在@Test annotation的dataProvider属性中指定的。

从本质上来说,数据提供者同时实现两个目的:

1)向测试方法传递任意书面的参数(可以是任何Java类型)

2)根据需要,允许利用不同的参数集合对它的测试方法进行多次调用

数据提供者的好处:将测试代码与驱动测试的数据分离开来。当您恰当地分离了测试数据之后,这些数据可以独立修改,不必同时修改Java代码(当然,只要测试方法不需要改变)

@DataProvider的基本用法可参考第一点背景中的解决方法。查阅资料,其实数据提供者本身可接受两个类型的参数:Method和ITestContext.。因精力有限后续有需要用到这两个参数再进行补充。。。

额写完这篇文章已累瘫。( Ĭ ^ Ĭ )突然有点佩服能把帖子写得清楚明了的亲们。。好吧,还得加油。

 

你可能感兴趣的:(testng)