Back-end: Javascript
API de integração entre o framework de testes Cypress e a ferramenta de gestão de testes Horus
Instale o pacote no seu projeto Cypress
npm i cypress-horus-api
- Criação do ciclo de testes
- Adição dos casos de testes no ciclo informado
- Execução do teste
- Upload de evidências
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 |
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 |
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 |
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) |
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';
- Henrique Castro