QApplication 实例/qtbot 夹具导致 travis-ci 中止和核心转储
Posted
技术标签:
【中文标题】QApplication 实例/qtbot 夹具导致 travis-ci 中止和核心转储【英文标题】:QApplication instance/qtbot fixture causes travis-ci to abort and core dump 【发布时间】:2019-05-23 19:14:23 【问题描述】:致力于了解如何对基于 PySide2 的应用程序进行自动化单元测试。但是,每当我尝试在测试中初始化QApplication
实例时,无论是通过PySide2
本身还是通过pytest-qt
的qtbot 夹具,travis-ci 都会中止测试。但是,它可以在本地工作。
我尝试使用来自pytest-qt
的qtbot
和qapp
固定装置,尝试不同的travis-ci
发行版,例如xenial
和trusty
,以及像我一样包括pytest-xvfb
插件看到类似的***问题的答案推荐,但以上任何组合都没有任何效果。
# .travis.yml
language: python
python:
- "3.6"
cache: pip
dist: xenial
install: pip install -r requirements.txt
# running from top folder level to keep package on the path
script: python -m pytest tests/
# tests/test_central.py
from lysiaa.central import MyWindow
def test_giveBack(qapp):
window = MyWindow()
assert window.giveBack(1) == 1
# lysiaa/central.py
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
def giveBack(self, param):
return param
当travis-ci
尝试运行它时,它会因核心转储而中止。谁能帮我解决这个问题?
============================= test session starts ==============================
platform linux -- Python 3.6.7, pytest-4.5.0, py-1.8.0, pluggy-0.11.0
PySide2 5.12.3 -- Qt runtime 5.12.3 -- Qt compiled 5.12.3
rootdir: /home/travis/build/robert-clayton/LYSIAA
plugins: xvfb-1.2.0, qt-3.2.2
collected 1 item
tests/test_central.py /home/travis/.travis/functions: line 104: 4092 Aborted (core dumped) python -m pytest tests/
The command "python -m pytest tests/" exited with 134.
【问题讨论】:
【参考方案1】:我只是在一个类似的项目中发现了这一点。我认为这是相关的: Running pytest-qt on CircleCI
我尝试在 Travis-CI 中将 QT_DEBUG_PLUGINS=1
设置为环境变量,但没有从中获得任何信息。但是,我成功添加了
addons:
apt:
packages:
- x11-utils
- libxkbcommon-x11-0
services: xvfb
dist: xenial
到.travis.yml
。请注意,出于某种原因,您必须确保 .travis.yml
中没有 before-install
部分。
这是一个有效的 travis.yml:https://github.com/AFM-analysis/PyJibe/blob/c4406fd712d778e2f644d6d03fce0db5688801bb/.travis.yml
Travis-CI 之前:https://travis-ci.org/AFM-analysis/PyJibe/jobs/564834411
Trivis-CI 之后:https://travis-ci.org/AFM-analysis/PyJibe/jobs/565690825
[编辑:根据 DrIDK 的评论,我添加了 services: xvfb
和 dist: xenial
]
【讨论】:
确认这对我遇到的错误很有帮助。谢谢老兄,我几乎放弃了。 服务 xvfb 也是必需的,并且仅适用于 xenial。我也成功地使用上面的代码解决了这个问题,并在我的 travis 文件中添加了 dist:xenial @DrIDK 感谢您指出这一点 --- 我忘记了我还添加了dist: xenial
到我的 yml 文件中。我将编辑我的原始问题以包含该信息。
这里也一样!一个潜在的讨厌问题的干净和无痛的解决方案......你让我很开心【参考方案2】:
感谢 Paul,我尝试了上述方法,并且必须结合一些解决方案的资源才能使其正常工作。希望这可以帮助其他人!
我在 travis ci 上使用 Python 3.8,但需要上面提到的更多 xcb 包。
addons:
apt:
packages:
- x11-utils
- libxkbcommon-x11-0
- libxcb-randr0-dev
- libxcb-xtest0-dev
- libxcb-xinerama0-dev
- libxcb-shape0-dev
- libxcb-xkb-dev
- libxcb-render-util0
- libxcb-icccm4
- libxcb-keysyms1
- libxcb-image0
services: xvfb
使用此配置,pytest 与 pytest-qt 运行良好。我不得不一一经历 QT 的依赖失败,直到它起作用。
【讨论】:
以上是关于QApplication 实例/qtbot 夹具导致 travis-ci 中止和核心转储的主要内容,如果未能解决你的问题,请参考以下文章
使用 qtbot.mouseClick 选择 QListWidgetItem
将夹具上传到在 AWS EC2 实例的 docker 容器中运行的 django