日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

testNG之参数化测试

發布時間:2023/12/18 编程问答 34 如意码农
生活随笔 收集整理的這篇文章主要介紹了 testNG之参数化测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

@Parameters

測試的時候,測試的數據可以放在testng.xml文件中,被測試的方法通過@Parameters注解傳遞到測試方法中

parameterizedTest.java

import org.testng.annotations.Parameters;
import org.testng.annotations.Test; public class parameterizedTest {
@Test
@Parameters("myName")
public void testMethod(String myName) {
System.out.println("myName:" + myName);
}
}

testng.xml:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Suite1" verbose="1" >
<test name="Regression1" preserve-order="true">
<parameter name="myName" value="大盜如風"></parameter>
<classes>
<class name="parameterizedTest"></class>
</classes>
</test>
</suite>

運行testng.xml,結果如下:

myName:大盜如風

@DataProvider

@Test(dataProvider = "")

如果測試的數據較多的情況下,很顯然這種方式不適合,那么可以通過@DataProvider生成測試數據,通過@Test(dataProvider = "")使用測試數據

parameterizedTest2.java

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test; public class parameterizedTest2 {
// 定義數據源
@DataProvider(name = "test")
public Object[][] createData() {
return new Object[][]{{"dadaorufeng",29},{"zhangsan",28}};
} // 使用數據源
@Test(dataProvider = "test")
public void verifyData(String name, int age) {
System.out.println("name:" + name + ",age:" + age);
}
}

testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Suite1" verbose="1" >
<test name="Regression1" preserve-order="true">
<classes>
<class name="parameterizedTest2"></class>
</classes>
</test>
</suite>

運行testng.xml,結果如下:

name:dadaorufeng,age:29
name:zhangsan,age:28

剛才這段代碼,定義數據源和使用數據源的代碼在同一個class中,如果不在同一個class的話,怎么辦呢?parameterizedTest2.java中定義數據源,parameterizedTest3.java使用數據源

parameterizedTest2.java

import org.testng.annotations.DataProvider;

public class parameterizedTest2 {
// 定義數據源
@DataProvider(name = "test")
public static Object[][] createData() {
return new Object[][]{{"dadaorufeng",29},{"zhangsan",28}};
}
}

parameterizedTest3.java

import org.testng.annotations.Test;

public class parameterizedTest3 {
// 使用數據源
@Test(dataProvider = "test")
public void verifyData(String name, int age) {
System.out.println("name:" + name + ",age:" + age);
}
}

testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Suite1" verbose="1" >
<test name="Regression1" preserve-order="true">
<classes>
<class name="parameterizedTest3"></class>
</classes>
</test>
</suite>

直接運行testng.xml,結果如下,報錯找不到test的@DataProvider :

org.testng.TestNGException:
Method public void parameterizedTest3.verifyData(java.lang.String,int) requires a @DataProvider named : test
at org.testng.internal.Parameters.findDataProvider(Parameters.java:268)
at org.testng.internal.Parameters.handleParameters(Parameters.java:381)
at org.testng.internal.Invoker.handleParameters(Invoker.java:1315)
at org.testng.internal.Invoker.createParameters(Invoker.java:1022)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1122)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.runWorkers(TestRunner.java:1147)
at org.testng.TestRunner.privateRun(TestRunner.java:749)
at org.testng.TestRunner.run(TestRunner.java:600)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:317)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:312)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:274)
at org.testng.SuiteRunner.run(SuiteRunner.java:223)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1039)
at org.testng.TestNG.runSuitesLocally(TestNG.java:964)
at org.testng.TestNG.run(TestNG.java:900)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:110)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:205)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:174)

修改parameterizedTest3.java,添加dataProviderClass = parameterizedTest2.class屬性,指定數據源所在的類

import org.testng.annotations.Test;

public class parameterizedTest3 {
// 使用數據源
@Test(dataProvider = "test",dataProviderClass = parameterizedTest2.class)
public void verifyData(String name, int age) {
System.out.println("name:" + name + ",age:" + age);
}
}

再次運行testng.xml,結果如下,測試通過:

name:dadaorufeng,age:29
name:zhangsan,age:28

總結

以上是生活随笔為你收集整理的testNG之参数化测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。