MacOS Sonoma下使用qtbot运行测试无限挂起的解决办法问询
MacOS Sonoma下pytest-qt测试无限挂起的解决办法
以下是几个经过验证的可行方案:
强制切换Qt后端为X11
MacOS Sonoma的原生Qt后端存在兼容性问题,可通过强制使用X11后端规避。首先安装XQuartz(系统已自带则忽略),然后:- 运行测试时添加环境变量:
QT_QPA_PLATFORM=xcb pytest - 或者在pytest配置文件(
conftest.py)中添加:import os os.environ["QT_QPA_PLATFORM"] = "xcb"
- 运行测试时添加环境变量:
降级相关依赖版本
新版本的pytest-qt或PyQt/PySide可能与Sonoma不兼容,尝试降级到稳定版本:- 降级pytest-qt:
pip install pytest-qt==4.2.0 - 降级PyQt6:
pip install PyQt6==6.5.2
可根据实际情况调整具体版本号。
- 降级pytest-qt:
使用pytest-forked隔离测试进程
安装pytest-forked插件,让每个测试在独立进程中运行,避免单个测试挂起影响全局:- 安装插件:
pip install pytest-forked - 运行测试:
pytest --forked
- 安装插件:
手动管理QApplication实例
绕过qtbot默认的初始化逻辑,手动创建和管理QApplication:from PyQt6.QtWidgets import QApplication import pytest @pytest.fixture(scope="session") def app(): app_inst = QApplication.instance() if not app_inst: app_inst = QApplication([]) yield app_inst app_inst.quit() def test_repro(app, qtbot): pass
内容的提问来源于stack exchange,提问作者Georgy Ivanov
相关产品推荐
相关产品推荐

