cypress-horus-api
v0.0.2
Published
Api para integração entre o Horus e Cypress
Downloads
8
Readme
Etiquetas
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