/RobotFramework_Testes

Repositório utilizado para armazenar testes realizados com o Robot Framework para a API ServeRest.

Primary LanguageHTMLMIT LicenseMIT

Testes desenvolvidos para a ServeRest API

NPM Badge ServeRest

  • Este repositório é composto por testes desenvolvidos com o Robot Framework para a API ServeRest.
  • Os testes que compõem esse projeto foram escritos através da IDE VS Code.
  • A ferramenta Git foi usada para transformar o projeto em um repositório e depois armazená-lo no GitHub.

Lily Aldrin de HIMYM Características do Projeto

Este projeto é composto por um conjunto de testes para os endpoints da API ServeRest.

Os arquivos desenvolvidos para este projeto estão organizados da seguinte forma:

Pasta Descrição
keywords Arquivos onde foram desenvolvidas as Keywords dos Test Cases para cada endpoint.
midia Pasta que contém os arquivos de imagem utilizados no presente documento.
outros Composta por mapas mentais e uma lista dos Test Cases desenvolvidos.
support Contém o arquivo base.robot que é utilizado para setar as bibliotecas e arquivos importados para o projeto inteiro.
common Pasta composta pelos arquivos com keywords e funções utilizadas por mais de um ou todos os arquivos de Test Cases.
fixtures Armazena os arquivos de massa de dados, estáticas e dinâmicas.
variaveis Contém um arquivo apenas para setar as variáveis utilizadas ao longo do projeto.
tests Aqui é onde encontramos os casos de teste do projeto (tanto positivos quanto negativos). Cada Endpoint tem seu arquivo específico.

Além dos arquivos encontrados em pastas, no escopo global do projeto encontramos a licence utilizada e o documento que você está lendo!

Por último, também desenvolvi mapas mentais com base na API Serverest. O primeiro mapa foi feito a partir da documentação dessa API, e mostra todos os Status Codes e retornos documentados para cada tipo de requisição.

Porém, durante o desenvolvimento dos testes, percebi alguns bugs em relação à documentação. Algumas requisições não retornam as mensagens documentadas e, em outros casos, o Status Code esperado de acordo com a documentação não é o mesmo retornado pela API. Com base nisso, após finalizar todos os casos de teste, desenvolvi outro mapa mental com base no que a API entrega:

Os arquivos correspondentes aos mapas mentais acima podem ser encontrados na pasta outros juntamente com o arquivo que lista todos os Casos de Teste desenvolvidos.

Marshall de HIMYM Como criar uma cópia desse projeto

Para obter uma cópia desse projeto em sua máquina local, siga os passos abaixo:

  1. Crie um Fork desse projeto no seu perfil do GitHub
  2. Instale a IDE de sua preferência* que seja compatível com a linguagem Python (Aqui estão algumas opções).
  3. Instale a versão do Git compatível com seu sistema operacional.
  4. Depois de configurar o Git em sua máquina, rode o seguinte código:
$ git clone https://github.com/BeatrizJardimm/RobotFramework_Testes.git

Agora você tem uma cópia dos exercícios em sua máquina! :)

*Eu utilizei o VS CODE, e a partir desse artigo ou desse vídeo você pode configurar tal IDE pra executar arquivos na linguagem Python.

Configuração do VSCode

Como já foi dito anteriormente, utilizei a IDE VSCode para desenvolver esse projeto, e algumas extensões dessa IDE foram indispensáveis para a organização e o realçamento do código. Recomendo o uso destas extenções para facilitar o desenvolvimetno deste e de outros projetos, segue uma lista com todas as extensões utilizadas:

  • Robot Framework Intellisense
  • Python (Intellisense oficial)
  • Hyper Term Theme
  • Material Icon Theme
  • Rainbow Brackets
  • Tabnine AI autocomplete

Barney Stinson de HIMYM Como rodar o projeto

