#cypress
Вопрос:
Есть ли способ вызвать REST api на основе каждого результата теста cypress?
У нас есть система определения тестов zephyr, и мы должны использовать ее API (https://support.smartbear.com/zephyr-scale-server/api-docs/v1/ ) для изменения статуса каждого тестового набора, определенного нашими тестировщиками, в рамках процессов автоматизации, которые мы осуществляем в нашей компании.
В моем исследовании единственным решением, которое мы нашли, было использование репортера (https://docs.cypress.io/guides/tooling/reporters), а затем проанализируйте результаты с помощью небольшого скрипта, который генерирует указанные вызовы REST для каждого результата теста.
Мне было интересно: есть ли более элегантное решение для вызова приложения zephyr напрямую, может быть, через Cypress?
Ответ №1:
Я не знаю, какая информация требуется zephyr, но есть множество крючков/событий, которые вы можете использовать.
Например (в верхней части спецификации или в /support/index.js)
Cypress.on('test:after:run', (test, runnable) => {
console.log('test,runnable', test, runnable)
const details = {
projectKey: Cypress.env('zephyr-project-key'),
testName: test.invocationDetails.relativeFile,
status: test.status,
error: runnable.err.message,
retries: runnable.retries.length,
duration: test.wallClockDuration,
startTime: test.wallClockStartedAt
}
cy.request('POST', 'api/end/point', { body: details })
// or native fetch('POST',...) if a particular hook complains about using cy.request
})
Там также есть
on('after:run', (results) => {
/* ... */
})
on('after:spec', (spec, results) => {
/* ... */
})
on('after:screenshot', (details) => {
/* ... */
})
Или (технически внутри теста)
afterEach(() => {
const test = cy.state('test')
const runnable = cy.state('runnable')
/* ... */
})
Комментарии:
1. Как ни странно, cy.request просто ничего не сделал для меня, не отправил запрос и не пожаловался… Фетч работал, но вот так:
fetch('https://somewebhook', {mode: 'no-cors'})
2. У меня было такое чувство — если тест закончился, то
cy.*
, вероятно, ничего больше не работает.3. Спасибо за ответ! Мне было интересно, есть ли какой-либо способ определить результат теста, а ЗАТЕМ отправить запрос на ОТДЫХ? Похоже, что эти запросы доступны только во время теста :
4. Некоторые или большинство из этих зацепок (особенно
test:after:run
) должны произойти после завершения теста. По крайней мере, я заметил значение,test.status
которое логически будет заполнено только после завершения теста.5. Спасибо вам за помощь. Я напишу PoC не позднее следующей недели и подтвердлю, действительно ли это работает.