QApplication instance/qtbot fixture 导致 travis-ci 中止和核心转储
QApplication instance/qtbot fixture causes travis-ci to abort and core dump
致力于了解如何对基于 PySide2 的应用程序进行自动化单元测试。但是,每当我尝试在测试中初始化一个 QApplication
实例时,无论是通过 PySide2
本身还是通过 pytest-qt
的 qtbot fixture,travis-ci 都会中止测试。但是,它在本地工作。
我尝试使用 pytest-qt
中的 qtbot
和 qapp
装置,尝试不同的 travis-ci
发行版,例如 xenial
和 trusty
,以及包括我所看到的类似 Whosebug 问题的答案推荐的 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.
我刚刚为一个类似的项目弄明白了这一点。我认为这是相关的:
我试图在 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
]
谢谢 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 的依赖失败,直到它起作用。
致力于了解如何对基于 PySide2 的应用程序进行自动化单元测试。但是,每当我尝试在测试中初始化一个 QApplication
实例时,无论是通过 PySide2
本身还是通过 pytest-qt
的 qtbot fixture,travis-ci 都会中止测试。但是,它在本地工作。
我尝试使用 pytest-qt
中的 qtbot
和 qapp
装置,尝试不同的 travis-ci
发行版,例如 xenial
和 trusty
,以及包括我所看到的类似 Whosebug 问题的答案推荐的 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.
我刚刚为一个类似的项目弄明白了这一点。我认为这是相关的:
我试图在 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
]
谢谢 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 的依赖失败,直到它起作用。