J'ai remarqué lors des tests d'intégration que je travaille en fait sur des cas d'utilisation récurrents avec des API reposantes (ou en général des interfaces HTTP) que je vérifie ici et là avec bash + cURL.
Il commence à sembler assez désordonné et devient plus difficile à entretenir. Pourquoi livrer des dégâts?
Les cas d'utilisation typiques sont:
- Vérifiez qu'une URL renvoie un code de réponse http, par exemple 200
- Vérifiez que le type de contenu correspond à certains MIME dont vous avez besoin dans ce cas
- Vérifiez que le contenu retourné correspond à un modèle ou passe une procédure de validation abstraite
Ce que j'ai trouvé jusqu'à présent et que je considère comme une option réalisable sans réinventer la roue, c'est:
- essayez PyCurl - dans l'espoir qu'il implémente pleinement toutes les options cURL esp. proxy mais aussi d'autres commutateurs dont je pourrais avoir besoin
- utiliser le testng intégré de Python
Ensuite, je pourrais avoir, par exemple, un test unitaire par service que je voudrais vérifier:
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()
Est-ce que cela a du sens ou existe-t-il un outillage de plus haut niveau (mais pas trop complexe à prendre et à intégrer)?
testing
continuous-deployment
python
curl
Peter Muryshkin
la source
la source
Réponses:
Vous pouvez regarder des outils tels que Postman qui se concentre sur le test des API REST avec JavaScript - il a de belles fonctionnalités mais vous perdez l'utilisation de Python.
Au lieu de cela, je suggère de regarder les plugins liés à REST pour pytest , un framework de test Python qui simplifie votre code de test, tout en exécutant des tests écrits à l'aide de
unittest
.Pytest dispose d'un vaste ensemble de plugins qui simplifient diverses tâches, notamment:
Tavern , qui se spécialise dans le test des API REST et semble très pertinent ici - une sorte de "Postman for Python unit tests".
pytest-curl-report - lors des tests avec la
requests
bibliothèque, imprimera unecurl
commande que vous pouvez utiliser pour reproduire l'erreur à partir du shell.Testinfra - se concentre sur les tests de serveur (par exemple, l'état des packages de système d'exploitation, des fichiers, des processus, etc., généralement testés sur des serveurs distants) - fortement recommandé si vous avez également besoin de ce type, par exemple pour tester le code Ansible.
Si vous n'aimez pas Tavern, vous pouvez bien sûr l'utiliser
pycurl
avecpytest
, ce qui facilite le diagnostic de ce qui a échoué. Cet exemple du site pytest-curl-report utilise uniquement des fonctionnalités génériques de pytest:Pytest vous permet d'écrire tous les tests en clair
assert
, et éventuellement d'inclure un message utile dans la sortie. Par exemple, l'un de vos tests pourrait être écrit:la source