Testng注解之dataprovider(参数化)

Testng注解之dataprovider(参数化)

数据驱动是最常见的自动化测试框架模式之一,TestNG亦支持数据驱动,常用的有@Parameters和@DataProvider两种注解。这次主要是记录dataprovider的用法。

使用DataProvider提供数据有两种形式:

第一种:测试代码和测试数据放在同一个类中;

定义一个函数,函数名随意取,使用@DataProvider注解,注解中用name给这个provider起名字,该函数返回一个二维数组。

package BaseTestCast;

import org.testng.annotations.DataProvider;

import org.testng.annotations.Test;

public class Testdemo {

@DataProvider(name = "data")

public Object[][] createData1() {

return new Object[][] {

{ "zhangsan", 36},

{ "lisi",20},

{ "wanger",20} };

}

//定义了属性name时,提取数据时可以使用name,没有定义name时,提取数据时直接使用方法名称。

@Test(dataProvider = "data")

public void testProvider(String n1, Integer n2) {//参数必须和DataProvider返回的一致

System.out.println(n1 + " " + n2);

}

}

运行结果:

可以看到该测试方法运行了3次,每一次都把一个DataProvider提供的数组作为自己的参数输入然后执行了测试。

第二种:把所有的数据提供都单独写在一个类里面,当测试数据比较多时,这种方法利于维护。

这种方式需通过dataProviderClass属性来指定@DataProvider类位置,并且@DataProvider注解的方法保持静态(static)。示例:

//数据类:

public class dataProviderDemo {

@DataProvider(name = "data")

public static Object[][] createData1() {

return new Object[][] {

{ "zhangsan", 36 },

{ "lisi",20},

{ "wanger",20}

};

}

}

//test类:

public class Testdemo {

@Test(dataProvider = "data",dataProviderClass = dataProviderDemo.class)

public void testProvider(String n1, Integer n2) {

System.out.println(n1 +","+ n2);

}

}

运行test后,结果:

zhangsan,36

lisi,20

wanger,20

除了上述的return Object[][],@DataProvider注解的方法也允许使用迭代器,区别是迭代器允许你延迟创建自己的测试数据,TestNG会调用迭代器,之后测试方法会一个接一个的调用由迭代器返回的值。在你需要传递很多参数组给测试方法的时候,无须提前创建一堆值。

package BaseTestCast;

import org.testng.annotations.DataProvider;

import org.testng.annotations.Test;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class Testdemo {

@DataProvider

public Iterator providerString() {

List item = new ArrayList<>();

for (int i = 0; i < 5; i++) {

item.add(String.valueOf(i));

}

List users = new ArrayList<>();

for (Object u : item) {

users.add(new Object[]{u});

}

return users.iterator();

}

@Test(dataProvider = "providerString")

public void testmethod(String param) {

System.out.println("method received:" + param);

}

}

运行结果:

1、使用二维数组作为参数输出,每一个单元作为参数输出

2、使用迭代类型作为参数输出,每一个迭代作为参数输出

带Method参数的DataProvider

如果希望DataProvider对不同的Test方法使用不同的dataprovider,那么在DataProvider中可以使用Method参数。

package BaseTestCast;

import org.testng.annotations.DataProvider;

import org.testng.annotations.Test;

import java.lang.reflect.Method;

public class Testdemo {

@Test(dataProvider = "data")

public void getFirst(String name, int age) {

System.out.println("print第一组"+name+";"+age);

}

@Test(dataProvider = "data")

public void getSecond(String name, int age) {

System.out.println("print第二组 " + name +";"+age);

}

@Test(dataProvider = "data")

public void getthird(String name, int age) {

System.out.println("print第三组 " + name +";"+age);

}

@DataProvider(name = "data")

public Object[][] provider(Method method) {

Object[][] objects;

if (method.getName().equals("getFirst")) { //如果调用该DataProvider的函数是getFirst,那么就返回这个数组

objects = new Object[][] { { "test11", 11 }, { "test12", 12 } };

} else if (method.getName().equals("getSecond")) {//如果调用该DataProvider的函数是getSecond,那么就返回这个数组

objects = new Object[][] { { "test21", 21 }, { "test22", 22 } };

} else { //如果调用该DataProvider的函数不是getFirst也不是getSecond,那么就返回这个数组

objects = new Object[][] { {"test31",31}, {"test32",32} };

}

return objects;

}

}

运行结果:

这里根据调用DataProvider的函数名,返回了不同的参数。

由于没有指定运行顺序,所以Test会按照字母顺序执行,先执行getFirst,然后getSecond..

参考文档:

1、https://my.oschina.net/771328074/blog/832423

2、https://www.cnblogs.com/lixiaowei395659729/p/8717992.html

3、https://www.cnblogs.com/beifucangqiong/p/11246988.html

相关推荐

共生币挖矿各种问题大总结:共生币可以交易吗?
beat365唯一官网

共生币挖矿各种问题大总结:共生币可以交易吗?

📅 09-08 👁️ 8001
5s充电头用1A 2A还是2.4A的 , 苹果5s充电器是多大电流
海钓绑钩技巧,深度解析绑钩技巧
365bet滚球网

海钓绑钩技巧,深度解析绑钩技巧

📅 08-23 👁️ 3946
品牌故事 —— 关于我们
beat365唯一官网

品牌故事 —— 关于我们

📅 09-23 👁️ 7735
颖字的五行是什么
365bet滚球网

颖字的五行是什么

📅 08-17 👁️ 422
牧场星球 (简体中文)
beat365唯一官网

牧场星球 (简体中文)

📅 09-21 👁️ 9327
如果你不夠高,就別想選總統了!從世界各國領袖高於國內平均身高,揭人類對「愈高愈有力量」的迷思
顿号在键盘上怎么打?教你4种输入方法
365bet滚球网

顿号在键盘上怎么打?教你4种输入方法

📅 07-26 👁️ 9602
情侣吵架很正常,但这件事千万不能做
监控sh365下载

情侣吵架很正常,但这件事千万不能做

📅 09-06 👁️ 9990