testng - 使用 RestAssured 的数据提供者不匹配 TestNG
问题描述
我一直在使用 RestAssured 并开始使用数据提供者进行数据驱动测试。我目前收到数据提供程序不匹配错误。我假设这将是因为我传入了一个字符串,或者我的 api 端点不正确?此外,这可能是一个完全不同的线程。如果我想在这种情况下匹配我对所有记录的响应 1000 是否有更好的方法来检查所有 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, declaredAnnotations=[]}, Parameter{index=2, type=java.lang.String, declaredAnnotations=[]}, Parameter{index=3, type=java.lang.String, 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, "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));
}
}
您的 dataprovider 返回 3 个对象,而您的测试方法需要 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,"27.110.128.25", "Fuling" },
{"145",2,"212.132.237.53", "Muruni" }
};
}
你的第一个值需要是字符串代替24
and145
推荐阅读
- amazon-cloudformation - CloudFormation - 用户数据以 Ubuntu 用户身份运行
- c++ - 创建一个棋盘格或“交织”两个链表。IE改变两个链表的指针
- python - 如何显示熊猫列模糊?
- c# - 找不到包裹***。源中不存在具有此 ID 的包:“Local Nuget”、Microsoft Visual Studio 脱机包、nuget.org
- python - 帧中的背景检测
- java - 如何在 Kotlin 中获取 Java 原始 void 类?
- django - Django 在每个视图中显示消息
- c++ - C++ condition_variable wait_for() 永远阻塞
- windows - VBScript Windows 自动登录脚本
- spring - Spring Boot 2 MongoDB @TypeAlias 不起作用