参数化@DataProvider
欲将沉醉换悲凉,清歌莫断肠。这混乱的尘世,究竟充斥了多少绝望和悲伤。你想去做一个勇敢的男子,为爱,为信仰,轰轰烈烈的奋斗一场。
上期TestNG使用xml方式传递, 广大粉友私信我, 再出一期简介两者的应用场景.应粉友的要求,本期分享@DataProvider 方式在TestNG中传递参数.
那就还是使用上期的项目示例:
一. 使用@DataProvider 传递 int 参数.
1.创建java类:TestParameterDataProvider1
public class TestParameterDataProvider1 {
@Test(dataProvider = "provideNumbers")
public void test1(int actual, int expected){
Assert.assertEquals(actual+10,expected);
}
@DataProvider(name="provideNumbers")
public Object[][] provideData(){
return new Object[][]{{10,20},{100,110},{200,210}};
}
}
2.配置testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEsuiteSYSTEM"http://testng.org/testng-1.0.dtd">
<suite name="test-parameter" verbose="1">
<test name="example1" preserve-order="true">
<classes>
<class name="TestParameterDataProvider1"/>
</classes>
</test>
<!--<test name="example2">-->
<!--<groups>-->
<!--<run>-->
<!--<include name="groupA"/>-->
<!--<exclude name="groupB"/>-->
<!--</run>-->
<!--</groups>-->
<!--<classes>-->
<!--<class name="TestParameterDataProvider2"/>-->
<!--</classes>-->
<!--</test>-->
<test name="example3" preserve-order="true">
<classes>
<class name="TestParameterDataProvider3"/>
</classes>
</test>
</suite>
3. 运行看下结果
/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/java
actual==>10
expected==>20
actual==>100
expected==>110
actual==>200
expected==>210
===============================================
test-parameter
Total tests run: 3, Failures: 0, Skips: 0
===============================================
Process finished with exit code 0
二. 使用@DataProvider 传递 ITestContext 对象
1.创建java类:TestParameterDataProvider2
public class TestParameterDataProvider2 {
@Test(dataProvider = "dataProvider", groups = {"groupA"})
public void test1(int number) {
Assert.assertEquals(number, 1);
}
@Test(dataProvider = "dataProvider", groups = {"groupB"})
public void test2(int number) {
Assert.assertEquals(number, 2);
}
@DataProvider(name = "dataProvider")
public Object[][] provideData(ITestContext context) {
Object[][] result = null;
for (String group : context.getIncludedGroups()) {
System.out.println("group==>>" + group);
if ("groupA".equals(group)) {
result = new Object[][] {{1}};
System.out.println("===groupA===");
}else if ("groupB".equals(group)){
result=new Object[][]{{2}};
System.out.println("===groupB===");
}
}
if (result == null) {
result = new Object[][] {{3}};
System.out.println("===什么都不是===");
}
return result;
}
}
2.配置testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEsuiteSYSTEM"http://testng.org/testng-1.0.dtd">
<suite name="test-parameter" verbose="1">
<test name="example2">
<groups>
<run>
<include name="groupA"/>
<exclude name="groupB"/>
</run>
</groups>
<classes>
<class name="TestParameterDataProvider2"/>
</classes>
</test>
</suite>
3. 运行看下结果
/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/java
group==>>groupA
===groupA===
===============================================
test-parameter
Total tests run: 1, Failures: 0, Skips: 0
===============================================
Process finished with exit code 0
三.使用@DataProvider 传递 Method
1.创建java类:TestParameterDataProvider3
public class TestParameterDataProvider3 {
@Test(dataProvider = "dataProvider")
public void test1(int actual, int expected){
Assert.assertEquals(actual,expected);
System.out.println("actual="+actual+" expected="+ expected);
}
@Test(dataProvider = "dataProvider")
public void test2(String actual, String expected){
Assert.assertEquals(actual,expected);
System.out.println("actual="+actual+" expected="+ expected);
}
@DataProvider(name = "dataProvider")
public Object[][] provideData(Method method){
Object[][]result=null;
if (method.getName().equals("test1")) {
result = new Object[][] {
{ 1, 1 }, { 200, 200 }
};
} else if (method.getName().equals("test2")) {
result = new Object[][] {
{ "实际结果1", "实际结果1" },
{ "实际结果2", "实际结果2" }
};
}
System.out.println("result="+result);
return result;
}
2.配置testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEsuiteSYSTEM"http://testng.org/testng-1.0.dtd">
<suite name="test-parameter" verbose="1">
<test name="example3" preserve-order="true">
<classes>
<class name="TestParameterDataProvider3"/>
</classes>
</test>
</suite>
3. 运行看下结果
/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/java
actual=1 expected=1
actual=200 expected=200
result=[[Ljava.lang.Object;@623f5254
actual=实际结果1 expected=实际结果1
actual=实际结果2 expected=实际结果2
===============================================
test-parameter
Total tests run: 4, Failures: 0, Skips: 0
===============================================
Process finished with exit code 0
今天分享就到这里, 方式还有很多, 大家根据个人使用场景,合适的才是最好的.