Primeiramente, você precisa ter o Python instalado em sua máquina (estou usando a versão 3.8.2).
Depois disso, instale o Node.js na versão LTS.
Para verificar se ambos foram instalados corretamente, é só abrir seu console e entrar com os comandos python -v e node -v, assim você verifica qual é a versão na qual foram instalados.

Agora, para instalar o Robot Framework para Windows, vamos utilizar o pip install do Python, então, abra novamente seu Prompt de Comando e entre com pip install robotframework.
Caso seu sistema operacional não seja Windows, você pode encontrar o modo de instalação correto para sua máquina através desse link.
Rode robot --version para verificar se este framework foi instalado corretamente e qual é a sua versão.

Nesse projeto, utilizamos algumas libraries do Robot Framework e, para instalar essas bibliotecas, entre com os seguintes comandos em seu console:
pip install robotframework-browser
pip install robotframework-requests
pip install robotframework-faker
Tenha em mente que todas essas libraries são essenciais e, caso alguma delas não esteja devidamente instalada, o projeto não será executável.

Agora, abra o Prompt de Comando de seu computador e rode o código npx serverest para alocar a API trabalhada nesse projeto em sua máquina local.
Quando você rodar esse código pela primeira vez, a API Serverest será instalada, porém você PRECISA rodar esse comando toda vez que for realizar algum teste, pois é a partir dele que a API é inicializada. Os testes não irão funcionar se esse comando não for rodado. Além disso, esse prompt deve permanecer aberto durante o tempo de execução dos testes.

Durante a execução dos testes, o console deve ficar parecido com o da imagem abaixo:

Depois disso, em outro Prompt de Comando, entre com o caminho para o arquivo de teste que você deseja rodar e, quando esse caminho estiver correto, para rodar o arquivo você deve entrar com:
robot -d ./reports nome_arquivo.robot
Para exemplificar, abaixo temos uma imagem do console com o comando para rodar os testes do endpoint /login:

Além disso, caso você queira rodar apenas um caso de teste específico, sem precisar rodar todos os Test Cases do arquivo, você pode digitar robot -d ./reports -i tag nome_arquivo.robot no seu console, onde "tag" deve ser substituido pela tag do Test Case que você deseja rodar. As tags de um Test Case podem ser encontradas tanto no arquivo de Casos de Teste quanto na primeira linha de um Test Case, como no exemplo abaixo:

Neste caso, o comando que você deve digitar em seu console é
robot -d ./reports -i LOGIN200 login_testes.robot

Ao rodar os testes no console, o retorno será algo parecido com:

Onde a primeira e última linhas apresentam o nome do Test Case, a mensagem de retorno é aquela retornada pela API e o Status Code retornado também é enviado pela API. Caso esses retornos sejam compatíveis com o esperado pelo Test Case em questão, recebemos em verde a mensagem PASS, como é visto na imagem, caso contrário, em vez disso teremos a mensagem FAIL em vermelho.

A partir disso, você pode realizar testes em qualquer endpoint para o tipo de requisição de sua escolha!

Ted Mosby de HIMYM Bugs

Ao longo do processo de desenvolvimento, encontrei alguns bugs relacionados à documentação da API:

  • Na documentação, o Endpoint /login apresenta status de erro 400, porém, se tentarmos realizar os testes esperando esse status de retorno, vamos encontrar um erro, pois na verdade o status que está sendo retornado é 401, então, para contornar a situação, eu adaptei o código para esperar o status 401 como retorno.

  • Outro bug que encontrei no endpoint /login foi que o erro 400 não está documentado, porém se tentarmos realizar um login com um usuário sem email ou sem senha, esse erro é retornado acompanhado da mensagem "email/password não pode ficar em branco", então criei casos de testes para ambos os casos.

  • Além disso, na requisição POST do endpoint /usuarios e de /produtos acontece a mesma coisa, então criei os testes para esses erros apesar deles não serem referenciados na documentação.

  • Por último, na requisição DELETE de /carrinhos/cancelar-compra a documentação mostra as mensagens "Registro excluído com sucesso | Não foi encontrado carrinho para esse usuário" como possibilidades de retorno, porém quando testamos excluir um carrinho que existe o retorno é "Registro excluído com sucesso. Estoque dos produtos reabastecido"

