Durante las pruebas de integración, he notado que en realidad trabajo en casos de uso recurrentes con API relajantes (o en interfaces HTTP generales) que verifico aquí y allá con bash + cURL.
Comienza a verse bastante desordenado y se vuelve más difícil de mantener. ¿Por qué entregar desorden?
Los casos de uso típicos son:
- Compruebe que una URL devuelve el código de respuesta http, por ejemplo, 200
- Verifique que el tipo de contenido coincida con el MIME que necesita en ese caso
- Compruebe que el contenido devuelto coincide con algún patrón o pasa un procedimiento de validación abstracta
Lo que he encontrado hasta ahora y considero una opción viable sin reinventar la rueda, es:
- pruebe PyCurl, con la esperanza de que implemente completamente todas las opciones de cURL especialmente. proxy pero también otros interruptores que pueda necesitar
- use la unidad de prueba incorporada de Python
Entonces podría tener, por ejemplo, una prueba de unidad por servicio que me gustaría verificar:
import unittest, pycurl
class TestService (unittest.TestCase):
def test_1(self):
self.assertEqual(pycurl.returncode("some_url"), 200)
def test_2(self):
self.assertTrue(pycurl.response("some_url").matches ("xxx") )
def test_3(self):
self.assertTrue (pycurl.ContentType("some_url").equal("xxx"))
if __name__ == '__main__':
unittest.main()
¿Tiene sentido o hay herramientas más de alto nivel (pero no demasiado complejas para recoger e integrar)?
testing
continuous-deployment
python
curl
Peter Muryshkin
fuente
fuente
Respuestas:
Podrías mirar herramientas como Postman, que se enfoca en probar las API REST con JavaScript: tiene algunas características agradables, pero pierdes el uso de Python.
En cambio, sugeriría buscar complementos relacionados con REST para pytest , un marco de prueba de Python que simplifica su código de prueba, mientras sigue ejecutando pruebas escritas usando
unittest
.Pytest tiene un gran conjunto de complementos que simplifican varias tareas, que incluyen:
Tavern , que se especializa en probar API REST y parece muy relevante aquí, una especie de "Postman para pruebas unitarias de Python".
pytest-curl-report : al probar con la
requests
biblioteca, imprimirá uncurl
comando que puede usar para reproducir el error desde el shell.Testinfra : se centra en las pruebas del servidor (p. Ej., Estado de los paquetes del sistema operativo, archivos, procesos, etc., generalmente probados en servidores remotos). Se recomienda encarecidamente si también necesita este tipo, p. Ej., Para probar el código Ansible.
Si no te gusta la taberna, se puede, por supuesto, el uso
pycurl
conpytest
, lo que hace que sea más fácil de diagnosticar exactamente lo que falló. Este ejemplo del sitio pytest-curl-report usa solo características genéricas de pytest:Pytest le permite escribir todas las pruebas con un plano
assert
y, opcionalmente, incluir un mensaje útil como parte de la salida. Por ejemplo, una de sus pruebas podría escribirse:fuente