#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 к приему запросов?