cypress-horus-api

0.0.2 • Public • Published

Etiquetas

MIT License GPLv3 License AGPL License

Stack utilizada

Back-end: Javascript

API Horus Cypress

API de integração entre o framework de testes Cypress e a ferramenta de gestão de testes Horus

Instalação

Instale o pacote no seu projeto Cypress

  npm i cypress-horus-api

Funcionalidades

  • Criação do ciclo de testes
  • Adição dos casos de testes no ciclo informado
  • Execução do teste
  • Upload de evidências

Documentação da API

Criação do ciclo de testes

  POST {BaseURL}/api/createCicleTest
Parâmetro Tipo Descrição
API-KEY-HORUS Header Obrigatório. A chave da sua API deve ser passado no header na chamada do end-point
folder_name string Obrigatório. Nome da pasta onde sera criado o ciclo de testes
email string Obrigatório. E-mail usando no horus
description string Obrigatório. Descrição que será criado o ciclo de testes
environment_name string Obrigatório. Ambiente que será executado o ciclo de testes

Adição dos testes ao ciclo

  POST {BaseURL}/api/AddCaseTest
Parâmetro Tipo Descrição
API-KEY-HORUS Header Obrigatório. A chave da sua API deve ser passado no header na chamada do end-point
case_cicle_key string Obrigatório. Chave do ciclo de testes
case_test_key string Obrigatório. Chave do caso de testes
environment_name string Obrigatório. Ambiente que será executado o ciclo de testes
email string Obrigatório. E-mail usando no horus

Criação da Execução do teste

  POST {BaseURL}/api/createExecutation
Parâmetro Tipo Descrição
API-KEY-HORUS Header Obrigatório. A chave da sua API deve ser passado no header na chamada do end-point
case_cicle_key string Obrigatório. Chave do ciclo de testes
case_test_key string Obrigatório. Chave do caso de testes
result string Obrigatório. Resultado capturado após a execução do teste

Upload da evidência do teste

  POST {BaseURL}/api/createEvidence
Parâmetro Tipo Descrição
API-KEY-HORUS Header Obrigatório. A chave da sua API deve ser passado no header na chamada do end-point
executionId string Obrigatório. Id da execução do criada
attachment string Obrigatório. Arquivo em Base64
extension string Obrigatório. Extensão do arquivo a ser gerado no ato da execução( PNG, TXT)

Configuração e uso

Dentro de cada teste "it" no Cypress, deve adicionar a chave do teste respectivo do Horus

  it('API-T1, displays two todo items by default', () => {
    cy.get('.todo-list li').should('have.length', 3)
    cy.get('.todo-list li').first().should('have.text', 'Pay electric bill')
    cy.get('.todo-list li').last().should('have.text', 'Walk the dog')
  })

Configuração padrão no arquivo cypress.config.js

env: {
    "horus-api": {
        baseUrl: "{URL_BASE_API/api}",
        token: "{token gerado pelo Horus}",
        email: "{email}",
        folder_name: "Automação",
        createdCicleAlways:false/true,
        environmentName:'Dev',
        cicleDefault:'xxx-x01'
    }
  • baseUrl: Url padrão de acesso a API seguido com /api
  • token: Token gerado no Horus deve ser enviado em todas as requisições aos Endpoints no header
  • email: Email usado para acesso ao Horus
  • folder_name: Diretório padrão para armazenar os ciclo de testes criados
  • createdCicleAlways: Parametro true/false, se será criado um novo ciclo em cada execução
  • environmentName: Ambiente padrão onde será criado os ciclos de testes
  • cicleDefault: Com o parâmetro "createdCicleAlways" false deve ser informado uma chave de um ciclo existente

Dentro do metodo "setupNodeEvents", adicionar o seguinte codigo. Será responsável pelo screenshot das telas após cada teste e o arquivo é movido para uma sub-pasta "Horus"

 on('after:screenshot', (details) => {
        const newFolder = 'cypress/screenshots/horus';
        const newName = `${details.name}.png`;
        const newPath = path.join(newFolder, newName);
    
        return fs.move(details.path, newPath, { overwrite: true })
          .then(() => {
            return { path: newPath };
          });
      })

Exemplo de implementação

Criar um arquivo index.js, dentro da pasta de support contendo o conteudo

const TestManagementAPI = require('horus-api-cypress');

const baseURL = Cypress.env('horus-api').baseUrl;
const token = Cypress.env('horus-api').token;
const email = Cypress.env('horus-api').email;
const folder_name = Cypress.env('horus-api').folder_name;
const createCicleAlways = Cypress.env('horus-api').createdCicleAlways;
const environmentName = Cypress.env('horus-api').environmentName;
const cicleDefault = Cypress.env('horus-api').cicleDefault;

const api = new TestManagementAPI(baseURL, token);


afterEach(async function () {
  Cypress.on("uncaught:exception", (err) => {
    throw err;
  });

  const runner = Cypress.mocha.getRunner();
  const resultTest = runner.suite.ctx.currentTest.state;
  const titleTest = runner.suite.ctx.currentTest.title;
  const issueKey = titleTest.substr(0, titleTest.indexOf(",")).trim();
  const currentTest = runner.suite.ctx.currentTest;

  const testOutput = {
    title: currentTest.title,
    state: currentTest.state,
    duration: currentTest.duration,
    error: currentTest.err ? currentTest.err.message : null,
  };


  try {
    let cicleKey =""

    if(createCicleAlways){
      const descriptionCicle = "Ciclo de teste criado via automação";
      const cicleResult = await api.createCicleTest(folder_name, email, descriptionCicle, environmentName);
      cicleKey = cicleResult.cicle.key;
    }else{
      cicleKey = cicleDefault
    }
    const resultAddTest = await api.addCaseTest(cicleKey, issueKey, environmentName, email);
    const resultCreatedExecution = await api.createExecution(cicleKey, issueKey, resultTest)
    console.log("EXECUÇÂO CRIADA:" +JSON.stringify(resultCreatedExecution.execution.id))

    await cy.screenshot(issueKey,{
      capture:"runner",
      overwrite:true,
    }).then(() => {

      const screenshotPath = `cypress/screenshots/horus/${issueKey}.png`;

      cy.readFile(screenshotPath, 'base64').then((imageBase64) => {
        api.sendEvidence(resultCreatedExecution.execution.id, imageBase64,'png').then(response => {
          console.log('Evidência enviada PNG com sucesso:', response);
        }).catch(error => {
          console.error('Erro ao enviar PNG evidência:', error);
        });

        api.sendEvidence(resultCreatedExecution.execution.id, JSON.stringify(testOutput), 'txt').then(response => {
          console.log('Evidência enviada txt com sucesso:', response);
        }).catch(error => {
          console.log('Evidência enviada txt com sucesso:', error);
        });

      });

      
    
    });

  } catch (error) {
    console.error('Erro na operação:', error);
    throw error;
  }
});

Dentro do arquivo e2e.js, adicionar o import do arquivo

import './horus';

Autores

  • Henrique Castro

Readme

Keywords

Package Sidebar

Install

npm i cypress-horus-api

Weekly Downloads

4

Version

0.0.2

License

ISC

Unpacked Size

13.7 kB

Total Files

4

Last publish

Collaborators

  • henrique.avc