Como Testar Requisições DELETE para Testes de API com Playwright Java

Os testes de API ganharam muito impulso nos últimos dias. Como a interface do usuário não está envolvida, é muito mais fácil e rápido testar. Essa é a razão pela qual o teste de API é considerado a primeira escolha para realizar testes de ponta a ponta do sistema. Integrar os testes automatizados de API com os pipelines de CI/CD permite que as equipes obtenham feedback mais rápido sobre as compilações.

Neste blog, discutiremos e aprenderemos sobre requisições de API DELETE e como tratá-las usando Playwright Java para testes de automação, cobrindo os seguintes pontos:

  1. O que é uma requisição DELETE?
  2. Como você testa APIs DELETE usando Playwright Java?

Introdução

É recomendável que você confira o blog tutorial anterior para aprender sobre os detalhes relacionados a pré-requisitos, configuração, e configuração.

Aplicação em Teste

Usaremos as APIs RESTful de comércio eletrônico que são gratuitas para uso e oferecem várias APIs relacionadas à funcionalidade de gerenciamento de pedidos, permitindo-nos criar, recuperar, atualizar e excluir pedidos.

Esta aplicação pode ser configurada localmente usando Docker ou NodeJS.

O que é uma requisição DELETE?

Uma solicitação de API DELETE exclui o recurso especificado do servidor. Geralmente, não há corpo de resposta nas solicitações DELETE.

O recurso é especificado por um URI, e o servidor o exclui permanentemente. As solicitações DELETE não são consideradas seguras nem idempotentes, pois podem causar efeitos colaterais no servidor, como a remoção de dados de um banco de dados.

As seguintes são algumas das limitações das solicitações DELETE:

  1. Os dados excluídos usando uma solicitação DELETE não são reversíveis, portanto, devem ser tratados com cuidado.
  2. Não é considerado um método seguro, pois pode excluir diretamente o recurso do banco de dados, causando conflitos no sistema.
  3. Não é um método idempotente, o que significa que chamá-lo várias vezes para o mesmo recurso pode resultar em diferentes estados. Por exemplo, na primeira instância, quando o DELETE é chamado, ele retornará o Código de Status 204 informando que o recurso foi excluído, e se o DELETE for chamado novamente no mesmo recurso, pode retornar um 404 NOT FOUND, pois o recurso dado já foi excluído.

O seguinte é um exemplo do endpoint da API DELETE do projeto de e-commerce RESTful.

DELETE /deleteOrder/{id} :  Exclui um Pedido pelo ID

Esta API requer que o order_id seja fornecido como Parâmetro de Caminho para excluir o respectivo pedido do sistema. Não é necessário fornecer um corpo de solicitação nesta solicitação de API DELETE. No entanto, como medida de segurança, o token deve ser fornecido como um cabeçalho para excluir o pedido.

Uma vez que a API é executada, ela exclui o pedido especificado do sistema e retorna o Código de Status 204.

No caso em que o pedido não é encontrado, ou o token não é válido ou não foi fornecido, ele mostrará a seguinte resposta:

Status Code Description
400

Falha ao autenticar o token

404

Nenhum pedido com o order_id fornecido foi encontrado no sistema

403 Token está ausente na solicitação

Como Testar APIs DELETE Usando Playwright Java

Testar APIs DELETE é um passo importante para garantir a estabilidade e confiabilidade da aplicação. A implementação correta das APIs DELETE é essencial para verificar a perda de dados não intencionais e inconsistências, uma vez que as APIs DELETE são responsáveis por remover os recursos do sistema.

Nesta demonstração de teste de APIs DELETE usando Playwright Java, utilizaremos o /deleteOrder/{id} para excluir um pedido existente do sistema.

Cenário de Teste 1:  Excluir um Pedido Válido

  1. Inicie o serviço de e-commerce RESTful.
  2. Usando uma solicitação POST, crie alguns pedidos no sistema.
  3. Exclua o pedido com order_id “1” usando a solicitação DELETE.
  4. Verifique se o Código de Status 204 é retornado na resposta.


Implementação do Teste

