Al automatizar la interfaz, necesitamos verificar el contenido devuelto por la interfaz. El resultado que suele devolver Rest Api es Json. Si solo verifica el éxito o el fracaso o los campos individuales, ¿estará seguro? Idealmente, queremos devolver el cheque Json para el conjunto. Es imposible para nosotros escribir una declaración Assert para cada campo. Si compara Json y Json directamente, el caso de prueba será inestable porque el orden de los nodos o los campos individuales cambia cada vez. Muchos estudiantes optarán por desarrollar una biblioteca de clases para la comparación de Json para ignorar el orden de los nodos o el valor de un campo determinado. En lugar de trabajar a puerta cerrada, párese sobre los hombros de gigantes. De vez en cuando encontré JsonUnit en Github, que es exactamente lo que quería.
confiar
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.0.0</version>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.11.1</version>
</dependency>
<dependency>
<groupId>net.javacrumbs.json-unit</groupId>
<artifactId>json-unit-assertj</artifactId>
<version>2.17.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
</dependencies>
No es necesario introducir gson, ya sea gson o jackson. Si no se introduce ninguno, se informará de un error.
Picadora de pequeña escala
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.json;
assertThatJson("{\"a\":1, \"b\":2}").as("两个Json模糊比较")
.isEqualTo("{b:2, a:1}");
JsonUnit admite AssertJ y Hamcrest, mi ejemplo aquí es AssertJ.
Ignorar ruta
assertThatJson("{\"root\":{\"test\":1, \"ignored\": 1}}")
.whenIgnoringPaths("root.ignored"))
.isEqualTo("{\"root\":{\"test\":1}}");
¿Qué sucede si desea ignorar las rutas múltiples? Utilizar, separar
Ignorar valor
assertThatJson("{\"a\":1}")
.isEqualTo(json("{\"a\":\"${json-unit.ignore}\"}"));
Ignorar elementos
assertThatJson("{\"a\":1}")
.isEqualTo(json("{\"a\":\"${json-unit.ignore}\"}"));
JsonPath
assertThatJson(response.asString())
.inPath("$.data.list")
.isArray()
.contains(json(expMap.get("xx")
.getExpJson()));
Tipo de marcador de posición
assertThatJson("{\"test\":\"value\"}")
.isEqualTo("{test:'${json-unit.any-string}'}");
assertThatJson("{\"test\":true}")
.isEqualTo("{\"test\":\"${json-unit.any-boolean}\"}");
assertThatJson("{\"test\":1.1}")
.isEqualTo("{\"test\":\"${json-unit.any-number}\"}");
Expresión regular
assertJsonEquals("{\"test\": \"${json-unit.regex}[A-Z]+\"}",
"{\"test\": \"ABCD\"}");
opciones
TREATING_NULL_AS_ABSENT - 把Null当作不存在
assertJsonEquals("{\"test\":{\"a\":1}}",
"{\"test\":{\"a\":1, \"b\": null, \"c\": null}}",
when(TREATING_NULL_AS_ABSENT));
IGNORING_ARRAY_ORDER - 忽略数组元素顺序
assertJsonEquals("{\"test\":[1,2,3]}",
"{\"test\":[3,2,1]}",
when(IGNORING_ARRAY_ORDER));
IGNORING_EXTRA_ARRAY_ITEMS - 忽略多余的元素
assertJsonEquals("{\"test\":[1,2,3]}",
"{\"test\":[1,2,3,4]}",
when(IGNORING_EXTRA_ARRAY_ITEMS));
assertJsonEquals("{\"test\":[1,2,3]}",
"{\"test\":[5,5,4,4,3,3,2,2,1,1]}",
when(IGNORING_EXTRA_ARRAY_ITEMS, IGNORING_ARRAY_ORDER));
IGNORING_EXTRA_FIELDS - 忽略多余字段
assertThatJson("{\"test\":{\"a\":1, \"b\":2, \"c\":3}}")
.when(IGNORING_EXTRA_FIELDS)
.isEqualTo("{\"test\":{\"b\":2}}");
IGNORE_VALUES - 忽略值
assertJsonEquals("{\"test\":{\"a\":1,\"b\":2,\"c\":3}}",
"{\"test\":{\"a\":3,\"b\":2,\"c\":1}}",
when(IGNORING_VALUES));
Conclusión
JsonUnit es muy potente y solo se utilizan funciones departamentales en el proyecto. En el proyecto real, Json se almacenará en el archivo. Luego, léalos juntos en beforeMethod.
¡Soy una mujer de prueba en el lugar de trabajo! Acabo de terminar el tutorial de prueba, lo compartiré nuevamente. Los probadores que estén interesados en pruebas automatizadas de Python, automatización web, automatización de interfaces, automatización de terminales móviles, intercambio de experiencias de entrevistas, etc., pueden seguir la cuenta pública de WeChat:[Tiras picantes tristes], ¡Obtenga la información de la entrevista del ingeniero de pruebas de software de Dachang! Mi grupo de intercambio de aprendizaje: el grupo 902061117 tiene expertos técnicos para comunicarse y compartir juntos ~
Si el artículo es útil para ti, por favor, hazme una fortuna y dame un Me gusta. Gracias por tu apoyo. Tus Me gusta son mi motivación para la actualización continua.
Lectura recomendada:
¿Qué tipo de persona es adecuada para las pruebas de software?
Hablando de empezar de una pequeña empresa a una gran fábrica, ¿qué hice bien?
¿Quiere cambiar a las pruebas de software? Ven a ver si eres apto