Python 使用xvfb运行py.test
我试图在Jenkins中为一个使用PyQt4的Python包运行测试,这些测试创建窗口。因为我在Jenkins中运行测试,所以我需要重定向图形输出,所以我使用xvfbrun。大多数情况下,这是可行的,但有一小部分时间,测试会随机失败,原因是: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 如果我重新运行测试,它在大多数情况下都可以正常工作(因此这只是一个一次性问题) 以前有人遇到过这个问题吗?您是否有改进测试稳定性的解
/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
)运行,看看这是否有什么不同。