¿Qué hacer cuando se pierde en las pruebas de API?

Publicado el

(12 de mayo de 2020)

Si aún no está escribiendo pruebas, debe comenzar. Las pruebas mejorarán la calidad de su código, reducirán los errores y probablemente lo obligarán a pensar más en el diseño y la calidad. En realidad, lo más difícil es comenzar y averiguar qué tipo de pruebas escribir.

Entonces comienzas a buscar en Google y encuentras muchos tipos de pruebas: unidad, integración, aceptación, funcional, sistema, humo, e2e… Algunos recursos dirán que necesita tener una cobertura del 100\%, otros dirán que la cobertura total no significa que su código esté completamente probado. Incluso cuando decida qué tipo de pruebas usar, puede ser difícil decidir cómo probar alguna lógica específica en su aplicación.

¡No se rinda! Tenemos algunos consejos que aprendimos a lo largo del camino y esperamos que le hagan la vida más fácil.

No intente probarlo todo con solo pruebas funcionales

Este es el error número uno los desarrolladores hacen en las pruebas. Entonces, aclaremos eso primero.

Las pruebas funcionales en REST Api significarían enviar una solicitud en un extremo y afirmar su respuesta. Si su ruta tiene varios casos diferentes en los que la lógica del dominio puede funcionar, deberá escribir una prueba separada para cada caso para asegurarse de que todos funcionen.

Esto incluso podría funcionar en una aplicación muy pequeña, pero como Tan pronto como su aplicación crezca, será muy difícil de mantener y será muy lento. En algún momento, comenzará a perder más tiempo arreglando y manteniendo pruebas que trabajando realmente en su aplicación. Eso no es de lo que deberían tratar las pruebas. Aprendimos eso de la manera difícil.

La pirámide de prueba

La pirámide de prueba es un gráfico que nos dice cuántas pruebas debe escribir en cada capa.

Capas inferiores son más rápidos y es por eso que debemos cubrir tanto como sea posible con pruebas unitarias y de integración. Cuanto más alto nivel obtenga, menos pruebas deberá realizarse. Escuchará diferentes nombres para capas individuales, pero la lógica detrás de ellas es la misma.

La pirámide de prueba

Pruebas unitarias

Así que comencemos desde el principio – Pruebas unitarias. Aquí tiene una definición:

La prueba unitaria es un nivel de prueba de software donde se prueban unidades / componentes individuales de un software. El propósito es validar que cada unidad separada del software funcione como se espera. Una unidad es la parte comprobable más pequeña de cualquier software.

Esto significa que debe probar cada método de forma aislada y burlarse de todos los demás métodos.

No es pruebas unitarias, ¡eres tú!

Las pruebas unitarias no solo son buenas para asegurarse de que tu código funcione, sino que también te harán refactorizar un poco. Deben ser fáciles de escribir. Si tiene dificultades para probar un fragmento de código en particular, significa que su código está mal escrito y debe ser refactorizado. Los principios SÓLIDOS lo ayudarán aquí. SOLID es un conjunto de principios de diseño para escribir código limpio, elegante y legible. Si escribe código sólido, las pruebas unitarias serán pan comido.

Básicamente, con las pruebas unitarias se asegura de que cada método aislado en su código funcione como debería. Eso significaría que todo el código funciona como se esperaba, ¿verdad? Realmente no. También debe asegurarse de que los componentes individuales funcionen bien juntos. Y ahí es donde vienen las pruebas de integración.

Pruebas de integración

Las pruebas de integración son la fase de las pruebas de software en la que los módulos de software individuales se combinan y prueban como un grupo.

Un buen ejemplo cuando la prueba unitaria no es suficiente es la consulta de la base de datos constructores. En las pruebas unitarias, puede asegurarse de haber llamado a las condiciones que desea en la consulta, pero si su consulta es más complicada, no puede estar realmente seguro de que las condiciones que utilizó devolverán el resultado esperado hasta que realice una llamada real a la base de datos. Entonces, aquí es donde debe venir la prueba de integración que ejecuta la consulta en una base de datos de prueba y afirma los resultados esperados.

Casos en los que necesita pruebas de integración:

  • Verificando la integración correcta con la tercera bibliotecas o API de party
  • Verificar que dos o más módulos que tienen pruebas unitarias funcionen juntos como se espera

Pruebas funcionales

Las pruebas funcionales se definen como las pruebas de la funcionalidad completa de alguna aplicación.