Ranjit de HIMYM Reports

Nessa seção, criei uma tabela para cada endpoint que lista todos os casos de teste desenvolvidos no endpoint em questão, mostrando qual é o retorno esperado desse teste (com base na documentação) e o que o teste realmente retornou. A coluna "Etiqueta" apresenta um quadrado na cor verde para quando o retorno do teste é o mesmo que o retorno esperado e em vermelho para os casos contrários.

  • /login
Etiqueta Objetivo do Teste Resultado Esperado Resultado Obtido
#c5f015 POST - Sucesso no login Status Code: 200
"message": "Login realizado com sucesso" e Token de Acesso
Status Code: 200
"message": "Login realizado com sucesso" e Token de Acesso
#f03c15 POST - Realizar login sem email Não Documentado Status Code: 400
"email": "email não pode ficar em branco"
#f03c15 POST - Realizar login sem senha Não Documentado Status Code: 400
"password": "password não pode ficar em branco"
#f03c15 POST - Email Inválido Status Code: 400
"message": "Email e/ou senha inválidos"
Status Code: 401
"message": "Email e/ou senha inválidos"
#f03c15 POST - Senha Inválida Status Code: 400
"message": "Email e/ou senha inválidos"
Status Code: 401
"message": "Email e/ou senha inválidos"
  • /usuarios
Etiqueta Objetivo do Teste Resultado Esperado Resultado Obtido
#c5f015 GET - Listar usuários cadastrados Status Code: 200
Lista com todos os usuários
Status Code: 200
Lista com todos os usuários
#c5f015 GET - Buscar usuário por ID Status Code: 200
Cadastro do Usuário
Status Code: 200
Cadastro do Usuário
#c5f015 GET - Buscar ID de usuário que não existe Status Code: 400
"message": "Usuário não encontrado"
Status Code: 400
"message": "Usuário não encontrado"
#c5f015 POST - Cadastrar usuário Status Code: 201
"message": "Cadastro realizado com sucesso" e ID gerada para o usuário
Status Code: 201
"message": "Cadastro realizado com sucesso" e ID gerada para o usuário
#c5f015 POST - Cadastrar usuário com Email já cadastrado Status Code: 400
"message": "Este email já está sendo usado"
Status Code: 400
"message": "Este email já está sendo usado"
#f03c15 POST - Cadastrar usuário sem email Não Documentado Status Code: 400
"email": "email não pode ficar em branco"
#f03c15 POST - Cadastrar usuário sem senha Não Documentado Status Code: 400
"password": "password não pode ficar em branco"
#c5f015 PUT - Editar usuário Status Code: 200
"message": "Registro alterado com sucesso"
Status Code: 200
"message": "Registro alterado com sucesso"
#c5f015 PUT - Criar um usuário Status Code: 201
"message": "Cadastro realizado com sucesso" e ID do novo usuário
Status Code: 201
"message": "Cadastro realizado com sucesso" e ID do novo usuário
#c5f015 PUT - Editar para um Email já cadastrado Status Code: 400
"message": "Este email já está sendo usado"
Status Code: 400
"message": "Este email já está sendo usado"
#c5f015 DELETE - Excluir usuário Status Code: 200
"message": "Registro excluído com sucesso"
Status Code: 200
"message": "Registro excluído com sucesso"
#c5f015 DELETE - Excluir usuário que não existe Status Code: 200
"message": "Nenhum registro excluído"
Status Code: 200
"message": "Nenhum registro excluído"
#c5f015 DELETE - Excluir usuário com carrinho cadastrado Status Code: 400
"message": "Não é permitido excluir usuário com carrinho cadastrado" e ID do Carrinho
Status Code: 400
"message": "Não é permitido excluir usuário com carrinho cadastrado" e ID do Carrinho
  • /produtos
