Во время интеграционного тестирования я заметил, что на самом деле я работаю над повторяющимися сценариями использования с API-интерфейсами restful (или вообще интерфейсами HTTP), которые я проверяю здесь и там с помощью bash + cURL.
Это начинает выглядеть довольно грязно и становится все труднее поддерживать. Зачем доставлять беспорядок?
Типичные случаи использования:
- Убедитесь, что URL возвращает http код ответа, например 200
- Убедитесь, что тип контента соответствует некоторому MIME, который вам нужен в этом случае.
- Убедитесь, что возвращаемое содержимое соответствует некоторому шаблону или проходит абстрактную процедуру проверки
То, что я нашел до сих пор и считаю работоспособным вариантом, не изобретая велосипед, это:
- попробуйте PyCurl - в надежде, что он полностью реализует все опции cURL, особенно. проксирование, но и другие переключатели, которые мне могут понадобиться
- использовать встроенный в Python модуль testng
Тогда я мог бы, например, провести один модульный тест на сервис, который я хотел бы проверить:
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()
Имеет ли это смысл или существует более высокоуровневый (но не слишком сложный, чтобы подобрать и интегрировать) инструмент?
testing
continuous-deployment
python
curl
Петр Мурышкин
источник
источник
Ответы:
Вы можете взглянуть на такие инструменты, как Postman, который фокусируется на тестировании API-интерфейсов REST с JavaScript - у него есть несколько приятных функций, но вы теряете использование Python.
Вместо этого, я бы посоветовал взглянуть на связанные с REST плагины для pytest , тестовой среды Python, которая упрощает ваш тестовый код, в то же время выполняя тесты, написанные с использованием
unittest
.Pytest имеет огромный набор плагинов, которые упрощают различные задачи, в том числе:
Таверна , которая специализируется на тестировании API-интерфейсов REST и выглядит здесь весьма актуальной - своего рода «Почтальон для юнит-тестов Python».
pytest-curl-report - при тестировании с
requests
библиотекой напечатаетcurl
команду, которую можно использовать для воспроизведения ошибки из оболочки.Testinfra - фокусируется на тестировании сервера (например, состояние пакетов ОС, файлов, процессов и т. Д., Обычно тестируемых на удаленных серверах) - настоятельно рекомендуется, если вам также нужен этот тип, например, для тестирования Ansible-кода.
Если вам не нравится таверна, вы можете, конечно, использовать
pycurl
сpytest
, что упрощает диагностику именно то, что не удалось. В этом примере с сайта pytest-curl-report используются только общие возможности pytest:Pytest позволяет вам писать все тесты с простым текстом
assert
и, при желании, включать полезное сообщение как часть вывода. Например, один из ваших тестов может быть написан:источник