Aprenda como testar APIs com Cypress, quando um access token é necessário

O Cypress é uma excelente ferramenta para os mais diversos tipos de testes automatizados.

Dentre esses tipos de testes, facilmente é possível criar e executar testes de API com Cypress.

Para tais testes, o Cypress oferece a funcionalidade cy.request().

Mas e o que fazer quando a API que preciso testar necessita de um token de acesso? 🔐

Que bom que perguntou.

Aí vai um exemplo, utilizando a API do Typeform, a qual exige tal token.

Para este exemplo, irei mostrar um requisição do tipo GET, para buscar minhas informações, porém, o mesmo se aplica para outros tipos de requisições, tais como POST, PUT, ou DELETE.

// cypress/integration/typeformAPI.spec.js



const API_URL = Cypress.env('API_BASE_URL')

const authorization = `Bearer ${Cypress.env('ACCESS_TOKEN')}`



it('retrieves my user information', () => {
  cy.request({
    method: 'GET',
    url: `${API_URL}/me`,
    headers: { authorization }

  }).should(({ status, body }) => {

    const { alias, email, language } = body

   

    expect(status).to.eq(200)
    expect(alias).to.eq('Walmyr Filho')
    expect(email).to.eq('walmyr@example.com')
    expect(language).to.eq('en')

  })

})

No teste acima, primeiro defino duas variáveis (API_URL e authorization), ambas vindo de variáveis, sendo a primeira definida no arquivo cypress.json (ver mais abaixo) e a outra no arquivo cypress.env.json (arquivo não versionado, visto que é onde armazeno dados sensíveis, tais como o ACCESS_TOKEN).

Note que para a variável authorization, à estou interpolando com a string Bearer, visto que é esse tipo de token que a API do Typeform utiliza.

Logo após, defino o teste que obtém as informações do meu usuário, em um bloco it (meu caso de teste).

Na função de callback do bloco it, executo o comando cy.request(), o qual, neste caso, recebe como argumento um objeto, com as propriedades methodurlheaders, com seus respectivos valores, onde no caso dos cabeçalhos (headers) passo a variável que define o token de acesso.

Com a requisição realizada, encadeio o comando .should(), o qual recebe uma função de callback como argumento, e para tal função de callback, passo como argumento as propriedades status e body a partir do objeto de resposta da requisição, por meio de desestruturação de objetos.

No corpo da função de callback, desestruturo as propriedades alias, email e language a partir da propiedade body, visto que estes são os valores os quais usarei para minhas verificações de resultado esperado (além do status).

Por fim, verifico que o status da requisição é de sucesso (200), além de verificar que os valores das variáveis alias, email e language são iguais aos valores esperados (Walmyr Filho, walmyr@example.com e en, respectivamente).

Veja também a definição dos arquivos cypress.json e cypress.env.json (este com um token de acesso exemplo, visto que é um dado sensível).

// cypress.json



{

  "env": {

    "API_BASE_URL": "https://api.typeform.com"

  }

}
// cypress.env.json



{

  "ACCESS_TOKEN": "token-de-acesso-aqui"

}

É assim que passo o token de acesso nos headers da requisição, para ter as permissões necessárias para fazer as chamadas à API.


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!

6 comentários em “Como testar APIs que necessitam um token de acesso com Cypress

  1. Achei interessante que você busca variáveis de ambiente em dois arquivos diferentes (cypress.json e cypress.env.json) usando o mesmo método (Cypress.env()) e o Cypress retorna sem problema algum. =)

  2. Ótimo conteúdo, preciso me aprofundar em testes de API, por isso tenho uma dúvida, quanto ao token de acesso, da forma que colocou ele é único, certo? E no caso da necessidade de gerar um novo token a cada longIn, por exemplo, há a possibilidade de fazer essa alteração na variável que armazena o token?

    1. Neste caso, recomendo fazer uma requisição que gera o token e à ela encadeie um .then que recebe uma função de callback. Daí, nesta função de callback vice faz a próxima requisição, usando o token recém gerado.

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 )

Foto do Facebook

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

Conectando a %s