Etiqueta Objetivo do Teste Resultado Esperado Resultado Obtido
#c5f015 GET - Listar produtos cadastrados Status Code: 200
Lista com todos os produtos
Status Code: 200
Lista com todos os produtos
#c5f015 GET - Buscar produto por ID Status Code: 200
Cadastro do Produto
Status Code: 200
Cadastro do Produto
#c5f015 GET - Buscar ID de produto que não existe Status Code: 400
"message": "Produto não encontrado"
Status Code: 400
"message": "Produto não encontrado"
#c5f015 POST - Cadastrar produto Status Code: 201
"message": "Cadastro realizado com sucesso" e ID gerada para o produto
Status Code: 201
"message": "Cadastro realizado com sucesso" e ID gerada para o produto
#c5f015 POST - Cadastrar produto com nome que já existe Stauts Code: 400
"message": "Já existe produto com esse nome"
Stauts Code: 400
"message": "Já existe produto com esse nome"
#f03c15 POST - Cadastrar produto sem nome Não Documentado Status Code: 400
"nome": "nome não pode ficar em branco"
#f03c15 POST - Cadastrar produto com preço inválido Não Documentado Status Code: 400
"preco": "preco deve ser um número"
#c5f015 POST - Token Ausente Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 POST - Token Inválido Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 POST - Token Expirado Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 POST - Token de usuário que não existe mais Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 POST - Rota exclusiva para administradores Status Code: 403
"message": "Rota exclusiva para administradores"
Status Code: 403
"message": "Rota exclusiva para administradores"
#c5f015 PUT - Editar produto Status Code: 200
"message": "Registro alterado com sucesso"
Status Code: 200
"message": "Registro alterado com sucesso"
#c5f015 PUT - Criar um produto Status Code: 201
"message": "Cadastro realizado com sucesso" e a ID do novo produto
Status Code: 201
"message": "Cadastro realizado com sucesso" e a ID do novo produto
#c5f015 PUT - Editar para um nome já cadastrado Status Code: 400
"message": "Já existe produto com esse nome"
Status Code: 400
"message": "Já existe produto com esse nome"
#c5f015 PUT - Token Ausente Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 PUT - Token Inválido Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 PUT - Token Expirado Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 PUT - Token de usuário que não existe mais Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 PUT - Rota exclusiva para administradores Status Code: 403
"message": "Rota exclusiva para administradores"
Status Code: 403
"message": "Rota exclusiva para administradores"
#c5f015 DELETE - Excluir produto Status Code: 200
"message": "Registro excluído com sucesso"
Status Code: 200
"message": "Registro excluído com sucesso"
#c5f015 DELETE - Excluir produto que não existe Status Code: 200
"message": "Nenhum registro excluído"
Status Code: 200
"message": "Nenhum registro excluído"
#c5f015 DELETE - Excluir produto que faz parte de carrinho Status Code: 400
"message": "Não é permitido excluir produto que faz parte de carrinho" e a ID do carrinho
Status Code: 400
"message": "Não é permitido excluir produto que faz parte de carrinho" e a ID do carrinho
#c5f015 DELETE - Token Ausente Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 DELETE - Token Inválido Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 DELETE - Token Expirado Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 DELETE - Token de usuário que não existe mais Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 DELETE - Rota exclusiva para administradores Status Code: 403
"message": "Rota exclusiva para administradores"
Status Code: 403
"message": "Rota exclusiva para administradores"
  • /carrinhos
