Отправьте сообщение REST для каждого результата теста Cypress

#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 не позднее следующей недели и подтвердлю, действительно ли это работает.