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ć)?