Проверьте, закончил ли запуск http.сервера Python

#python #python-3.x #testing #automated-tests

Вопрос:

У меня есть набор тестов для сценария, который использует модуль http.server Python. Набор тестов создает новый экземпляр сервера для каждого тестового случая (с использованием подпроцесса.Popen), затем делает различные запросы и проверяет результаты.

Однако иногда сервер не завершает запуск вовремя, и все запросы заканчиваются ошибками подключения.

У меня есть метод определения того, запущен ли сервер, который работает на некоторых компьютерах, но не на других:

 self.server = subprocess.Popen(args)  # Wait for server to finish starting for _ in range(10):  try:  with socket.create_connection(('127.0.0.1', port or 8000)): break  except ConnectionRefusedError:  time.sleep(0.1) else:  raise Exception('Port {} not responding. Did the server fail to start?'.format(port or 8000))  

Однако это работает только на моем компьютере с более высокой спецификацией. На компьютере с более низкой спецификацией (та же ОС, та же версия Python и т. Д.) Сервер все еще не готов после запуска приведенного выше фрагмента. Добавление сна после этого помогает некоторым, но не является гарантией.

Как я могу определить, готов ли подпроцесс http.server к приему запросов?