在testng里可以实用多钟方式进行数据驱动测试,本文将讲解DataProvider
常用的几种方式
大家也可以参考官网进行学习https://testng.org/doc/documentation-main.html
前言
- @DataProvider(name = “data”) 数据定义的注解,其返回值为Object数组,name里的名字,表示调用时的名字
- @Test(description = “数据驱动测试”, dataProvider = “data”) 这里的
dataProvider
需要与定义数据时的名字保持一直
直接传递数据
@DataProvider(name = "data")
public Object[][] providerData() {
Object[][] objects = new Object[][]{
{"zhangsan", 10},
{"lisi", 20},
{"wangwu", 30}
};
return objects;
}
@Story("第一个数据案例")
@Test(description = "数据驱动测试", dataProvider = "data")
public void dataProvider1(String name, Integer age) {
log.info("name = [{}] ; age = [{}]", name, age);
}
输出结果
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - name = [zhangsan] ; age = [10]
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - name = [lisi] ; age = [20]
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - name = [wangwu] ; age = [30]
根据方案名进行数据分离
@DataProvider(name = "methodData")
public Object[][] methodDataTest(Method method) {
Object[][] result = null;
if (method.getName().equals("dataProvider2")) {
result = new Object[][]{
{"zhangsan", 20},
{"lisi", 25}
};
} else if (method.getName().equals("dataProvider3")) {
result = new Object[][]{
{"wangwu", 50},
{"zhaoliu", 60}
};
}
return result;
}
@Story("第二个数据案例")
@Test(description = "数据驱动测试", dataProvider = "methodData")
public void dataProvider2(String name, Integer age) {
log.info("name = [{}] ; age = [{}]", name, age);
}
@Story("第三个数据案例")
@Test(description = "数据驱动测试", dataProvider = "methodData")
public void dataProvider3(String name, Integer age) {
log.info("name = [{}] ; age = [{}]", name, age);
}
输出结果
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - dataProvider2 :name = [zhangsan] ; age = [20]
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - dataProvider2 :name = [lisi] ; age = [25]
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - dataProvider3: name = [wangwu] ; age = [50]
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - dataProvider3: name = [zhaoliu] ; age = [60]
通过查询数据库进行实体类传递
@DataProvider(name = "data2")
public Object[] data2(Method method) {
List<SysUserEntity> all = testService.findAll();
return new Object[][]{{all}};
}
@Story("第四个数据案例")
@Test(description = "数据驱动测试-传递实体类", dataProvider = "data2")
public void dataProvider4(List<SysUserEntity> all) {
for (SysUserEntity sysUserEntity : all) {
log.info("name = [{}] ; password = [{}]", sysUserEntity.getUsername(), sysUserEntity.getPassword());
}
}
数据结果
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - name = [62f1a5b8-fa8c-4724-b638-2239e1afa468] ; password = [ec3a7656-270e-47fa-85fa-771da83dd580]
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - name = [83e109d4-b7e3-48a3-84da-c70176075d92] ; password = [3c7ae251-5ed6-424e-ac58-0f9190041c03]
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - name = [0306ce57-f690-4beb-88a5-ee3d46c74f24] ; password = [ea81b001-4a06-4b00-962f-d0383109ecec]
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - name = [9b522e2f-f37b-43a9-a897-363e8be2c92f] ; password = [2938c81f-63b1-454d-97e6-cac52d542298]
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - name = [edfae7d4-bcbe-4b98-b313-1384eb9966a0] ; password = [9acf8b2a-68b6-4126-b52d-b4dc3cf9e35b]
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - name = [773f77ff-708c-4649-9123-b4b7fc87edc9] ; password = [8ce4ac45-0537-4a06-a474-7f6e2b0693ef]
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - name = [c3e03f23-44f3-4f18-b701-db4b96c041cc] ; password = [0300a573-9096-4c82-908c-858960700640]
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - name = [dab0d4ec-d31e-47d4-92c5-9777422597cc] ; password = [267a3cb3-932e-4351-a05a-569225d5b667]
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - name = [2f129cc8-96ec-44d0-8fbd-99631d0b563c] ; password = [eca04690-bb4a-4aa5-b4da-0817d147b278]
2022-11-25 [main] INFO com.javayh.qpt.arsenal.TestParameter - name = [34016947-268c-4c28-9781-abfa9414ea40] ; password = [59bc4640-026d-4853-8502-8bf5f13f5944]
本次的分享就到这里,大家想了解更多,获取源码,可以访问https://github.com/yanghaiji/qpt