【问题标题】:Rest Assured: Extracting value from JSON Array放心:从 JSON 数组中提取值
【发布时间】:2018-01-02 12:07:33
【问题描述】:

我正在尝试使用 jsonPath 放心地从 JSON 数组中提取值。

示例 JSON 响应:

{
    "notices": [],
    "errors": [
        {
            "code": "UNAUTHORIZED"
        }
    ]
}

当前测试如下:

@Test(dataProvider = "somePayLoadProvider", dataProviderClass = MyPayLoadProvider.class)
public void myTestMethod(SomePayload myPayload) {
    Response r = given().
            spec(myRequestSpecification).
            contentType(ContentType.JSON).
            body(myPayload).
            post("/my-api-path");

    List<String> e = r.getBody().jsonPath().getList("errors.code");
    assertEquals(e, hasItem(MyErrorType.UNAUTHORIZED.error()));
}

但是,我不断收到 [] 周围的错误代码。我只想要它的价值。

java.lang.AssertionError: expected 
[a collection containing "UNAUTHORIZED"] but found [[UNAUTHORIZED]]

Expected :a collection containing "UNAUTHORIZED"
Actual   :[UNAUTHORIZED]

【问题讨论】:

    标签: java json rest-assured rest-assured-jsonpath


    【解决方案1】:

    显然这只是我没有正确使用assert() 方法。

    改变了

    assertEquals(e, hasItem(MyErrorType.UNAUTHORIZED.error()));

    到

    assertTrue(e.contains(MyErrorType.UNAUTHORIZED.error()));

    json 的解析已正确完成为 ArrayList&lt;String&gt;

    【讨论】:

      【解决方案2】:

      或者,您可以指定“错误”的数组索引来删除方括号。即:

          List<String> e = r.getBody().jsonPath().getList("errors[0].code");
      

      然后你可以返回使用'equals'而不是'contains'

      【讨论】:

        【解决方案3】:

        有了 rest-assured,您还可以像这样在 REST 调用中进行链式断言:

        given()
          .spec(myRequestSpecification)
          .contentType(ContentType.JSON)
          .body(myPayload)
          .post("/my-api-path") //this returns Response
          .then()               //but this returns ValidatableResponse; important difference
          .statusCode(200)
          .body("notices", hasSize(0)) // any applicable hamcrest matcher can be used
          .body("errors", hasSize(1))
          .body("errors", contains(MyErrorType.UNAUTHORIZED.error()));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-05
          • 2018-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多