Модульное тестирование взаимодействия клиент-сервер в Twisted - PullRequest
3 голосов
/ 21 марта 2012

В моем последнем проекте Python, использующем Twisted, я пытался хорошо использовать модуль unittest. На высоком уровне я создаю два RESTful API, разработанных специально для общения друг с другом. Для большинства запросов я могу просто использовать DummyRequest и проверить отображаемые значения по ожидаемой константе, и это работает нормально.

Однако у меня есть несколько случаев, когда дизайн требует запроса на одном сервере, который (помимо прочего) затем отправляет запрос на другой сервер, но на самом деле не заботится об ответе. Важно то, что запрос происходит.

Как я уже сказал, я могу отлично протестировать эту функциональность на другой стороне, но я не уверен, как проверить, чтобы данные были отправлены. Мои идеи до сих пор либо

  • Настройте фиктивный тестовый сервер, который просто проверяет, был ли выполнен запрос, и проверяет введенные данные - кажется ненадежным и слишком много усилий
  • Настройте декоратор для переноса определенных тестов и измените urllib.urlopen, чтобы он сообщал, когда он вызывался, что мы пытались получить, и позволял мне просто возвращать известный результат там.

Я склоняюсь ко второму варианту, так как он кажется более питоническим, но в то же время немного хакерским.

Мысли

Ответы [ 2 ]

1 голос
/ 21 марта 2012

Twisted поставляется с собственной структурой модульного тестирования, которая называется Trial.Как вы можете себе представить, он хорошо подходит для тестирования вашего сетевого кода. Вот учебник, с которого можно начать.

0 голосов
/ 21 марта 2012

Я мало что знаю о Twisted или о том, как вы настраиваете тестируемую систему, но не могли бы вы запустить два сервера в одном потоке? Один из них будет тем, который вы тестируете, а другой будет просто фиктивным, который сможет принять любой запрос. Кроме того, манекен будет хранить информацию о том, что он получил вызов. После запуска операции на первом сервере, который заставляет его вызывать второй, вы можете утверждать, что второй получил запрос.

...