Während des Integrationstests ist mir aufgefallen, dass ich tatsächlich an wiederkehrenden Anwendungsfällen mit restful APIs (oder generell HTTP-Schnittstellen) arbeite, die ich hier und da mit bash + cURL überprüfe.
Es sieht ziemlich chaotisch aus und ist schwerer zu warten. Warum Chaos ausliefern?
Typische Anwendungsfälle sind:
- Überprüfen Sie, ob eine URL den http-Antwortcode zurückgibt, z. B. 200
- Überprüfen Sie, ob der Inhaltstyp mit einem MIME-Wert übereinstimmt, den Sie in diesem Fall benötigen
- Überprüfen Sie, ob der zurückgegebene Inhalt einem bestimmten Muster entspricht, oder bestehen Sie eine abstrakte Validierungsprozedur
Was ich bisher gefunden habe und für eine praktikable Option halte, ohne das Rad neu zu erfinden, ist:
- Probieren Sie es mit PyCurl aus - in der Hoffnung, dass es alle cURL-Optionen vollständig implementiert, insb. Proxy aber auch andere Schalter, die ich möglicherweise benötige
- benutze Pythons eingebaute Unit testng
Dann könnte ich zum Beispiel einen Unit Test pro Service haben, den ich überprüfen möchte:
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()
Ist dies sinnvoll oder gibt es ein höherwertigeres (aber nicht zu komplexes, um es aufzunehmen und zu integrieren) Werkzeug?
Antworten:
Sie könnten sich Tools wie Postman ansehen, die sich auf das Testen von REST-APIs mit JavaScript konzentrieren - es hat einige nette Funktionen, aber Sie verlieren die Verwendung von Python.
Stattdessen würde ich vorschlagen, in REST-bezogenen Plugins nach pytest zu suchen , einem Python- Testframework , das Ihren Testcode vereinfacht, während weiterhin Tests ausgeführt werden, die mit geschrieben wurden
unittest
.Pytest verfügt über eine Vielzahl von Plugins, die verschiedene Aufgaben vereinfachen, darunter:
Tavern , die sich auf das Testen von REST-APIs spezialisiert hat und hier von hoher Relevanz zu sein scheint - eine Art "Postman für Python-Unit-Tests".
pytest-curl-report - Beim Testen mit der
requests
Bibliothek wird eincurl
Befehl gedruckt, mit dem Sie den Fehler aus der Shell reproduzieren können.Testinfra - konzentriert sich auf Servertests (z. B. Status von Betriebssystempaketen, -dateien , -prozessen usw., die normalerweise auf Remoteservern getestet werden) - wird dringend empfohlen, wenn Sie diesen Typ auch benötigen, z. B. um Ansible-Code zu testen.
Wenn Sie Tavern nicht mögen, können Sie es natürlich
pycurl
mit verwendenpytest
, was es einfacher macht, genau zu diagnostizieren, was fehlgeschlagen ist. In diesem Beispiel auf der Website für Pytest-Curl-Berichte werden nur allgemeine Pytest-Funktionen verwendet:Mit Pytest können Sie alle Tests mit einem einfachen Text schreiben
assert
und optional eine hilfreiche Nachricht als Teil der Ausgabe hinzufügen . Zum Beispiel könnte einer Ihrer Tests geschrieben werden:quelle