【发布时间】:2018-09-21 16:51:31
【问题描述】:
我一直试图让 Sauce Labs 报告使用 CodeceptJS 运行的测试的名称,但到目前为止我只能报告成功/失败。
我遵循以下主题作为指导,帮助向 Sauce Labs 报告任何内容:https://github.com/Codeception/CodeceptJS/issues/371
我找到的sn-p如下:
_after() {
if (process.env.SAUCE_USERNAME) {
var sessionId = this.helpers['WebDriverIO'].browser.requestHandler.sessionID;
var sauce_url = "Test finished. Link to job: https://saucelabs.com/jobs/";
sauce_url = sauce_url.concat(sessionId);
console.log(sauce_url);
var dataString = '{"passed": true}';
var status_url = 'https://saucelabs.com/rest/v1/';
status_url = status_url.concat(process.env.SAUCE_USERNAME);
status_url = status_url.concat('/jobs/');
status_url = status_url.concat(sessionId);
var options = {
url: status_url,
method: 'PUT',
body: dataString,
auth: {
'user': process.env.SAUCE_USERNAME,
'pass': process.env.SAUCE_ACCESS_KEY
}
};
function callback(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
}
request(options, callback);
}
}
这里的问题是我不知道如何从这里访问测试名称,也不知道如何获取测试的状态(通过/失败)。
我从那以后了解到,借助帮助程序,您可以在测试通过或测试失败时分派事件。我创建了一个新文件,确保将其添加到配置的 hooks 部分,并添加了事件调度程序。这很好,因为现在我可以访问测试对象,但是下面的代码不起作用:
event.dispatcher.on(event.test.failed, function(test, testError) {
console.log("TEST FAILED...");
console.log(this.helpers["WebDriverIO"]);
var sessionId = this.helpers["WebDriverIO"].browser.requestHandler
.sessionID;
console.log(sessionId);
var sauce_url = "Test finished. Link to job: https://saucelabs.com/jobs/";
sauce_url = sauce_url.concat(sessionId);
console.log(sauce_url);
var dataString = `{"passed": false, "name": "${
test.title
}","customData": { "error": ${test.steps} }}`;
var status_url = "https://saucelabs.com/rest/v1/";
status_url = status_url.concat(process.env.CLOUDSERVICE_USERNAME);
status_url = status_url.concat("/jobs/");
status_url = status_url.concat(sessionId);
var options = {
url: status_url,
method: "PUT",
body: dataString,
auth: {
user: process.env.CLOUDSERVICE_USERNAME,
pass: process.env.CLOUDSERVICE_KEY
}
};
function callback(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
}
request(options, callback);
});
它不起作用的原因是因为以下行似乎不起作用:
var sessionId = this.helpers['WebDriverIO'].browser.requestHandler.sessionID;
具体来说,this.helpers['WebDriverIO'] 不会打印到我的控制台,这让我相信它在帮助程序上下文中不起作用。
是否有某种方法可以从事件分派的上下文中检索测试的会话 ID?测试文档似乎暗示还有其他属性,但没有列出它们。这是供参考的文档:https://codecept.io/hooks/#api
提前致谢!
【问题讨论】:
标签: selenium webdriver-io saucelabs codeceptjs