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

Rest Assured Framework完成JSON响应匹配

梁季
2023-03-14

我正在使用Rest Asaud Framework进行API测试(使用Java)。在第(1)行,我预计会出现错误,因为预期的JSON响应和实际的JSON响应不匹配。但是我的代码正在成功执行。有人能告诉我下面的代码是否出错了吗?

     public void test123() {
            try {
                //Read the Curl Request Input file
                String json = input.readFromTextFile(
                        System.getProperty("user.dir") + "\\src\\test\\resources\\inputFile\\CurlDataFile.txt");
                json = json.replaceAll(" ", "");            
                RestAssured.baseURI = "My URL";
                given().
                    contentType("application/json").
                    body(json).
                when().
                    post("").
                then().
assertThat().body(matchesJsonSchemaInClasspath("testCurlOuput1.json"));  (1)
            } catch (IOException e) {
                e.printStackTrace();
            }catch(JsonSchemaValidationException e){
                e.printStackTrace();
            }
        }

共有3个答案

皇甫浩壤
2023-03-14

最后,我选择不同的库,即jayway.restassured库和JSON断言库(org.skyscreamer.jsonassert.JSONAssert),这将比较实际和预期的响应。

public void test123() {         
String postData = input.readFromTextFile(System.getProperty("user.dir") + "\\src\\test\\resources\\inputFile\\CurlDataFile.txt");
        RestAssured.baseURI = "MY URL";
Response r = (Response)given().contentType("application/json").body(postData).when().post("");
            String responseBody = r.getBody().asString();           
            String curlResponse = //I am providing expected Curl response here          
       //JSON Assertion for matching Expected and Actual response
            JSONAssert.assertEquals(curlResponse, responseBody, false);
        }

此外,有时我们可能希望避免比较JSON中的特定字段,比如动态生成的ID字段,我们可以使用JSON比较器进行比较

巫马令
2023-03-14

您正在捕获所有异常。当您的assertthat(…)失败时,它会抛出一个异常。在e.printStackTrace()上放置一个断点;在DEBUG模式下运行并检查您的AssertionException/Error是否没有被捕获。

不要捕获异常,只需将所有Checked Exception添加到测试签名中即可。如果未发现异常,则测试将失败。或者,但在我看来不太喜欢,通过放fail()来解决;在锁扣块中。

申颖逸
2023-03-14

这与放心没有直接关系,但我建议你看一看空手道,因为依我看它可能正是你要找的。

空手道的核心特性之一是您可以在一个步骤中执行JSON有效负载的完全相等匹配。

您可以轻松地从文件中使用JSON,这鼓励在多个测试中重用有效负载。

 类似资料:
  • 问题内容: 即时通讯在JSON中获取响应,但这不会解析JSON响应。我在做什么错?我在doc http://docs.jquery.com/Plugins/Autocomplete上找不到任何内容 问题答案: 检查dataType和parse选项。

  • APIService: 在活动调用API中:

  • 我正在使用Volley向API发出GET请求: 预期的JSON对象响应很大(可能高达500 KB)。我无法在日志中看到完整的响应。仅显示前50行左右。我还得到了info: BasicNetwork.log慢速请求:请求的HTTP响应= 这意味着请求需要超过3000毫秒。 尝试过的事情: 我已经在手机的开发者选项中将记录器缓冲区大小增加到1M。 原因可能是什么?当它很大的时候,响应是大块发送的吗?如

  • 问题内容: 背景 我正在客户端使用HTTP流(服务器推送)情况下的响应。尽管服务器可以通过关闭响应来关闭连接,但是客户端也需要这样做。 问题 客户端在一个单独的线程中处理,如下所示: 因此,当我从发起连接的线程进行调用时(重要的信息是它与处理输入的线程不同),该调用将无限期挂起。我什至把它留了一夜,它仍然挂着。即使打电话也无济于事。 有什么建议吗? 问题答案: 在没有可用字节的情况下,如果不更改读

  • 我已将自动完成功能应用于两个。为此,我使用了自动完成计算器。我观察到它的速度减慢到我甚至无法输入一个字符的程度。有什么解决办法吗? 谢谢

  • 我正在使用REST Assured测试一些API。我的API清楚地用JSON响应,如果这是响应,则根据文档: 我可以这样测试: 当然,这是可读的,但我会对JSON进行全面的比较(即:这是JSON响应;这是一个固定的JSON——一个资源文件将是完美的——那些JSON相等吗?).放心提供类似的东西,还是我需要手动制作。