TestNg由以下几种数据驱动形式:
- 直接在testng.xml文件定义简单参数,然后在源文件引用,适合参数数据少的情况
- 直接将测试数据写在测试类,然后使用dataProvider来关联数据,这适合用于测试数据少的情况
- 将数据写到外部数据文件(如CSV,EXCEL等)中,这适合数据量多的情况
测试使用parameter的方法,在testng.xml文件定义
测试类 参数引入
public class LoginParamsTest {
Login login = new Login();
@Test()
@Parameters({"username","pwd"})
public void TestLoginParam(String username,String pwd) {
login.userLogin(username, pwd);
}
}
testng.xml参数设置值
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test thread-count="5" verbose="1" preserve-order="true" name="Parameter">
<parameter name="username" value="admin"></parameter>
<parameter name="pwd" value="123456"></parameter>
<parameter name="proId" value="1"></parameter>
<parameter name="count" value="1"></parameter>
<classes>
<class name="LoginParam.LoginParamsTest">
<methods>
<include name="TestLoginParam"></include>
</methods>
</class>
</classes>
</test> <!-- testng2.xml -->
</suite> <!-- Suite -->
testng.xml只是用来传递简单的参数,如果需要传递复杂的参数,可以使用Dataprovider来给需要的测试提供参数。所谓数据提供者,就是能返回对象数组的方法,并且这个方法被@DataProvider注解标注
DataProvider注解 来给其他测试方法提供数据的方法。要求该方法必须返回是object[][].
下面讲解实例:
@Test(dataProvider = "getUsers", dataProviderClass = GenrateData.class)
public void testLogin(String name1, String pwd1, String expect1) {
Login login = new Login();
String ac = login.userLogin(name1, pwd1);
Reporter.log("用户登陆成功");
Assert.assertEquals(ac, expect1);
}
@DataProvider(name = "getUsers")
public Object[][] getUsers(){
return new Object[][]{
{"","","用户名或密码不能为空"},
{"login","","用户名或密码不能为空"},
{"","123456","用户名或密码不能为空"},
{"admin","admin","欢迎管理员登录"},
{"","","用户名或密码不能为空"},
{"login","123456","欢迎用户:login登录"}
};
}