Выполнение асинхронного теста в 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 ответ

В основном вы хотите тайм-аут процесса, если он слишком длинный? Вы должны проверить сигнальный модуль в этом случае.

Здесь есть аккуратная реализация (с декоратором): функция тайм-аута, если завершение занимает слишком много времени

Другие вопросы по тегам