Выполнение асинхронного теста в Python
Мне нужно сделать следующий тест:
- отправить запрос GET на сервер (http://remote/...)
- подождите, пока сервер отправит запрос POST в ответ (http://local/...)
- проанализировать данные POST и сделать некоторые утверждения
Selenium не подходит для этого случая: он не может прослушивать соединения, и я могу также отправить GET без Selenium.
Итак, я делаю юнит-тест:
class MobiMoneyTestCase(TestCase):
def test_can_send_response(self):
resp = requests.post('http://url/api/', data={'callback': 'http://localhost:8000'})
class Handler(SimpleHTTPRequestHandler):
def do_GET(self):
assert self.path == '...'
httpd = SocketServer.ThreadingTCPServer(('localhost', 8000),Handler)
Тест должен ждать 5 секунд для запроса POST и затем завершиться неудачей, если ничего не произошло. Как я могу объединить эти элементы в тесте? Если я поставлю sleep(5)
в test_can...
, httpd
Обработчик не отвечает, пока не закончится обратный отсчет.
1 ответ
В основном вы хотите тайм-аут процесса, если он слишком длинный? Вы должны проверить сигнальный модуль в этом случае.
Здесь есть аккуратная реализация (с декоратором): функция тайм-аута, если завершение занимает слишком много времени