Prueba de interfaz automatizada: JsonUnit, la herramienta de verificación de artefactos para los resultados de Json


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

Desde el autoaprendizaje hasta el trabajo en pruebas de software, ¿cómo se debe realizar el aprendizaje de las pruebas de software?

¿Cómo redactar un currículum vitae de un ingeniero de pruebas de software? -1.000 plantillas de currículum vitae de un ingeniero de pruebas de software (currículum real) que se han contratado con éxito

Supongo que te gusta

Origin blog.csdn.net/weixin_50271247/article/details/115248679
Recomendado
Clasificación