Desafio Delivery Much

Apresentação

Este projeto foi desenvolvido afim de entregar a resolução do desafio proposto pela Delivery Much para a posição de QA. E descreve o plano de testes produzido para validar o serviço http://challengeqa.staging.devmuch.io que possui também uma rota para retornos de respostas em inglês http://challengeqa.staging.devmuch.io/en.

É possível encontrar os testes automatizados na pasta test clicando aqui

Execução do projeto

Para executar o projeto é necessário:

  1. Possuir a versão 8 ou superior do Java instalada
  2. Baixar e clonar este repositório em um local desejado
  3. Após abrir o projeto aguarde até que a IDE realize o download de todas as dependências necessárias e disponibilizadas no arquivo pom.xml (Intellij IDEA é recomendado para uma melhor experiência)

Ferramentas utilizadas

IntelliJ IDEA Community Edition

Postman

JSON Schema Tool

Requisitos

Encontre aqui os requisitos e solicitações do projeto.

Plano de Testes

  1. Modelo de Cobertura de Testes
  2. Aderência do contrato JSON
  3. Testes exploratórios

Modelo de Cobertura de Testes

O Modelo de cobertura de testes foi utilizado para identificar e categorizar as suítes de testes através de diferentes níveis de complexidade, sendo o nível 0 o mais fraco e o nível 7 o mais forte/complexo, abaixo segue uma breve explicação de como cada nível é utilizado e o que cada um valida:

Nivel 0: aqui não há cobertura específica para ser realizada.

Nivel 1: possui cobertura bastante fraca, apenas requer conhecimento sobre os paths, sendo assim há 2 caminhos (paths/end points) a serem verificados. Aqui foi validado que é possível fazer uma chamada em cada end caminho para validar seu funcionamento. Logo, 2 caminhos e 1 teste para cada.

Nivel 2: nesse nível todas as operações que estão sendo enviadas ao serviço foram validadas estando de acordo com um dos requisitos disponibilizado. O serviço aceita apenas solicitações via método GET. Desse modo, 2 testes foram realizados, um para cada serviço.

Nivel 3: nesse nível foi validado o tipo de conteúdo (content-type) de minha requisição, como meu escopo declara que apenas requisições via GET são aceitas e não há um corpo a ser enviado junto com a requisição, é possível validar apenas a saída/retorno (output) da minha requisição que deve retornar um JSON. Sendo assim 2 testes são necessários para a validação. Mais adiante será possível visualizar os testes realizados usando o Json Schema assim como sua validação automatizada.

Os nívels de 4 a 6 cobrem os PARÂMETROS

Nivel 4: aqui são validados os parâmetros , tipos de variáveis, campos e os dados a serem enviados. Porém por não haver um corpo para ser enviado na requisição, esse nível cobre apenas o Classe do Código de Status(status code class). Foi definido nos requisitos que apenas dois status code devem ser retornados, 200 AUTHORIZED e 400 BAD REQUEST. Dessa forma, 4 testes são necessários. 2 para cada serviço sendo um de sucesso e outro de falha.

Nivel 5: nesse nível cada Código de Status especificado é validado. Nesse contexto os testes validados no nível 4 validam comportam as validações desse nível.

Nivel 6: aqui o Corpo da Resposta (response body) é checado afim de confirmar que atende ao formato esperado, JSON. A saída precisa estar de acordo com o requisito. Sendo assim temos 2 testes um para cada serviço.

Nivel 7: aqui o fluxo dos serviços são validados, é esperado que se possam testar a comunicação entre os serviços. Como não há dependência ou integração direta entre os dois ou com uma interface de usuário que exiba os valores obtidos nos outputs. Dessa forma, não é possível realizar esse nível.

Desse modo, temos:

Nivel Input Criteria Output Criteria Number of Tests
0 - - -
1 - Paths 2 2 2
2 - Operações 2 2 2
3 - Content-type 2 2 2
4 - Status Code Class 2 2 4
5 - Status Code - - -
6 - Response Body 2 2 2
7 - Operation Flows - - -

Desse modo, 12 testes foram necessários para atingir um maior nível de cobertura de testes.

Inconsistências/Bugs

Após a realização de testes exploratórios, 3 bugs foram encontrados. Abaixo as respectivas descrições e evidências anexadas.

#bug01

Descrição:

Ao fazer uma requisição via GET no serviço que retorna respostas em inglês enviando o número -10000 (menos dez mil), a resposta é exibida fora do formato definido pelo contrato JSON. O Correto seria ""full": "minus ten thousand"

#bug02

Descrição:

Ao fazer uma requisição via GET no serviço que retorna respostas em português enviando o número 10000 (dez mil), o número por extenso é retornado na língua inglesa.

#bug03

Descrição:

Ao fazer uma requisição via GET no serviço que retorna respostas em inglês enviando o número -10001 (menos dez mil e um), o status code exibido é o 401 UNAUTHORIZED. O correto de acordo com o contrato seria 400 BAD REQUEST.