首页 > 解决方案 > 如何覆盖 wdio-sauce-service 给 SauceLabs 的测试名称?

问题描述

SauceLabs 通常使用最后一个describe()测试标题来命名其档案中的测试。不幸的是,有几层describe,这可能会导致名称不是很有意义。因此,我想动态更改测试的名称,例如使用我在不同地方看到的,例如WebdriverIO Testrunner 配置文档,应该只更新desiredCapabilities类似的

browser.desiredCapabilities.name = "my test name"

在 abeforeTestafterTest钩子中设置它“有效”,如 in 不会引发错误并反映在desiredCapabilities对象中,但 SauceLabs 不使用它作为存档中测试运行的名称。

SO 上的另一个答案,针对 CodeceptJS 的类似问题给出了建议

const SauceLabs = require('saucelabs')

saucelabs = new SauceLabs({
  username: your-username,
  password: your-accessKey
});

// run test(s) ...

saucelabs.updateJob(sessionID, {
  name: test-title,
  passed: passed
}, done);

不幸的是,我什至没有/不需要 SauceLabs 模块。

罪魁祸首似乎是wdio-sauce-service,因为使用云服务的 WebdriverIO文档指出

如果您设置name,这将更改此构建在 Sauce Labs 中的此测试的名称。如果您使用 WDIO 测试运行程序与 WebdriverIO 结合使用,wdio-sauce-service则会自动为测试设置正确的名称。

如何覆盖wdio-sauce-service传递给 SauceLabs 的名称?

标签: javascriptnode.jswebdriver-iosaucelabs

解决方案


在撰写本文时,wdio-sauce-service已替换为@wdio/sauce-service,它还依赖于您在此处引用的 SauceLabs 模块。在这两种服务中,Sauce Labs 会话的最后一步会更新函数中的作业,该after()函数在会话关闭或已经关闭时触发。

您可以覆盖作业名称的唯一方法是修改服务代码,制作您自己的代码,或者在酱汁服务使用您的框架函数完成之后对 SauceLabs 的 API 进行额外调用,如果您的框架允许的话。

如果您使用该name功能,则会产生使所有测试具有相同作业名称的副作用。


推荐阅读