Как проверить взаимодействие клиент-сервер на основе вывода сервера с помощью pytest? - PullRequest
1 голос
/ 28 мая 2019

Я хочу реализовать следующий сценарий:

  1. [Тема 1] Запустить сервер через subprocess в отдельном потоке Python # 2.
  2. [Тема 2] Снять блокировкупока в выводе сервера не появится конкретная строка.
  3. [Поток 1] Попытайтесь установить блокировку и подождите, пока она не будет снята потоком # 2.

Некоторый соответствующий код:

self._proc = subprocess.Popen([self._bin] + self._args, shell=False, bufsize=1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while self._proc.poll() is None:
    line = self._proc.stderr.readline()
    if 'Ready for connections' in line:
        break
self._lock.release()

Но проблема в том, что он не работает внутри pytest.Если я запускаю тест с аргументом -s, он работает.В противном случае он просто навсегда зависает при получении блокировки в другом потоке.

Также я пытался использовать приборы with capsys.disabled() и with capfd.disabled(), но безуспешно.

Есть ли простой способ отключитьзахват только выходов подпроцесса?Или он должен работать "из коробки", и, может быть, у меня просто есть какой-то другой недостаток в коде?

...