pyqt 测试套件与 Jenkins 一起神秘失败,从 Windows 命令 shell 完美运行

pyqt test suite fails mysteriously with Jenkins, works flawlessly from Windows command shell

(注意我怀疑这是 PyQt 特有的,所以我也用 Qt 标记了)

我们有 2 个测试套件(称之为 A 和 B),我们 运行 在我们的开发工作站上使用 pytest:

python -m pytest -c configfile -s -v A
python -m pytest -c configfile -s -v B

套件 B(并且只有那个)测试我们的 PyQt 组件; A 中没有任何 PyQt。我们在 Jenkins(版本 1.658 btw)中将项目 A 定义为 运行 Suite A:它 运行 在 Jenkins 中没有问题。我们做了同样的事情,在 Jenkins 中定义了一个项目 B 到 运行 Suite B:这个项目在多次测试后间歇性失败,带有 SYSTEM 日志消息和来自 Qt 的 WARNING 日志消息(通过 [=14 设置处理程序捕获) =]).捕获测试套件 B 的标准输出的 Jenkins 日志是:

SYSTEM log message from Qt: WindowCreationData::create: CreateWindowEx failed (Not enough storage is available to process this command.)
WARNING log message from Qt: Failed to create platform window for QWidgetWindow(0x705d260, name="FramedPartWidgetWindow") with flags QFlags<Qt::WindowType>(Window|WindowTitleHint|WindowSystemMenuHint|WindowMinMaxButtonsHint|WindowCloseButtonHint|WindowFullscreenButtonHint) (context: category=default)
Build step 'Execute Windows batch command' marked build as failure

最后一行由 Jenkins 脚本 运行ning 测试套件 B 输出。

在 运行 测试套件的 Jenkins 机器(Windows 7 Pro 64 位平台,顺便说一句)上,我可以打开 Windows 命令 shell 如果我从那里 运行 测试套件,那么两个测试套件 运行 都没有问题。然后我打开一个网络浏览器,转到套件 B 的 Jenkins 项目页面并单击 "Build now":这 运行 与我从命令 shell 运行 做的一样,但是我得到上面的错误。如果我进行 10 次构建,上述情况每次都会针对不同的测试发生,尽管总是在相同的 "area" 中。如果我过滤掉发生故障的附近的测试,则测试 运行s 进一步,但是在以这种方式删除 4 个测试 类 之后,这不再有帮助。

问题不在于桌面,因为我已登录。命令 shell 运行 与 Jenkins 运行 之间的一个区别是来自 shell,测试套件 B 打开许多 (PyQt) windows 并关闭它们。在 Jenkins 中,我看不到任何 windows 打开,因此它们似乎在某些 "virtual" 桌面上打开。所以也许是桌面的问题。我是否需要以某种方式将该虚拟桌面配置为具有更大的图形容量?

该错误似乎表明 Jenkins 启动的进程正在 运行 耗尽某些资源,但不清楚是什么:有足够的驱动器 space 和内存。

有人知道从这里到哪里去吗?我进行了 google 搜索,我能找到的只有这些,尽管我会尝试这些建议,但它们看起来不太有前途:

我不熟悉 Windows 运行 进程中 Jenkins 服务的复杂性,所以我很茫然。

更新 20161219:显然这是来自 Windows 服务的 GUI 测试的已知问题,请参阅 my post on Bitnami Jenkins forum

显然这是 Windows 服务的 GUI 测试的一个已知问题,see my post on Bitnami Jenkins forum, as is the case with the bitnami jenkins stack we use. As I mention in that post, the bottom of the page https://wiki.jenkins-ci.org/display/JENKINS/Tomcat 说当使用 [=38= 安装 Jenkins 时,Windows 中的 GUI 测试不太可能工作] 作为作为服务安装的容器。唯一的选择似乎是使用 Windows 调度程序(而不是服务)将 Tomcat 设置为 运行,但不幸的是,我们用于 jenkins 的 bitnami 堆栈似乎不允许这样做,所以我们唯一的解决方案是从头开始安装 jenkins 并将 tomcat 作为计划任务。

Windows(基于设置 Jenkins 以通过 Squish 测试 GUI 的文档),

  • 安装 Jenkins master(这应该可以通过 Linux VM 中的 bitnami 堆栈来完成)
  • 安装Windows 从站。确保在 Launch 方法中不以 Windows Service 的形式启动从站。 Windows 服务旨在 运行 命令行应用程序而不是 运行 包含 GUI 的应用程序。通过 Java Web Start 启动从属代理,将 Jenkins slave 作为 JNLP 启动工作正常。
  • 在管理 Jenkins|管理节点|新节点中设置 Jenkins 中的节点。
  • 阅读https://kb.froglogic.com/display/KB/Automation+on+Windows

This page 似乎汇总了几个与此问题相关的帖子。