即使在 Nightwatchjs 中测试失败,Browserstack 也会报告成功

Browserstack reports successful even when test fails in Nightwatchjs

我刚开始将 nightwatch 与 browserstack 一起使用,我注意到当我们得到一个失败的测试时,nightwatch 会记录失败,但 browserstack 不会。 sample test I am using。 我也在使用 BrowserStack 的免费试用版。

我的问题是:

  1. 有什么想法可以在测试 运行 失败时告诉 browserstack 吗?

来自 BrowserStack doc

REST API

It is possible to mark tests as either a pass or a fail, using the following snippet:

var request = require("request"); 
request({
    uri: "https://user:key@www.browserstack.com/automate/sessions/<session-id>.json",
    method: "PUT",
    form: {
        "status": "completed",
        "reason":""
    }
});

The two potential values for status can either be completed or error. Optionally, a reason can also be passed.

我的问题是:

  1. 如何在测试执行后得到 'session-id'?
  2. 如果我已经可以在仪表板中看到 "completed" 状态怎么办?
  1. BrowserStack上的会话只有三种状态: 已完成错误超时。 Selenium(因此,BrowserStack)无法理解测试是通过还是失败。通过出现在控制台上的测试中的多个断言,您可以推断测试是否通过/失败。但是,这些断言不会到达 BrowserStack。正如您正确识别的那样,如果您在控制台中看到失败,可以使用 REST-API 将会话状态更改为 'Error'。

  2. 我建议在执行测试时获取测试的会话 ID,因为在 之后获取会话 ID 测试执行是一个漫长的过程.在 Nightwatch 中,您可以按如下方式获取会话 ID:

browser.session(function(session) {
    console.log(session.sessionId);
});
  1. 是的,您当然可以在会话完成后更改会话状态。这就是 REST-API 提供帮助的地方!

如果您来这里是为了在 Python 中寻找解决方案,您可以使用

requests.put(
    "https://api.browserstack.com/automate/sessions/{}.json".format(driver.session_id),
    auth=(USERNAME, ACCESS_KEY),
    json={"status": "failed", "reason": "test failed"})