【问题标题】:RestAssured: verify creation of entityRestAssured:验证实体的创建
【发布时间】:2019-12-18 13:42:06
【问题描述】:

我正在发布简单的数据,例如

{
"title" : "test Title"
}

到(顺其自然)/posts uri,例如 smth like

RestAssured.baseURI = "http://localhost";
        RestAssured.basePath = "/posts";
        given()
                .contentType("application/json")
                .body("{\n" +
                        "    \"title\": \"test Title\"\n" +
                        "}")
                .when()
                .post("")
                .then().statusCode(201)
                // .and(Verify that post created);
    }

我可以验证,body 不为空

.body(notNullValue())

或检查,响应中的该字段具有我们正在设置的值,例如

.body("title", equalTo("test Title"))

但我不确定,它的最佳/正确方式。 那么,问题是:如何验证该实体是在发布后使​​用 restAssured 创建的?

【问题讨论】:

  • 嗨,这一切都取决于服务器端的实现——它什么都不做并返回 200。如果这是为了测试,为什么不做一个“get”来验证是否创建了实体。
  • 是的,它用于测试,并且 get 似乎很简单。只是想知道,如何在一个请求(帖子)的边界内执行此操作,仅此而已。
  • 由于代码在服务器端执行,客户端无法知道它是否真的完成了它的工作——正如预期的那样,必须对数据库进行查询以进行验证,或者一个列表/ get call to verify - 好像创建代码失败,它不会获取被请求创建的实体。我可以创建一个接受 POST/create 请求的服务器 APi,并在代码中返回一个具有我喜欢的任何状态的响应实体。

标签: java json rest-assured


【解决方案1】:

您可以使用 jsonPath 验证响应内容以确保其正确。下面是获取请求的响应,但您可以通过一些修改来使用它

import io.restassured.http.ContentType;
import io.restassured.path.json.JsonPath;
import io.restassured.response.Response;

    Response response=given().contentType(ContentType.JSON).get("http://localhost:3000/posts");
              //we need to convert response as a String and give array index
            JsonPath jsonPath = new JsonPath(response.asString());
            String title = jsonPath.getString("title");
    // use index if response returns an array
            String author=jsonPath.getString("author[2]");
            // if it's int 
            int user_id = jsonPath.getInt("user_id");
            System.out.println("title is "+title+" customerName is "+author);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-28
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    相关资源
    最近更新 更多