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().

Veja o código completo no GitHub, com mais dois testes (um que testa uma requisição do tipo GET para um curso grátis e outro que testa uma requisição do tipo GET para um curso pago).
Aproveita pra deixar uma star!

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.


👋  Até a próxima e bons testes!

Um comentário em “Realizando requisições curl utilizando o comando cy.exec() do Cypress

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s