【问题标题】:Rest-assured. How to check if not empty array is returned?放心。如何检查是否返回非空数组?
【发布时间】:2015-01-20 07:40:51
【问题描述】:

我有以下代码可以测试我的 RESTful API:

given().baseUri("http://...").get("/categories/all")
    .then()
    .body(
        "results",  not(empty())
    );

API 返回以下响应:

{
    "error": {
        "type": "NotFoundException"
    }
}

并且我希望测试失败以获得这样的响应。但是测试通过了。

如何修改测试以使其失败?只有当 API 返回一个在“结果”键中包含非空数组的对象时,它才应该通过。当“results”键不存在、包含空数组或包含不是数组的内容时,它应该会失败。

【问题讨论】:

  • 为什么不返回一个列表,并使用 .isEmpty() 检查?
  • 请注意:如果您想成为 RESTful,请不要在正文响应中返回错误代码,而是使用标准 HTTP return codesNot Found404
  • @Stultuske 我不完全理解你的评论。我应该从 REST API 返回一个列表吗?但是 API 不能正常工作,它没有返回一个列表,我想检查一下。
  • 很大程度上取决于您如何实现它。如果你不想更改代码,你仍然可以去 Arrays.asList(myArrayName);然后调用 isEmpty()
  • @ThanksForAllTheFish 我知道 :) 。我确实返回了 404 响应代码。响应内容仅包含附加信息。但在我的测试中,我还是想检查“结果”键。

标签: java json rest rest-assured


【解决方案1】:

我想出了以下解决方案:

given().baseUri("http://...").get("/categories/all")
    .then()
    .body(
        "results", hasSize(greaterThan(0))
    );

如果“结果”是一个空数组或不是一个数组,它会失败。 如果“结果”是一个非空数组,它就会通过。 它以可读的方式报告错误,例如:

Expected: a collection with size a value greater than <0>
Actual: null

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,但在我的情况下,端点直接返回一个数组。我的解决方案:

    @Test
    public void testNotEmpty() {
        uAssured.given()
                .when()
                    .get("resources/totest")
                .then()
                    .statusCode(200)
                    .body("$.size()", greaterThan(0));
    }
    

    对于上面的示例,以下内容也应该有效:

    @Test
    public void testNotEmpty() {
        uAssured.given()
                .when()
                    .get("resources/totest")
                .then()
                    .statusCode(200)
                    .body("results.size()", greaterThan(0));
    }
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,我发现以下指令有效:

      given().baseUri("http://...").get("/categories/all")
      .then()
      .assertThat().body(notNullValue());
      

      我尝试了以上所有方法,但没有运气。

      【讨论】:

        【解决方案4】:

        要检查数组是否不为空,您可以使用 not(emptyArray) 方法。

           given()
          .baseUri("http://...")
          .get("/categories/all")
          .then()
          .body("results", not(emptyArray()));
        

        使用 org.hamcrest.Matcher 中的 emptyArray 方法

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-20
          • 2011-01-23
          • 2017-10-16
          • 1970-01-01
          • 1970-01-01
          • 2011-08-22
          • 1970-01-01
          相关资源
          最近更新 更多