为了测试我的代码是pyqt5应用程序的插件,我正在编写创建虚拟QApplication对象的测试。
但是,每当我尝试创建一个QApplication代码时,本地按预期工作,但在travis中的段错误。
我将问题确定为以下几行:
qapp = QtWidgets.QApplication([])
这是我得到的错误(取自travis日志):
tests/idaplugin/test_plugin.py::test_plugin_creation /home/travis/.travis/job_stages: line 53: 2382 Aborted (core dumped) PYTHONPATH=. py.test ./${PROJECT} ./tests/${PROJECT} --verbose --cov-report= --cov=$PROJECT
这是travis-ci的工作:https://travis-ci.org/nirizr/rematch/jobs/219490893
这是测试的片段:
def test_plugin_creation():
from PyQt5 import QtWidgets
qapp = QtWidgets.QApplication([])
# test be here, requires a QApp to function
plugin = plugin_rematch.PLUGIN_ENTRY()
... extra test code removed ...
这是travis的问题还是我做错了什么?
您需要在Travis上运行xvfb才能执行图形应用程序(如果您不需要任何GUI,请使用QCoreApplication
)。
你可以使用follow Travis' docs,或者(因为看起来你正在使用pytest),使用我的pytest-xvfb plugin。
顺便说一句:pytest的-s
标志(不隐藏“传递”测试的输出)在调试这样的问题时非常有用。
在gitlab CI / CD上你可以使用QT_QPA_PLATFORM: "offscreen"