Son mucho más simples de escribir en API en comparación con una aplicación con interfaz de usuario. Las pruebas funcionales para API deben consistir en enviar solicitudes reales a los puntos finales de API y validar el formato de respuesta. Debe probar cada ruta para obtener una respuesta correcta y errónea.

Pero no se exceda, no necesita una prueba para cada posible error. Eso ya debería estar cubierto por pruebas unitarias y de integración.Aquí solo desea asegurarse de que su ruta devuelva el formato de respuesta correcto para un error. Si sus rutas tienen diferentes roles, también debe probar la respuesta de error de seguridad.

Aquí hay algunas herramientas útiles para que sus pruebas funcionales sean más fáciles de escribir:

  • PHP Matcher : biblioteca que te permite comparar tu respuesta con patrones. Puede establecer qué patrón espera para cada campo en su respuesta, en lugar de afirmar valores reales en su base de datos. De esta manera, puede probar solo el formato de respuesta y los tipos de campo sin preocuparse si alguna cadena o número cambió en su base de datos de prueba.
  • Pruebas de Postman : puedes escribir tus pruebas funcionales en Postman, lo cual es bastante útil para el equipo de frontend, ellos podrán verificar y pruebe sus puntos finales api. Será como documentación API interactiva. Puede integrar las pruebas de Postman con Newman , un corredor de línea de comandos que le permite ejecutar pruebas en la línea de comandos e integrarlas en Integración continua (CI) .
  • Faker – biblioteca para generar datos falsos para su base de datos de prueba

Dando un paso más

Ahora que sabe que su código funciona, puede comprobar su rendimiento.

Prueba de carga

La prueba de carga comprueba si su api responde como se esperaba a varios servidores.

Stress testing

Verificar si la API funciona como se esperaba al recibir una gran cantidad de solicitudes al mismo tiempo.

¿Necesito tener una cobertura del 100\%?

La cobertura del 100\% no garantiza que su código sea Totalmente probado y funcionando. Esto solo significa que las pruebas usaron cada línea de su código, pero seguro que ayuda ejecutar la cobertura del código para ver si se perdió para cubrir algunas partes de su código.

Descubrimos que no nos beneficiamos de escribir pruebas para métodos simples como getters y setters. Se necesita tiempo para escribir y mantener, especialmente en proyectos grandes.

Si bien las pruebas eliminarán la mayoría de los errores potenciales, aún habrá algunos casos extremos en los que no pensó. Si aparece un error, asegúrese de reproducirlo con nuevas pruebas primero y luego corrija su código. De esa manera, su cobertura mejorará y estará seguro de cubrir ese caso. Esta también puede ser una excelente manera de comenzar a cubrir sus proyectos heredados que aún no tienen pruebas.

Aquí hay algunas herramientas útiles para verificar la calidad de su código y pruebas:

  • Infección : herramienta para pruebas de mutación. Las pruebas de mutación evalúan la calidad de las pruebas existentes. La prueba de mutación modifica un programa en pequeñas formas y espera que sus pruebas fallen, lo que significa que el mutante morirá. Por cada prueba aprobada, el mutante permanece vivo. Los conjuntos de pruebas se miden por el porcentaje de mutantes que matan. La prueba de mutación proporciona un criterio de prueba llamado Mutation Score Indicator (MSI) . El MSI mide la efectividad de un equipo de prueba en términos de su capacidad para detectar fallas. También puede integrarlo a CI y establecer el MSI mínimo requerido para que CI pase.
  • PHPStan : PHPStan se centra en encontrar errores en su código sin ejecutarlo realmente. Detecta clases enteras de errores incluso antes de escribir pruebas para el código. Acerca PHP a los lenguajes compilados en el sentido de que se puede verificar la exactitud de cada línea del código antes de ejecutar la línea real.
  • Integración continua (CI) : te permite ejecutar tus pruebas en git en cada confirmación. Evitará que fusione PR-s con pruebas fallidas.

Conclusión

Es fácil perderse en todas las cosas que encuentra sobre la redacción de pruebas. El objetivo principal de las pruebas debe ser asegurarse de que su código funcione y sea fácil de mantener. Si eres nuevo en las pruebas, puede parecer que toman demasiado tiempo, pero no te rindas, una vez que lo consigas, hará tu vida de codificación mucho más fácil y rápida. 🙂

Esta pieza creativa se publicó originalmente en Locastic.com – https://locastic.com/blog/what-to-do-when- te-pierdes-en-api-testing /

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *