3

我对我的(python)Qt gui 进行了一些单元测试,这些测试需要 QApplication 实例,但创建一个对我来说总是失败(即以核心转储和应用程序中止结束QApplication())。到目前为止我尝试过的是:

  • 创建方法:
    • 简单app = QApplication()的模块级别
    • app = QApplication(['--platform offscreen'])
    • 使用来自 pytest-qt 的夹具来管理 QApplication 对象的创建,即传递qtbot给我的测试
  • 我什至尝试过qt的两个python端口,即:
    • PyQt5
    • PySide2
  • 虚拟屏幕:
    • 我试过跑步xvfb
    • 我也试过herbstluftwm在 Xvfb 上使用窗口管理器
    • 我已经尝试按照 QApplication instance/qtbot fixturex11-utils libxkbcommon-x11-0中的建议进行安装,导致 travis-ci 中止和核心转储

我尝试使用https://github.com/nektos/act在本地调试此问题,但使用此方法的问题在我添加之前是不可重现的(即一切都按预期工作)herbstluftwm,即只有我能够做到实现的是,在本地它也开始失败。

我还能检查什么?您是否看到在 github 操作上成功创建了 QApplication?顺便提一句。如何让 Qt 的输出在 github 操作中可见?(我已经添加env: QT_DEBUG_PLUGINS: 1,但看不到任何错误)

4

1 回答 1

3

感谢@eyllanesc 对 MRE 的请求,我创建了这个https://github.com/konserw/mre最小示例 repo,它允许我自己找到解决方案。事实证明,你需要安装xvfblibxkbcommon-x11-0,但你不能运行xvfb服务或herbstluftwm。然后您需要使用 运行您的测试命令(coverage在我的情况下)xvfb-run,如果 github 操作需要覆盖的绝对路径,如下所示:

xvfb-run `which coverage` run -m pytest

我希望这将有助于 github 操作的未来用户努力让 PyQt5 或 PySide2 GUI 测试运行。

顺便提一句。pytest 正在使 Qt 的输出静音QT_DEBUG_PLUGINS,因此将 test 命令替换为纯 python 调用和一些重现问题的最小脚本是关键。见https://github.com/konserw/mre/runs/509156615?check_suite_focus=true

于 2020-03-15T14:57:10.943 回答