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

带有RestAssured的完全Json匹配

熊哲圣
2023-03-14

我正在使用REST Assured测试一些API。我的API清楚地用JSON响应,如果这是响应,则根据文档:

{
    "id": "390",
    "data": {
        "leagueId": 35,
        "homeTeam": "Norway",
        "visitingTeam": "England",
    },
    "odds": [{
        "price": "1.30",
        "name": "1"
    },
    {
        "price": "5.25",
        "name": "X"
    }]
}

我可以这样测试

@Test
public void givenUrl_whenSuccessOnGetsResponseAndJsonHasRequiredKV_thenCorrect() {
   get("/events?id=390")
      .then()
         .statusCode(200)
         .assertThat()
            .body("data.leagueId", equalTo(35)); 
}

当然,这是可读的,但我会对JSON进行全面的比较(即:这是JSON响应;这是一个固定的JSON——一个资源文件将是完美的——那些JSON相等吗?).放心提供类似的东西,还是我需要手动制作。

共有3个答案

梁盛
2023-03-14

REST保证不支持JSON比较,只支持模式和身体的一部分,就像您在问题中所说的那样。您可以做的是使用Hamcrest的JSON比较器SameJSONAs in Hamcrest JSON SameJSONAs

慕容品
2023-03-14

空手道正是你要找的——你可以一步完成一个JSON有效载荷的完全平等匹配。

对于有动态值(生成的密钥,时间戳)的情况,空手道提供了一种非常优雅的方式让你忽略(或者只是验证格式)这些密钥。

创建空手道的主要动机之一是想出一个更好的替代Rest保证的方法。你可以参考这份文件,它可以帮助你评估空手道,并在你的组织中为它辩护:空手道与Rest保证。

柯冯浩
2023-03-14

使用RestAssured的JsonPath将json文件解析成一个Map,然后与Hamcrest匹配器进行比较。这样一来,顺序等就无关紧要了。

import static org.hamcrest.Matchers.equalTo;
import io.restassured.path.json.JsonPath;

...

JsonPath expectedJson = new JsonPath(new File("/path/to/expected.json"));

given()
    ...
    .then()
    .body("", equalTo(expectedJson.getMap("")));
 类似资料:
  • 问题内容: 我正在使用Elasticsearch,但有一段时间魔鬼般地要进行精确匹配。我已经尝试过match,query_string等的各种组合,但是我什么也没得到,或者得到了不好的结果。查询看起来像这样: 排序结果 我当然知道“狗”,“那只狗”和“狗”的得分相同,但是我需要弄清楚如何提高得分“狗”的精确匹配度。 我也试过 但这仍然给我 问题答案: 默认情况下,使用标准分析仪分析字段。如果您想检

  • 问题内容: 当我写这个查询 返回 当我写的时候 返回 看到第二个是错的。我想仅在ID ID完全匹配时获取值…如何解决此问题。谢谢你的帮助。 问题答案: 您可以将转换为字符串,以便准确进行比较。您可能会导致隐式转换 或其他方式,您可以显式执行投射 但是,如果您所有的ID都是整数,则在尝试查询数据库之前检查这些值可能更合适。(如果您要查询的ID不是数字,则始终无法匹配。)

  • 问题内容: 我有一个字符串,其中单词“ LOCAL”多次出现。我使用该函数搜索该单词,但它也返回另一个单词“ Locally”。我如何准确匹配“本地”一词? 问题答案: 对于这种事情,正则表达式非常有用: \ b基本上表示单词边界。可以是空格,标点符号等。 编辑评论: 显然,如果您不想忽略这种情况,则可以删除flags = re.IGNORECASE。

  • 问题内容: 我想知道如何查询字段以完全匹配字符串。 我实际上正在尝试这样查询: 会返回以开头的所有字符串。 问题答案: 我遇到了类似的问题,而ifound修复了“ .raw”-在您的示例中,请尝试

  • 我得到了一个“放心响应”对象。尝试从响应对象转换为 JSON 时。对话成功发生,但 JSON 顺序不匹配。如果有人在这方面提供帮助,那就太好了。 转换:

  • 问题内容: 我使用Spring-Data Neo4j 2.2.0-RELEASE。(我的以下问题将适用于任何其他类型的实体映射,为什么不适用于JPA) 在我的项目中,我有一个用Spring注释注释的公共方法,因为我想在其中更新/保存一个实体: 我的application-context.xml是以下内容: 正如我们在此配置中看到的,aspectJ用于事务。 因此,我尝试通过更改applicatio