3

我需要将我的 api 测试响应与外部 JSON 文件进行比较。

执行我的 api 测试时,似乎看到以下异常:'java.lang.IllegalArgumentException: Schema to use cannot be null'。

我的测试:

@Test
public void validateAgainstJsonFile() {
    given()
            .spec(footballCompetitions_requestSpecification)
            .when().get(EndPoint.AREAS + "2014")
            .then()
            .assertThat()
            .body(matchesJsonSchemaInClasspath("footballCompetitions.json"));
}

我的项目结构如下所示:

https://ibb.co/M62rHyF

堆栈跟踪:

java.lang.IllegalArgumentException: Schema to use cannot be null

    at io.restassured.module.jsv.JsonSchemaValidator.validateSchemaIsNotNull(JsonSchemaValidator.java:270)
    at io.restassured.module.jsv.JsonSchemaValidator.access$300(JsonSchemaValidator.java:75)
    at io.restassured.module.jsv.JsonSchemaValidator$JsonSchemaValidatorFactory.create(JsonSchemaValidator.java:281)
    at io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchema(JsonSchemaValidator.java:166)
    at io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath(JsonSchemaValidator.java:117)
    at apiTests.footballData.CompetitionsGetTest.validateAgainstJsonFile(CompetitionsGetTest.java:195)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:648)
    at org.testng.TestRunner.run(TestRunner.java:505)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
    at org.testng.SuiteRunner.run(SuiteRunner.java:364)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
    at org.testng.TestNG.runSuites(TestNG.java:1049)
    at org.testng.TestNG.run(TestNG.java:1017)
    at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73)
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
4

6 回答 6

3

test尝试在调用下创建一个文件夹resources并将文件移到那里,footballCompetitions.json例如:/test/resources/footballCompetitions.json

  test
    └───  java
    └───  resources
         └─── footballCompetitions.json

然后.body(matchesJsonSchemaInClasspath("footballCompetitions.json"));应该可以正常工作。

于 2019-01-08T14:14:08.093 回答
0

将json文件保存在资源文件夹中,它将起作用

在此处输入图像描述

字符串 Jsonpaths="Examples.json";

assertThat(RESPONSEBODY,matchesJsonSchemaInClasspath(Jsonpaths));

于 2021-04-09T04:06:32.597 回答
0

您确定文件路径正确吗?将此文件移动到:/test/resources/

或使用如下绝对路径: .body(matchesJsonSchemaInClasspath("/src/test/java/apitests/footballData/footballCompetitions.json"));

于 2019-01-08T14:05:12.350 回答
0

就我而言,这是我的错误,即我没有以正确的格式保存文件。该文件保存为xyz.json.txt。请确保文件以正确的格式保存。它会起作用的。

于 2021-03-14T08:24:18.397 回答
0

将 JSON-Schema 文件放在 Target classPath 下:

在此处输入图像描述

于 2021-06-20T20:57:00.193 回答
-1

此错误与您要插入的架构有关

matchesJsonSchemaInClasspath()

首先,尝试检查您的模式 JSON 是否可能有一些空值。您可以从 JSON 模式文件中删除它们并再次检查。

于 2022-01-01T18:59:53.987 回答