Season API Testing - Ep. 01: Testes de API com o Robot Framework


Oláááá Robotizadores!!! Neste post lhes mostrarei outro tipo de teste possível de se automatizar com o Robot Framework: teste de API!!!! Então bora lá... Lembrando que esse post é escrito para quem já sabe como testar uma API, se você ainda não sabe o que é uma API, dá uma pesquisadinha básica antes e pula aqui depois!!



01 - A library Requests

Para automatizar os nossos testes de API, vamos precisar instalar e instanciar a library Requests:

pip install -U robotframework-requests

02 - Estudando as libraries necessárias

Como citei no post sobre libraries (se você não leu ainda, corre lá e depois volta), precisamos estudar a library para conhecer e saber como usar as funções que ela disponibiliza.

Para nosso exemplo utilizo a library Requests para realizar as funções em relação a API e também a Collections para me ajudar nas conferências dos retornos que são JSON. 

Também utilizo a library implícita BuiltIn a qual pertencem as keywords LogSet Test VariableShould Be Equal As Strings.

03 - Criando a sessão com a API

Vamos criar a keyword que irá conectar à API, no meu exemplo chamei de "Conecta ao WebService" e nela usei a keyword da library Requests chamada Create Session e passei como parâmetros um alias para essa minha API e o HOST, que fora declarado na seção Variables:

*** Settings ***
Library RequestsLibrary
Library Collections
*** Variable ***
${HOST} https://webmaniabr.com/api/1/cep
${APP_KEY} njMf2EiyQ17g6C3vLUxk1yEsWTforVqf
${APP_SECRET} EgpTuUcM93IqHY8icgR3cK6Cn4bOlkQwSlfLd6ryMjrhhwMW
*** Keywords ***
Conecta ao WebService
Create Session consultaCEP ${HOST}

04 - Fazendo chamadas à API

A API que utilizo de exemplo realiza consultas de CEP e preciso chamá-la no seguinte padrão:

https://webmaniabr.com/api/1/cep/88056-000/?app_key= njMf2EiyQ17g6C3vLUxk1yEsWTforVqf&app_secret=EgpTuUcM93IqHY8icgR3cK6Cn4bOlkQwSlfLd6ryMjrhhwMW 

Vamos criar a keyword que irá fazer chamadas à API, no meu exemplo chamei de "Realiza requisição do CEP" e nela usei a keyword da library Requests chamada Get Request e passei como parâmetros o alias da sessão criada para essa minha API e o EndPoint:
Realiza requisição do CEP
[Arguments] ${CEP_DESEJADO}
${RESPOSTA}= Get Request consultaCEP /${CEP_DESEJADO}/?app_key=${APP_KEY}&app_secret=${APP_SECRET}
Log Resposta: ${RESPOSTA.text}
Set Test Variable ${RESPOSTA}

A resposta da minha requisição é armazenada na variável ${RESPOSTA} e ela eu configuro para ser uma Test Variable, ou seja, poderei utilizar o seu valor nos demais testes subsequentes. Principalmente nas conferências.

05 - Fazendo as conferências

A API que utilizo como exemplo retorna um JSON, e para conferi-lo utilizo a keyword Dictionary Should Contain Item da library Collections, onde passo o response body em JSON e o valor esperado:
Confere o status code
[Arguments] ${STATUS_ESPERADO}
Should Be Equal As Strings ${RESPOSTA.status_code} ${STATUS_ESPERADO}
Log Status Code Retornado: ${RESPOSTA.status_code} -- Status Code Esperado: ${STATUS_ESPERADO}
Confere endereço do CEP
[Arguments] ${ENDERECO}
Dictionary Should Contain Item ${RESPOSTA.json()} endereco ${ENDERECO}
Confere bairro do CEP
[Arguments] ${BAIRRO}
Dictionary Should Contain Item ${RESPOSTA.json()} bairro ${BAIRRO}
Confere cidade do CEP
[Arguments] ${CIDADE}
Dictionary Should Contain Item ${RESPOSTA.json()} cidade ${CIDADE}
Confere UF do CEP
[Arguments] ${UF}
Dictionary Should Contain Item ${RESPOSTA.json()} uf ${UF}
Confere CEP
[Arguments] ${CEP}
Dictionary Should Contain Item ${RESPOSTA.json()} cep ${CEP}

Também confiro o STATUS CODE através da keyword Should Be Equal As Strings da BuiltIn.

#FICAADICA: Mais detalhes sobre como acessar o conteúdo do RESPONSE da API estão no post [Season API Testing - Ep. 02: Trabalhando com o Response da Requisição]

06 - Exemplo de TestCase

Essa parte é livre, você pode escrever em BDD como eu fiz ou procedural, etc. Aqui é só um exemplo que eu fiz... Se não entendeu esse meu exemplo volta e dá uma lidinha no post sobre BDD!!!

*** Settings ***
Documentation Suíte de Exemplo de testes API com o Robot Framework
Resource BDDpt-br.robot
Resource Resource.robot
*** Test Case ***
Cenário 01: Consulta de endereço existente
Dado que esteja conectado no webservice de consultas de CEP
Quando o usuário consultar o CEP "88056-000"
Então deve ser mostrado o endereço "Avenida Luiz Boiteux Piazza"
E deve ser mostrado o bairro "Cachoeira do Bom Jesus"
E deve ser mostrada a cidade "Florianópolis"
E deve ser mostrada a UF "SC"
E deve ser mostrado o CEP "88056000"
Cenário 02: Consulta de endereço inexistente
Dado que esteja conectado no webservice de consultas de CEP
Quando o usuário consultar o CEP "99999-999"
Então nenhum dado deve ser mostrado para o CEP "99999999"
Claro robotizadores que esses exemplos não estão completos, estou apenas mostrando os trechos importantes para se fazer um teste de API, as instruções restantes já foram ensinadas em outros posts.

Para ver na íntegra esse exemplo, baixe meu projeto de exemplos no GitHub!!!

É isso aí robotizadores!!! Bora praticar testes de API também!!! 

OBS.: Para o exemplo eu utilizei a API REST da WebmaniaBR®  [https://webmaniabr.com/docs/rest-api-correios/].

Comentários

Postagens mais visitadas deste blog

[ATUALIZADO] Season Libraries - Ep. 01: Library Faker para informações aleatórias e fakes

Novo Curso: Robot Framework com Playwright e GitHub Actions

Season API Testing - Ep. 04: "401 unauthorized"  —  Agora é a hora de deixar o Robot entrar