【问题标题】:Failing a Jenkins job when nightwatch test assertion fails in Browserstack当在 Browserstack 中的守夜测试断言失败时,Jenkins 作业失败
【发布时间】:2018-03-17 16:52:38
【问题描述】:

我有一份 Jenkins 工作,通过 Nightwatch.js 框架在 Browserstack 上运行 Selenium 测试。我们有一整套测试,nightwatch 在单独的进程中运行,我们需要一种方法在所有测试运行后将通过/失败值返回给 Jenkins。

我一直在尝试使用 Nightwatch 钩子 teardown 在每个模块末尾使用 if(this.results.failed) { take action } 运行一段代码,但我不知道我需要采取什么行动才能使Jenkins 作业可访问的故障。

我最初的想法是创建一个环境变量,并在测试失败时将其设置为 false,但我认为每个进程都在单独的子 shell 中运行,因此无法访问测试模块创建/修改的变量。

我的第二个想法是在 globals 模块中创建一个计数器,但是当被全局 after 方法引用时,该值不会按预期增加。

【问题讨论】:

  • 我对nodejs没有太多经验。但如果您可以使用 0 以外的状态码退出,您的詹金斯作业将失败。试试{take action}
  • 我确实试过了,我们正在使用 gulp-nightwatch 模块,结果如果您以 status != 0 退出测试,gulp-nightwatch 不会向控制台输出任何详细信息.它只打印 gulp-nightwatch 遇到错误,并且该测试套件的报告器无法运行。

标签: node.js selenium jenkins nightwatch.js browserstack


【解决方案1】:

如果控制台输出包含字符串“TEST FAILURE”,我可以使用Jenkins Log Parser Plugin 使测试失败来解决此问题。

这是通过创建一个包含单行的规则文件来完成的:

error /TEST FAILURE/

【讨论】:

    【解决方案2】:

    我建议你这样做:

    • 在 afterEach 函数 (https://github.com/nightwatchjs/nightwatch-docs/blob/master/guide/using-nightwatch/test-hooks.md) 中创建一个同步写入器,并将测试结果写入运行 jenkins 的系统上的平面文件(csv、tsv、txt 等)。您可以选择仅写入失败 if(this.results.failed) 或将所有带有通过/失败状态的 testID 写入文件
    • 测试构建完成后,您将在平面文件中获得所有详细信息(包括有关失败的详细信息)。
    • 您现在可以触发一个下游作业(使用下游 jenkins 插件在 Jenkins 上执行不同的作业),该作业具有一个简单的脚本(shell 脚本),用于查找您在步骤 1 中编写的测试输出文件中的故障。使用这个,Jenkins 将拥有测试失败的详细信息

    注意:如果您有多个独立构建运行测试,请确保您使用 jenkins build blocker 插件在所有独立构建完成后启动下游作业

    【讨论】:

    • 感谢您的回复。我今天会测试一下!
    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2015-11-13
    相关资源
    最近更新 更多