上一篇文章介绍了试驾的相关概念,并以junit4为例,向大家展示了如何在测试框架中实现试驾。详情:试驾技术系列一:本文将带你试驾数据驱动。你会发现Junit4对同一个测试类中的多组数据实现了数据驱动。不是很方便,需要我们自己解决!我也说过在TestNG这个问题很容易解决!我给自己挖了个坑!挖的坑一定要填,今天给大家讲解一下数据驱动在TestNG中的应用。本文只关注TestNG参数化相关的知识。TestNG的环境配置和基本使用不在本文讨论范围内!TestNG中使用DataProvider实现参数化功能。在执行一个用例时,dataProvider迭代中的每组数据都作为一个用例执行。一组参数化数据定义参数化数据,代码如下:@DataProviderpublicObject[][]dp1(){returnnewObject[][]{newObject[]{1,1,0},newObject[]{2,1,1},newObject[]{2,1,2},};}在用例中使用参数化数据(由dp1定义),代码如下:@Test(dataProvider="dp1")publicvoidf1(Integern1,Integern2,Integern3){Integerresult=n2+n3;assertEquals(n1,result);}多组参数化数据在一个测试类中,可以定义多组参数化数据(参数化数据个数不同,三个dp1,两个dp2),代码如下:@DataProviderpublicObject[][]dp2(){returnnewObject[][]{newObject[]{1,1},newObject[]{2,1},newObject[]{2,1},};}用例中使用的参数数据(由dp2定义),代码如下:@Test(dataProvider="dp2")publicvoidf2(Integern1,Integern2){assertEquals(n1,n2);}DataProvider引用了测试方法。我们可以自定义一些方法对外部文件进行读取,然后在TestNG中将读取到的数据作为参数引用。具体方法如下:写一个读取各种文件(txt、excel、db)的方法。具体的代码就不给出了,但是一定要注意方法返回值必须是Object[][](操作excel的知识在后面的文章中介绍)publicObject[][]readfile(Stringp_file){returnnewObject[][]{{1,1},{1,2}};}在@DataProvider修饰的方法中调用该方法(也可以直接实现)@DataProvider(name="dp_func")publicObject[][]testData(MethodtestMethod){returnreadfile("");}用例中使用参数化Data(dp_func),代码如下:@Test(dataProvider="dp_func")publicvoidf3(Integern1,Integern2){assertEquals(n1,n2);}完整代码importorg.testng.annotations.DataProvider;importorg.testng.annotations.Test;importstaticorg.testng.Assert.assertEquals;importjava.lang.reflect.Method;publicclassNewTest{@DataProviderpublicObject[][]dp1(){returnnewObject[][]{newObject[]{1,1,0},newObject[]{2,1,1},newObject[]{2,1,2},};}@DataProviderpublicObject[][]dp2(){returnnewObject[][]{newObject[]{1,1},newObject[]{2,1},newObject[]{2,1},};}@DataProvider(name="dp_func")publicObject[][]testData(MethodtestMethod){returnreadfile("");}//读取各类文件,返回值为Object[][]publicObject[][]readfile(Stringp_file){returnnewObject[][]{{1,1},{1,2}};}@Test(dataProvider="dp1")publicvoidf1(Integern1,Integern2,Integern3){Integerresult=n2+n3;assertEquals(n1,result);}@Test(dataProvider="dp2")publicvoidf2(Integern1,Integern2){assertEquals(n1,n2);}@Test(dataProvider="dp_func")publicvoidf3(Integern1,Integern2){assertEquals(n1,n2);}}运行测试用例,可以看到用例参数化成功,f1执行3次,f2执行3次,f3执行2次,如下图所示:
