【发布时间】:2018-12-11 03:16:41
【问题描述】:
我正在使用 pyautogui 和 pytest 自动测试 GUI 应用程序(python pyqt、pyside)。当我从命令行运行时,我的测试运行没有错误,但在我通过 jenkins 运行时导入 pyautogui 时出现以下错误:
tests/test_enlighten.py:1: in <module>
import re, sys, signal, logging, argparse, pyautogui, subprocess
/usr/lib/python2.7/site-packages/pyautogui/__init__.py:115: in <module>
from . import _pyautogui_x11 as platformModule
/usr/lib/python2.7/site-packages/pyautogui/_pyautogui_x11.py:160: in
<module>
_display = Display(os.environ['DISPLAY'])
/usr/lib64/python2.7/UserDict.py:23: in __getitem__
raise KeyError(key)
E KeyError: 'DISPLAY'
我阅读了有关设置 DISPLAY 变量的信息并尝试了这个
new_env = dict(os.environ)
new_env['DISPLAY'] = '0.0'
我尝试了 'localhost:0' 值,但仍然失败。
E DisplayConnectionError: Can't connect to display "localhost:0": [Errno 111] Connection refused
任何直接帮助或推荐阅读将不胜感激。
【问题讨论】:
-
这是因为当您在本地运行测试时,您可以在绘制 SuT 的位置显示。 Jenkins 以无头模式运行,没有要绘制的显示。在运行 Jenkins 的 Linux 机器上安装
xvfb并通过xvfb-run pytest而不是pytest运行测试。这将使用将呈现 UI 的虚拟显示器运行测试。
标签: python jenkins environment-variables pytest pyautogui