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
Para executar o projeto é necessário:
- Possuir a versão 8 ou superior do Java instalada
- Baixar e clonar este repositório em um local desejado
- 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)
IntelliJ IDEA Community Edition
Encontre aqui os requisitos e solicitações do projeto.
- Modelo de Cobertura de Testes
- Aderência do contrato JSON
- 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.
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.
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.