当前位置: 首页 > 知识库问答 >
问题:

RestAssured -想要验证RestAssured中JSON响应的主体结构

堵泽宇
2023-03-14

当我请求GET请求时,我得到了JSON响应,但这里我的要求是验证响应体的结构。

例如:

{
   "lotto":{
      "lottoId":5,
      "winning-numbers":[2,45,34,23,7,5,3],
      "winners":[
         {
            "winnerId":23,
            "numbers":[2,45,34,23,3,5]
         },
         {
            "winnerId":54,
            "numbers":[52,3,12,11,18,22]
         }
      ]
   }
}

上面的响应有结构,所以我需要验证结构而不是键值对,我如何实现?

共有1个答案

董喜
2023-03-14

最好的方法是验证json模式匹配。

首先,您需要将此依赖项添加到您的pom中.xml

<!-- https://mvnrepository.com/artifact/io.rest-assured/json-schema-validator -->
<dependency>
  <groupId>io.rest-assured</groupId>
  <artifactId>json-schema-validator</artifactId>
  <version>3.3.0</version>
  <scope>test</scope>
</dependency>

然后,您需要创建一个文件,其结构如下:

{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "flow_id": {
            "type": "string",
            "minLength": 36,
            "maxLength": 36
          },
          "flow_org_id": {
            "type": "string"
          }
        },
        "required": [ "flow_id", "flow_org_id" ]
      }
    }
  }
}

有很多服务都是基于json生成模式的,例如,这一个

一旦模式文件准备好,您需要以字符串格式提供文件的路径-例如-

private static final String GET_SUBSCRIPTION_JSON_SCHEMA_PATH =
    "json/schemas/GetSubscriptionByIdSchema.json";

并调用matchesJsonSchemaInClasspath("your/path/to/json-Schema")方法进行断言。

UPD:

所以流程基本上是这样的:

  • 您在项目目录中的某个位置有一个模式文件(并且知道它的路径)
  • 您在某些测试方法中命中了endpoint
  • 您将收到的响应与模式文件匹配

实际上,它将如下所示:

  @Test
  public void someTestMethod() {
    Response responseToValidate = // here you should assign and store returned response
    
    responseToValidate
      .assertThat()      
      .statusCode(200)
      .body("json.path.to.needed.key", equalTo("123"))

. body(匹配JsonSchemaInClasspath("路径/到/你的/架构/在/字符串/格式"));}

 类似资料:
  • 我有一个测试场景,其中Web应用程序中的字段填充了来自json响应的数据。 例如- 为了实现这一点,我了解了RestAsure和HTTP客户端库,但我不确定如何发送请求部分或检索响应,因为在许多情况下响应非常大(超过150个名称值对)。 以下是我尝试过的: 现在,我在 Method.POST 行中遇到错误,它的显示语法错误也使我对是否有其他方法感到困惑。

  • 我收到了针对我的API的错误请求的以下响应。我将RestAssured用于我的rest响应断言。 我需要验证响应的所有属性的值。我正在努力验证此路径:。我无法为它想出GPath。 以下是我所作的断言: 由于路径不正确,断言总是失败。

  • 我发布了简单的数据,比如 到(让它成为)/帖子乌里,例如smth喜欢 我可以验证,该正文不是空的 或者检查,响应的字段具有我们正在设置的值,例如 但我不确定,它的最佳/正确的方式。那么,问题:如何验证,该实体是在发布后创建的,并保证?

  • 我在用放心做API自动化。我想从API响应中获取值并传递给另一个java类, 这是我的测试类, 如何将此方法更改为另一种类型的无效值,或者如何在另一个java类中传递人员引用值

  • 我正在使用验证json模式。如果响应主体具有文件 如果响应正文有未在json模式中定义的EXTRA变量/值,则不会失败。如何使这个测试用例失败? 例如: 下面是具有预定义 JSON 架构的响应正文。 如果响应正文给出了额外的值,例如电子邮件/电话,那么它仍然在传递。我需要让它失败。这是我的测试用例,如果响应正文返回额外值,则失败。如何验证此测试用例?

  • 我正在尝试为Rest-Assured(RESTful API)生成cucumber报告,并且我还热衷于捕获cucumber报告中的请求/响应。我想知道是否有人已经实现了这一点或可以提供一些指示。