You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions中pytest报Exit Code134:GUI测试容器内崩溃求助

GitHub Actions中GUI测试崩溃(退出码134)的排查思路

退出码134对应进程收到SIGABRT信号,通常和GUI环境缺失、依赖库不完整、底层断言失败有关,并非单纯内存问题。以下是具体排查步骤:

1. 补全虚拟GUI运行环境

GitHub Actions容器默认无图形界面,GUI测试需要虚拟显示支持:

  • 在测试前执行命令配置Xvfb:
    sudo apt-get update && sudo apt-get install -y xvfb
    export DISPLAY=:99.0
    Xvfb :99 -screen 0 1024x768x16 &
    
  • 或者直接用xvfb-run包裹测试命令:
    xvfb-run --auto-servernum pytest <你的测试路径>
    

2. 对齐系统依赖库

本地与容器的系统依赖可能存在差异,需补充GUI相关运行时库:

  • 若测试基于PyQt/PySide,安装Qt核心库:
    sudo apt-get install -y libqt5gui5 libqt5core5a libqt5widgets5
    
  • 若用Tkinter,安装对应包:
    sudo apt-get install -y python3-tk
    
  • 可通过ldd <你的GUI模块路径>对比本地与容器的依赖输出,补全缺失库。

3. 启用核心转储定位崩溃点

开启核心转储获取精确崩溃堆栈:

  • 测试前设置核心转储限制:
    ulimit -c unlimited
    
  • 测试后用gdb分析核心文件(若生成):
    gdb -ex "thread apply all bt" -ex "quit" python core.* || true
    
  • 若GitHub Actions未保留核心文件,可将其作为artifact上传,方便后续分析。

4. 简化测试逐步定位

将测试拆分为最小单元,逐步排查触发崩溃的操作:

  • 先仅初始化GUI窗口,不执行任何交互,验证是否崩溃;
  • 逐步添加点击、输入等操作,定位到具体触发崩溃的步骤;
  • 替换依赖硬件的操作(如剪贴板访问),改用模拟接口测试。

5. 对齐Python及依赖版本

确保容器与本地环境版本完全一致:

  • 用actions/setup-python指定与本地相同的Python版本;
  • 本地执行pip freeze > requirements.txt,容器中用pip install -r requirements.txt安装完全匹配的依赖包。

6. 排查信号触发的其他原因

SIGABRT还可能由以下情况触发:

  • 程序内部断言失败:检查测试代码中是否有依赖特定环境的断言(如屏幕分辨率);
  • 系统资源耗尽:排查文件句柄、进程数等限制,可通过ulimit -a查看容器的资源限制;
  • 权限问题:尝试用sudo执行测试,或检查容器运行用户的权限设置。

若能提供崩溃堆栈的具体内容(如底层C函数调用栈)、测试代码的关键逻辑(如GUI初始化、交互步骤),可进一步缩小排查范围。

内容的提问来源于stack exchange,提问作者Justin Buiel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:31:00