Os seguintes passos devem ser realizados para implementar o cenário de teste:

  1. Adicione novos pedidos usando a requisição POST.
  2. Faça uma chamada para a API /auth para gerar o token.
  3. Faça uma chamada para o endpoint da API /deleteOrder/ com o token e o order_id para deletar o pedido.
  4. Verifique se o Código de Status 204 é retornado na resposta.

Um novo método de teste,  testShouldDeleteTheOrder(), é criado na classe de teste existente HappyPathTestsEste método de teste implementa os três passos acima para testar a API DELETE.

Java

 

A API POST /auth será chamada primeiro para gerar o token. O token recebido na resposta é armazenado na variável token para ser utilizado posteriormente na requisição API DELETE.

Em seguida, novos pedidos serão gerados usando o método testShouldCreateNewOrders(), que já foi discutido em o tutorial anterior, onde falamos sobre testar requisições POST usando Playwright Java.

Após os pedidos serem gerados, o próximo passo é fazer a requisição DELETE com o order_id válido que deletaria o pedido específico.


Vamos deletar o pedido com o order_id “1” usando o delete() método fornecido pelo framework Playwright.

Após a exclusão do pedido, o Código de Status 204 é retornado como resposta. Uma asserção será realizada no Código de Status para verificar se a ação de exclusão foi bem-sucedida. Como nenhum corpo de solicitação é retornado na resposta, isso é a única coisa que pode ser verificada.

Execução do Teste

Vamos criar um novo testng.xml chamado testng-restfulecommerce-deleteorders.xml para executar os testes na ordem dos passos que discutimos na implementação do teste.

XML

 

Primeiro, o testShouldCreateNewOrders() método de teste será executado, e ele criará novos pedidos. Em seguida, o testShouldDeleteTheOrder() método de teste será executado para testar a API de exclusão de pedidos.

A seguinte captura de tela da execução do teste realizada usando o IntelliJ IDE mostra que os testes foram executados com sucesso.

Agora, vamos verificar se o pedido foi corretamente excluído escrevendo um novo teste que chamará o endpoint da API GET /getOrder com o order_id excluído.

Cenário de Teste 2:  Recuperar o Pedido Excluído

  1. Exclua um pedido válido com order_id “1.”
  2. Usando a API GET /getOrder, tente recuperar o pedido com order_id “1.”
  3. Verifique se o Código de Status 404 é retornado com a mensagem “Nenhum Pedido encontrado com os parâmetros fornecidos!” na resposta.

Implementação do Teste

Vamos criar um novo método de teste, testShouldNotRetrieveDeletedOrder(), na classe existente HappyPathTests.

Java

 

A implementação do teste para este cenário é bastante simples. Vamos executar a API GET /getOrder para buscar o pedido deletado com order_id “1.”

Uma asserção é aplicada em seguida para verificar se a API GET deve retornar o Código de Status 404 na resposta com a mensagem “Nenhum pedido encontrado com os parâmetros fornecidos!”

Este teste garante que a API de exclusão de pedidos funcionou corretamente e que o pedido foi removido do sistema.

Execução do Teste

Vamos atualizar o arquivo testng.xml e adicionar este cenário de teste no final, após o teste de exclusão.

Java

 

Agora, os três testes devem ser executados em sequência. O primeiro criará pedidos; o segundo excluirá o pedido com order_id “1”; e o último teste acessará a API GET para buscar o pedido com order_id “1” retornando o Código de Status 404.

A captura de tela acima mostra que todos os três testes foram executados com sucesso, e a API DELETE funcionou conforme o esperado.

Resumo

Requisições da API DELETE permitem a exclusão do recurso do sistema. Como a exclusão é uma função importante do CRUD, é fundamental testá-la e verificar se o sistema está funcionando conforme o esperado. No entanto, deve-se notar que a exclusão é um processo irreversível, portanto deve sempre ser usada com cautela.

De acordo com minha experiência, é uma boa abordagem fazer uma chamada GET à API após executar a solicitação DELETE para verificar se o recurso especificado foi excluído do sistema com sucesso.

Boas testes!

Source:
https://dzone.com/articles/test-delete-requests-for-api-testing-with-playwright-java