【问题标题】:Python application tested in Travis spawns web browser, which blocks, and Travis times out在 Travis 中测试的 Python 应用程序生成 Web 浏览器,该浏览器阻塞,并且 Travis 超时
【发布时间】:2016-08-16 06:41:19
【问题描述】:

我一直在 Travis 下测试一个 Python 应用程序,效果非常好。但是,我现在正在尝试测试以下语句:

webbrowser.open_new_tab(outputFile)

当这行代码执行时,Travis 会记录:

≪ ↑ ↓ 查看

在过去 10 秒内未收到任何输出,这可能表示构建停滞或构建本身有问题。

构建已终止

如何阻止 Travis 被生成外部应用程序(浏览器 - 可能是 Firefox)的代码阻止?我按如下方式运行测试:

xvfb-run --server-args="-screen 0, 1024x768x24" nosetests -s --nologcapture -A 'not slow' -v --with-id --with-xcoverage --with-xunit --verbose --cover-package=qgis2web

我还尝试了以下调用xvfb(来自https://docs.travis-ci.com/user/gui-and-headless-browsers/)的替代方式:

- before_script:
  - "export DISPLAY=:99.0"
  - "sh -e /etc/init.d/xvfb start"
  - sleep 3 # give xvfb some time to start

或:

-before_install:
  - "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16"

然后直接调用测试:

nosetests -s --nologcapture -A 'not slow' -v --with-id --with-xcoverage --with-xunit --verbose --cover-package=qgis2web

两者都会导致“无法连接到 X”类型错误。

如何阻止webbrowser 阻止?

编辑: 测试也是用 Python 编写的。

【问题讨论】:

  • command & 适用于 86% 的案例
  • @набиячлэвэлиь 抱歉,你能扩展一下吗?我不明白你的意思。
  • 要以非阻塞方式运行command,您可以执行command &
  • 我提到的webbrowser 命令是用Python 编写的测试套件的一部分。 command & 给出语法错误。

标签: python travis-ci


【解决方案1】:

看着上面写着的docs for webbrowser

在 Unix 下,X11 下首选图形浏览器,但如果图形浏览器不可用或 X11 显示器不可用,则将使用文本模式浏览器。如果使用文本模式浏览器,调用进程将阻塞,直到用户退出浏览器。

这表示您需要在目标平台 (travis) 上安装图形浏览器才能使该命令正常工作。

但是,您可能还认为,如果只是在您无法控制的背景中生成 一些 浏览器,您将不会获得太多有用的测试结果的反馈。因此,您可能希望模拟 webbrowser 模块进行测试并检查是否调用了适当的函数,或者只是在测试环境中跳过此调用。

【讨论】:

  • 我在webbrowser 文档中看到了这一点,但我认为 Travis 是随 Firefox 一起安装的。我不知道我是否有通过 xvfb-run 运行测试的问题,这意味着 webbrowser 找不到 X 会话(“注意:不要直接运行 xvfb,因为它不能以这种方式处理多个并发实例” -docs.travis-ci.com/user/gui-and-headless-browsers/…)。这可能意味着它默认为阻止文本浏览器。但我无法让其他 Travis 推荐的 xvfb 方法工作(来自同一个链接)。
  • 至于我正在测试的内容,我只是在检查导出页面时是否使用了正确的用户指定路径。测试时我实际上不需要webbrowser 调用,但在生产中运行时需要。如果测试 not 正在运行,有没有办法只在自己的代码中运行命令?如果是这样,我可以在 Travis 下运行时跳过 webbrowser 行。
  • 刚刚找到 Travis 环境变量,所以可能会避免这个问题。不过还是想知道答案。
  • 也许firefox没有设置为默认浏览器?您可以尝试设置 BROWSER 环境变量(请参阅上面的链接)。相反,请查看模拟模块,它可以让您检查是否使用正确的参数调用了 open_new_tab() 方法。您可能需要借助依赖注入来在测试时将调用路由到 mock,在生产时将调用路由到真正的 webbrowser 模块。
猜你喜欢
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2015-05-14
  • 2020-01-10
  • 1970-01-01
  • 2019-01-23
  • 2012-01-11
  • 1970-01-01
相关资源
最近更新 更多