在Browserstack

时间:2017-10-05 23:44:04

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

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

我一直在尝试使用Nightwatch hook teardownif(this.results.failed) { take action }每个模块的末尾运行一段代码,但我无法弄清楚我需要采取什么行动以使詹金斯工作无法访问失败。

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

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

2 个答案:

答案 0 :(得分:0)

以下是我建议你这样做的方法:

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

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

答案 1 :(得分:0)

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

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

error /TEST FAILURE/