2009-10-16 5 views
16

Я пишу модульные тесты для части приложения, которое работает как HTTP-сервер. Подход, который я пытался сделать, - это импортировать модуль, содержащий HTTP-сервер, запустить его. Затем модульные тесты будут использовать urllib2 для подключения, отправки данных и проверки ответа.Python - тесты на скрученные и единичные измерения

Наш HTTP-сервер использует Twisted. Одна из проблем заключается в том, что я просто не знаком с Twisted :)

Теперь я создаю экземпляр нашего HTTP-сервера и запускаю его в методе setUp(), а затем останавливаю его в методе tearDown().

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

Я искал и искал и искал, и я просто не могу найти ответ, который имеет смысл.

Я принимаю неверный подход полностью или просто отсутствует что-то очевидное?

ответ

17

Вот некоторая информация: Writing tests for Twisted code using Trial

Вы также должны смотреть на -help команды испытания. В суде много хороших вещей! Но проводить асинхронное приложение не всегда легко. Удачи!

7

Я считаю, что для модульного тестирования в Twisted вы должны использовать TwistedTrial (это основной компонент, то есть поставляется с Twisted tarball в каталоге с скрученными/пробными версиями). Тем не менее, поскольку URL, на который я указал, говорит, что в основном документ состоит в том, что он просматривает источник (включая источники различных проектов Twisted, поскольку они также тестируются с пробной версией).

3

Существует known bug с Twisted (это, вероятно, не будет исправлено), где перезапуск реактора вызывает сбой.

Вот почему ваши модульные тесты не работают.

Как и при использовании Trial, вы можете захотеть рассмотреть отдельные системы тестирования, которые говорят с вашим HTTP-сервером, как клиент.

  • Webdriver - API для управления сеансом браузера вокруг вашего сайта.
  • TestGen4Web - Плагин Firefox, который регистрирует взаимодействия с сайтом и может воспроизводиться.
4

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

Вы также должны быть модульным тестированием снизу вверх - это то, что подразумевает «единица» в модульном тестировании. Перед тестированием вашего интерфейса проверьте свои данные и логику. Для интерфейса HTTP вы должны вызывать processGET, processPOST и т. Д. С помощью mock-запроса, но вы должны делать это только после того, как вы проверили, что эти методы вызывают. В каждом тесте должно быть указано, что модули, протестированные в других местах, работают в соответствии с конструкцией.

Если вы говорите по протоколу HTTP или вам нужен работающий сервер или другое состояние, вы, вероятно, проводите тесты более высокого уровня, такие как функциональные или интеграционные тесты. Это не плохо, но вы можете перефразировать свой вопрос.

+0

Вы знаете, я думаю, что вы правы.Честно говоря, все, что мне нужно сделать, чтобы выполнить тесты на уровне более низкого уровня, - это подделка объекта «запрос» (некоторые из функций используют это совсем немного). – Dave