Zauważyłem podczas testów integracyjnych, że faktycznie pracuję nad powtarzającymi się przypadkami użycia z interfejsami API (lub ogólnie interfejsami HTTP) sprawdzam tu i tam za pomocą bash + cURL.
Zaczyna wyglądać dość niechlujnie i trudniej go utrzymać. Po co dostarczać bałagan?
Typowe przypadki użycia to:
- Sprawdź, czy adres URL zwraca kod odpowiedzi http, np. 200
- Sprawdź, czy typ zawartości odpowiada MIME, którego potrzebujesz w takim przypadku
- Sprawdź, czy zwrócona treść jest zgodna z pewnym wzorcem lub przechodzi abstrakcyjną procedurę sprawdzania poprawności
To, co do tej pory znalazłem i rozważam wykonalną opcję bez wymyślania koła, to:
- wypróbuj PyCurl - mam nadzieję, że w pełni wdroży on wszystkie opcje cURL esp. proxy, ale także inne przełączniki, których mogę potrzebować
- użyj wbudowanego testowania jednostek Pythona
Następnie mógłbym na przykład przeprowadzić jeden test jednostkowy na usługę, który chciałbym sprawdzić:
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()
Czy ma to sens, czy istnieje oprzyrządowanie na wyższym poziomie (ale niezbyt skomplikowane, aby podnieść i zintegrować)?
testing
continuous-deployment
python
curl
Peter Muryshkin
źródło
źródło
Odpowiedzi:
Możesz spojrzeć na takie narzędzia, jak Postman, który koncentruje się na testowaniu interfejsów API REST za pomocą JavaScript - ma kilka fajnych funkcji, ale nie używasz Pythona.
Zamiast tego sugerowałbym spojrzenie na wtyczki związane z REST dla pytest , frameworku testowego Python, który upraszcza kod testowy, jednocześnie uruchamiając testy napisane przy użyciu
unittest
.Pytest ma ogromny zestaw wtyczek, które upraszczają różne zadania, w tym:
Tavern , która specjalizuje się w testowaniu interfejsów API REST i wydaje się tutaj bardzo istotna - coś w rodzaju „Postmana do testów jednostkowych Pythona”.
pytest-curl-report - podczas testowania z
requests
biblioteką wypiszecurl
polecenie, którego możesz użyć do odtworzenia błędu z powłoki.Testinfra - koncentruje się na testowaniu serwera (np. Stan pakietów systemu operacyjnego, plików, procesów itp., Zwykle testowany na zdalnych serwerach) - zdecydowanie zalecane, jeśli potrzebujesz tego typu np. Do testowania kodu Ansible.
Jeśli nie podoba Tavern, można wykorzystania kursu
pycurl
zpytest
, co sprawia, że łatwiej zdiagnozować dokładnie to, co nie powiodło się. Ten przykład z witryny pytest-curl-report wykorzystuje tylko ogólne funkcje pytest:Pytest pozwala pisać wszystkie testy zwykłym tekstem
assert
i opcjonalnie zawierać pomocny komunikat jako część wyniku. Na przykład można napisać jeden z testów:źródło