如何解决数据提供者使用RestAssured不匹配TestNG
我一直在与RestAssured一起玩,并开始使用数据提供程序进行数据驱动的测试。我目前收到数据提供者不匹配错误。我假设这是因为即时通讯传递的字符串或我的api端点不正确吗?而且,这可能是完全不同的线程。如果在这种情况下我想对所有记录进行匹配,那么有没有更好的方法来检查所有1000条记录而不是少数几条?
public class test extends enablers {
@DataProvider
public Object[][] getData() {
return new Object[][]{{24,"27.110.128.25","Fuling" },{145,"212.132.237.53","Muruni" }};
}
@Test(dataProvider = "getData")
public void GetUserId(String data,int userId,String ipAddress,String expectedCity) {
given().
pathParam("id",userId).pathParam("ip_address",ipAddress).
when().
get(id).
then().
assertThat().
body(("id[0].'city'"),equalTo(expectedCity));
}
}
org.testng.internal.reflect.MethodMatcherException:
Data provider mismatch
Method: GetUserId([Parameter{index=0,type=java.lang.String,declaredAnnotations=[]},Parameter{index=1,type=int,Parameter{index=2,Parameter{index=3,declaredAnnotations=[]}])
Arguments: [(java.lang.Integer)24,(java.lang.String)27.110.128.25,(java.lang.String)Fuling]
at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:52)
at org.testng.internal.Invoker.injectParameters(Invoker.java:1278)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1171)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:756)
at org.testng.TestRunner.run(TestRunner.java:610)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:387)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:382)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1293)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1218)
at org.testng.TestNG.runSuites(TestNG.java:1133)
at org.testng.TestNG.run(TestNG.java:1104)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
Test ignored.
===============================================
Default Suite
Total tests run: 1,Failures: 1,Skips: 0
===============================================
这是我的终点站
String id = "http://bpdts-test-app-v2.herokuapp.com/user/{id}/{ip-address}";
解决方法
您的数据提供者应该像
@DataProvider(name="getData")
public Object[][] getData() {
return new Object[][]{{24,"27.110.128.25","Fuling" },{145,"212.132.237.53","Muruni" }};
}
您的测试注释将基于@DataProvider
name属性而不是方法名称来查找dataprovider
这样您的代码就会像
public class test extends enablers {
@DataProvider(name="getData")
public Object[][] getData() {
return new Object[][]{{24,"Muruni" }};
}
@Test(dataProvider = "getData")
public void GetUserId(String data,int userId,String ipAddress,String expectedCity) {
given().
pathParam("id",userId).pathParam("ip_address",ipAddress).
when().
get(id).
then().
assertThat().
body(("id[0].'city'"),equalTo(expectedCity));
}
}
您的dataprovider返回3个对象,而您的测试方法需要4个值,因为它有4个参数。请尝试通过更新dataprovider中所需的数据来返回4个长度的对象,例如
@DataProvider(name="getData")
public Object[][] getData() {
return new Object[][]{
//Add required userid in place of 2
//And 24,145 should be string
{"24",2,{"145","Muruni" }
};
}
您的第一个值必须是字符串,以代替24
和145
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。