Python 使用xvfb运行py.test

Python 使用xvfb运行py.test,python,testing,pyqt4,xvfb,Python,Testing,Pyqt4,Xvfb,我试图在Jenkins中为一个使用PyQt4的Python包运行测试,这些测试创建窗口。因为我在Jenkins中运行测试,所以我需要重定向图形输出,所以我使用xvfbrun。大多数情况下,这是可行的,但有一小部分时间,测试会随机失败,原因是: /usr/bin/xvfb-run: line 171: kill: (27375) - No such process 如果我重新运行测试,它在大多数情况下都可以正常工作(因此这只是一个一次性问题) 以前有人遇到过这个问题吗?您是否有改进测试稳定性的解

我试图在Jenkins中为一个使用PyQt4的Python包运行测试,这些测试创建窗口。因为我在Jenkins中运行测试,所以我需要重定向图形输出,所以我使用xvfbrun。大多数情况下,这是可行的,但有一小部分时间,测试会随机失败,原因是:

/usr/bin/xvfb-run: line 171: kill: (27375) - No such process
如果我重新运行测试,它在大多数情况下都可以正常工作(因此这只是一个一次性问题)


以前有人遇到过这个问题吗?您是否有改进测试稳定性的解决方法?

如果您的xvfb运行副本是正确的,我可以确认我也看到了这一点

在我的例子中,目标进程导致Xvfb崩溃。这意味着当拆除不再运行的Xvfb时,包装器脚本本身在第171行失败。为了解决这个问题,我在
set+e
/
set-e
块中包装了
kill$XVFBPID
。如果指定
--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

它通过查找Xvfb进程并杀死它来工作

ps auwx | grep“Xvfb”| grep-v grep

我认为这是
xvfb run
脚本中的一行,它尝试检测是否有另一个实例正在运行,因此如果给出了
-a
开关,可以使用不同的服务器号重试。尝试使用
-a
开关(或
-auto-servernum
)运行,看看这是否有什么不同。