TestNG中的DataProvider返回Iterator的妙用

时间:2023-01-31 18:05:44

TestNG中使用DataProvider有个好处,就是:

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

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

注意:但是dataProvider作为数据提供者只能返回Object[][]和Iterator<Object[]>类型的数据

 

那我们的数据是按照对象存储的该怎么写入和输出呢,我这里提供一个简单的样例:

    // 返回Iterator<Object[]>
@DataProvider(name = "iterator")
public Iterator<Object[]> dp1() {
List
<Object> item = new ArrayList<Object>();

// 添加第一个用户
UserInfo user1 = new UserInfo();
user1.setUserName(
"User1");
user1.setPassword(
"Password1");
item.add(user1);

// 添加第二个用户
UserInfo user2 = new UserInfo();
user2.setUserName(
"User2");
user2.setPassword(
"Password2");
item.add(user2);

List
<Object[]> users = new ArrayList<Object[]>();

for (Object u : item) {
//做一个形式转换
users.add(new Object[] { u });
}
return users.iterator();

}

我们将上述的UserInfo的数据组放入到了iterator中,怎么调用呢?

    @Test(dataProvider = "iterator")
public void testProvider(UserInfo user) {
System.out.println(
"User Name is: "+ user.getUserName() +"\n"+"User password is" + user.getPassword());

}

这里给出一个UserInfo的对象

/**  
* @Title: UserInfo.java
* @Package com.dataProvider.domain
* @Description: TODO(用一句话描述该文件做什么)
*
@author pc
* @date 2017年1月16日
*
@version V1.0
*/

package com.dataProvider.domain;

/**
* @ClassName: UserInfo
* @Description: TODO(这里用一句话描述这个类的作用)
*
@author pc
* @date 2017年1月16日
*
*/

public class UserInfo {
private String userName;
private String password;

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

}