使用 RestAssured 的数据提供者不匹配 TestNG

Data provider mismatch TestNG using RestAssured

我一直在研究 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 名称属性而不是基于方法名称

来查找数据提供者

这样你的代码就会像

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));    
    }
}

您的数据提供者 returns 3 对象,而您的测试方法需要 4 个值,因为它有四个 arguments.try 通过更新数据提供者中的所需数据,该数据应该 return 长度为 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" }
        };
     }

并且您的第一个值需要是字符串来代替 24145