Запуск py.test с помощью xvfb-run

Я пытаюсь запустить тесты в Jenkins для пакета Python, который использует PyQt4, и тесты создают окна. Поскольку я запускаю тесты в Jenkins, мне нужно перенаправить графический вывод, поэтому я использую xvfb-run. В большинстве случаев это работает, но в некоторых случаях тестирование случайно завершается ошибкой:

/usr/bin/xvfb-run: line 171: kill: (27375) - No such process

Если я перезапущу тесты, большую часть времени он будет работать нормально (так что это всего лишь разовая проблема).

Кто-нибудь сталкивался с этой проблемой раньше? Есть ли у вас идеи обходных путей для повышения стабильности тестирования?


person astrofrog    schedule 02.10.2012    source источник
comment
Я думаю, что это строка в xvfb-run скрипте, где он пытается определить, запущен ли другой экземпляр, поэтому, если был задан переключатель -a, можно повторить попытку с другим номером сервера. Попробуйте запустить с переключателем -a (или --auto-servernum), чтобы увидеть, имеет ли это значение.   -  person Pedro Romano    schedule 02.10.2012


Ответы (2)


Он работает через поиск процесса Xvfb и его уничтожение.

ps auwx | grep "Xvfb" | grep -v grep
person kqqsysu    schedule 26.03.2015

Если ваша копия xvfb-run является такой же, как моя, Могу подтвердить, что тоже это видел.

В моем случае целевой процесс вызвал сбой Xvfb. Это означает, что сам сценарий оболочки завершается ошибкой в ​​строке 171, когда при разрыве больше не выполняется Xvfb. Чтобы обойти это, я заключил kill $XVFBPID в блок _2 _ / _ 3_. Также помогает, если вы укажете --error-file=, чтобы xvfb-run сохранял асинхронный стандартный вывод ошибок из Xvfb во время выполнения целевого процесса, чтобы вы могли устранить основную причину.

Обойти:

# Kill Xvfb now that the command has exited.
# Ignore failure of kill since we want to be forgiving of Xvfb itself crashing
set +e
kill $XVFBPID
set -e
person shuckc    schedule 30.10.2012