Передача имен тестов в лаборатории соусов с CodeceptJS
Я пытался заставить Sauce Labs сообщать названия тестов, которые выполняются с CodeceptJS, но до сих пор я мог только сообщать об успехе / неудаче.
Я следовал за следующей веткой в качестве руководства, чтобы помочь сообщить обо всем в Sauce Labs в целом: https://github.com/Codeception/CodeceptJS/issues/371
Фрагмент, который я нашел, выглядит следующим образом:
_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);
}
}
Проблема здесь в том, что я не знаю, как получить доступ к имени теста отсюда, и при этом я не знаю, как получить статус теста (пройти / не пройти).
С тех пор я узнал, что с помощью помощников вы можете отправлять события при успешном прохождении теста или если тест не пройден Я создал новый файл, удостоверился, что добавил его в раздел ловушек конфигурации, и добавил диспетчеры событий. Это здорово, потому что теперь у меня есть доступ к тестовому объекту, однако следующий код не работает:
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']
не распечатывается на моей консоли, что наводит меня на мысль, что это не работает из вспомогательного контекста.
Есть ли способ извлечь идентификатор сеанса теста из контекста отправки события? Документация для тестов, кажется, предполагает наличие других свойств, но не перечисляет их. Вот документ для справки: https://codecept.io/hooks/
Заранее спасибо!
1 ответ
Похоже, вы можете использовать пакет с соусом, чтобы справиться с этим.
Настройте его и авторизуйтесь первым
const SauceLabs = require('saucelabs')
saucelabs = new SauceLabs({
username: your-username,
password: your-accessKey
});
И после завершения теста вы можете отправить результаты обратно в SauceLabs следующим образом:
saucelabs.updateJob(sessionID, {
name: test-title,
passed: passed
}, done);