Etiqueta Objetivo do Teste Resultado Esperado Resultado Obtido
#c5f015 GET - Listar carrinhos cadastrados Status Code: 200
Lista com todos os carrinhos
Status Code: 200
Lista com todos os carrinhos
#c5f015 GET - Buscar carrinho por ID Status Code: 200
Cadastro do carrinho
Status Code: 200
Cadastro do carrinho
#c5f015 GET - Buscar ID de carrinho que não existe Status Code: 400
"message": "Carrinho não encontrado"
Status Code: 400
"message": "Carrinho não encontrado"
#c5f015 POST - Cadastrar carrinho Status Code: 201
"message": "Cadastro realizado com sucesso" e a ID gerada para o carrinho
Status Code: 201
"message": "Cadastro realizado com sucesso" e a ID gerada para o carrinho
#f03c15 POST - Cadastrar um carrinho vazio Não Documentado Status Code: 400
"produtos": "produtos não contém 1 valor obrigatório"
#c5f015 POST - Cadastrar produto duplicado no carrinho Status Code: 400
"message": "Não é permitido possuir produto duplicado"
Status Code: 400
"message": "Não é permitido possuir produto duplicado"
#c5f015 POST - Cadastrar mais de 1 carrinho para o mesmo usuário Status Code: 400
"message": "Não é permitido ter mais de 1 carrinho"
Status Code: 400
"message": "Não é permitido ter mais de 1 carrinho"
#c5f015 POST - Cadastrar produto inexistente no carrinho Status Code: 400
"message": "Produto não encontrado"
Status Code: 400
"message": "Produto não encontrado
#c5f015 POST - Cadastrar mais produtos no carrinho do que a quantidade do estoque Status Code: 400
"message": "Produto não possui quantidade suficiente"
Status Code: 400
"message": "Produto não possui quantidade suficiente"
#c5f015 POST - Token Ausente Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 POST - Token Inválido Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 POST - Token Expirado Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 POST - Token de usuário que não existe mais Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 DELETE - Concluir compra Status Code: 200
"message": "Registro excluído com sucesso"
Status Code: 200
"message": "Registro excluído com sucesso"
#c5f015 DELETE - Concluir compra de um carrinho que não existe Status Code: 200
"message" : "Não foi encontrado carrinho para esse usuário"
Status Code: 200
"message" : "Não foi encontrado carrinho para esse usuário"
#c5f015 DELETE - Concluir compra com token ausente Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 DELETE - Concluir compra com token inválido Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 DELETE - Concluir compra com token expirado Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 DELETE - Concluir compra com token de usuário que não existe mais Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#f03c15 DELETE - Cancelar compra Status Code: 200
"message": "Registro excluído com sucesso"
Status Code: 200
"message": "Registro excluído com sucesso. Estoque dos produtos reabastecido"
#c5f015 DELETE - Cancelar compra de um carrinho que não existe Status Code: 200
"message" : "Não foi encontrado carrinho para esse usuário"
Status Code: 200
"message" : "Não foi encontrado carrinho para esse usuário"
#c5f015 DELETE - Cancelar compra com token ausente Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 DELETE - Cancelar compra com token inválido Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 DELETE - Cancelar compra com token expirado Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
#c5f015 DELETE - Cancelar compra com token de usuário que não existe mais Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"
Status Code: 401
"message": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais"

Considerações Finais

Prontinho! Com base nas informações desse documento, agora você é capaz de acessar, modificar e compartilhar esse projeto!

Personagens comemorando

Gostaria de agradecer ao Demétrio Webber, pois eu não teria conseguido concluir (nem começar) esse projeto sem as aulas dele e orientações do Matheus Locatelli.
Também quero dar os devidos créditos aos meus colegas Amanda Bressam e Ney Backes que, além de desenvolverem os seus próprios projetos, me ajudaram com algumas ideias de casos de testes e refinamento de código. Muito obrigada a todos vocês! :)


Além disso, também encontrei soluções para algumas ideias nas documentações das Libraries utilizadas, essas referências se encontram abaixo:

Robin de HIMYM Autora

Meu perfil no GitHub.
Meu perfil no LinkedIn.