Aprenda como escrever testes de API com Cypress rodando um comando curl
Um dia desses, enquanto explorava a plataforma do coursify.me (onde hospedo alguns de meus cursos online), me deparei com sua API (Application Programming Interface).
A API do coursify.me é bastante simples, a qual disponibiliza buscar todos meus cursos, ou buscar por um curso específico (através de seu ID).
Nos exemplos da documentação do coursify.me, percebi que:
- Para realizar tais requisições, preciso estar autorizado
- E posso fazê-las utilizando um comando curl.
Daí pensei comigo mesmo.
Isso daria um bom experimento com Cypress se eu utilizasse o comando cy.exec().
Então criei o seguinte código, o qual vou te explicar logo abaixo.
describe('API testing using cy.exec()', () => { const curlCommand = `curl -H "Authorization: ${Cypress.env('AUTHORIZATION_TOKEN')}" -H "Content-Type: application/json" https://api.coursify.me/v1/courses` it('GET /courses', () => { cy.exec(curlCommand) .should(({ stdout }) => { const obj = JSON.parse(stdout) const { data } = obj expect(data.length).to.eq(7) data.forEach(item => { const { currency_symbol, is_active, is_archived } = item expect(currency_symbol).to.eq('R$') expect(is_active).to.eq(true) expect(is_archived).to.eq(false) }) }) }) })
Primeiro, descrevo minha suíte de testes (o bloco describe).
Então, dentro da função de callback do bloco describe, defino a variável curlCommand, onde uso a funcionalidade template literals do JavaScript, para interpolar uma string com uma expressão JavaScript, a qual obtém um dado sensível (meu token de autorização).
Daí então defino meu caso de teste (o bloco it).
Na função de callback do bloco it, executo o comando cy.exec() do Cypress, passando-o como argumento o comando previamente definido na variável curlCommand.
Então, encadeio ao comando cy.exec() o comando .should(), o qual recebe como argumento uma função.
Como argumento de tal função, passo o standard output (stdout), desestruturando tal valor da resposta da requisição.
Visto que a saída padrão (standard output) é uma string, transformo-a em um objeto (obj) com o uso da função parse do módulo JSON.
Agora que tenho um objeto (obj), desestruturo do mesmo a propriedade data, a qual possui as informações que preciso para minhas verificações de resultado esperado (minhas assertions).
A primeira verificação é de que o comprimento (length) da propriedade data é 7 (o número que cursos que possuo na plataforma do coursify.me).
Depois, itero sobre cada item da propriedade data (a qual é um Array) com o uso da função .forEach(), onde para cada item, desestruturo as propriedades currency_symbol, is_active e is_archived.
Por fim, verifico que cada item (curso) possui como currency_symbol (símbolo de moeda) o valor R$, além de verificar que cada curso está ativo (is_active igual a true) e não está arquivado (is_archived igual a false).
Abaixo segue um exemplo do arquivo cypress.env.json, o qual define o token de autorização (dado sensível não versionado).
{ "AUTHORIZATION_TOKEN": "53cRe7-hER3" }
E é assim que consigo realizar um teste de API com Cypress executando um comando curl com o uso do comando cy.exec().
Gostou dessa “pitada de Cypress”?
Deixa um comentário.
Ficou curioso(a) e quer aprender mais sobre automação de testes com Cypress? Conheça meus cursos no Udemy.
- Cypress básico
- Cypress intermediário
- Cypress avançado
- Boas práticas em automação de testes com Cypress
- Testes end-to-end com Cypress
- Testes de regressão visual com Cypress e Percy (básico)
👋 Até a próxima e bons testes!
Um comentário em “Realizando requisições curl utilizando o comando cy.exec() do Cypress”