REST Assured 69 - Introduction To JsonAssert Library

REST Assured 系列汇总 之 REST Assured 69 - Introduction To JsonAssert Library

介绍

API 测试,有时需要比较两个 JSON。例如:我们想每次从一个 API返回的结果是一样的,或部分 response body 结果是不变的,就可以直接比较已经存在的 JSON response,省去了写大量逻辑代码去断言。

有许多好的 Java 库可以用来比较,前面我们用 Jackson 库 比较两个 JSONs,本文我们主要了解用 JSONassert 库来比较两个 JSON response。

前提条件

添加 JSONassert 依赖

<!-- https://mvnrepository.com/artifact/org.skyscreamer/jsonassert -->
<dependency>
    <groupId>org.skyscreamer</groupId>
    <artifactId>jsonassert</artifactId>
    <version>1.5.0</version>
    <scope>test</scope>
</dependency>

JSONassert

JSONassert Java library 帮助更有效断言 JSON相等。根据 GitHub 文档,JSONassert 将字符串转换成一个 JSON object,跟期望的 JSON 比较逻辑结构和数据。当设置 strict 为 false (推荐),它会忽略重排数据和延展结果(只要期望的结果都在就可以),使得测试更健壮。

JSONassert 类中的 assertEquals() 方法用于比较 JSON Objects 和 JSON Array,后续我们将了解更多有关这个方法。

JSONassert 有一个枚举类型 JSONCompareMode,来定义不同比较行为的不同 modes。每个 mode 封装了两个最基本的行为:extensibility and strict ordering.

在这里插入图片描述
在比较 JSONs,这些 modes 很有帮助。例如:如果我们不想比较整个 JSONs,只是关心某些元素是否存在于 JSON,我们就可以用 extensible mode,只需关心第一个 JSON全文是否存在于第二个JSON 本文中。如果第二个JSON中的元素多于第一个 JSON,测试也不会失败。

如果 extensibility 不允许,所有期望的值都比较匹配所测试的值。任何额外的字段都会引起测试失败。

JSON Object 1

{
    
    
  "firstName" : "Amod",
  "lastName": "Mahajan",
  "age": "28"
}

JSON Object 2

{
    
    
  "firstName" : "Amod",
  "lastName": "Mahajan",
  "age": "28",
  "address" : "Bengaluru"
}

如果选择 extensible mode,那么:

JsonObject 1 == JsonObject2  => true
JsonObject 2 == JsonObject1  => false ("address" field is missing in 2nd json)

如果不选择 extensible mode,那么:

JsonObject 1 == JsonObject2  => false ("address" field is extra in 2nd JSON)
JsonObject 2 == JsonObject1  => false ("address" field is missing in 2nd json) 

还有 ”strict“ mode,用来断言 JSON Arrays 的顺序,请注意,这里是针对 JSON Arrays。

{
    
    
  "firstName" : "Amod",
  "lastName": "Mahajan"
}
{
    
    
  "lastName": "Mahajan",
  "firstName" : "Amod"
}

上面两个 JSONs,只是字段的顺序不同而已,如果选择 “strict” mode 进行比较是不会失败的,因为它只应用在 JSON Arrays,对 JSON Objects 没有效果。

如果有一个 JSON Array 是 [1,2,3,5],另外一个 JSON Array 是 [1,2,5,3], 选择 “strict” mode 比较这两个 JSON Arrays 是会失败的,因为元素的顺序不一样。

这里只是介绍有关 JSONassert 基本概念,理解 extensible 和 strict mode 是非常重要的,后续会有更多实例。

Guess you like

Origin blog.csdn.net/wumingxiaoyao/article/details/120612761