我正在使用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相等吗?).放心提供类似的东西,还是我需要手动制作。
REST保证不支持JSON比较,只支持模式和身体的一部分,就像您在问题中所说的那样。您可以做的是使用Hamcrest的JSON比较器SameJSONAs in Hamcrest JSON SameJSONAs
空手道正是你要找的——你可以一步完成一个JSON有效载荷的完全平等匹配。
对于有动态值(生成的密钥,时间戳)的情况,空手道提供了一种非常优雅的方式让你忽略(或者只是验证格式)这些密钥。
创建空手道的主要动机之一是想出一个更好的替代Rest保证的方法。你可以参考这份文件,它可以帮助你评估空手道,并在你的组织中为它辩护:空手道与Rest保证。
使用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