rest api testing with cucumber using bdd approach
Este tutorial explica o teste da API REST com o Cucumber usando a abordagem BDD. Abrange instalação de software, configuração de projeto, execução de TestScript e relatórios.
Neste artigo, veremos como começar a usar o teste de API REST no estilo BDD com a estrutura Cucumber.
Antes de nos aprofundarmos no assunto, vamos entender os conceitos importantes envolvidos nele.
Vamos começar!!
O que você aprenderá:
- Conceitos importantes na API REST
- Como funciona o pepino?
- Configurando o Cucumber Test Framework no Windows
- Conclusão
- Leitura recomendada
Conceitos importantes na API REST
RESTO
Este é um estilo de arquitetura de software. A forma completa de REST é transferência de estado representacional . Ele define um conjunto de restrições a serem usadas para criar serviços da web. Os serviços da Web que estão em conformidade com o estilo de arquitetura REST são chamados de serviços da Web RESTful.
Teste de API REST
O teste da API REST é o teste da API usando 4 métodos principais, ou seja, POST, GET, PUT e DELETE.
Modelo REST
RestTemplate é uma classe de estrutura spring de código aberto que fornece uma maneira conveniente de testar os serviços da web restful baseados em HTTP, fornecendo métodos sobrecarregados para os métodos HTTP.
Observação : Para saber mais sobre o conceito de Teste de API REST, você pode consultar nosso tutorial anterior ‘ Teste de API REST com Spring RestTemplate e TestNG 'Onde cobrimos como realizar testes de API REST manualmente, juntamente com o conceito de JSON.
BDD
BDD é a abordagem de Desenvolvimento Orientado por Comportamento. Esta é uma das técnicas de desenvolvimento de software que emergiu do Desenvolvimento Orientado a Testes, ou seja, estilo TDD.
O princípio do teste BDD é que os casos de teste são escritos em uma linguagem natural que é facilmente legível por não programadores também.
Pepino
Cucumber é uma ferramenta que oferece suporte ao desenvolvimento orientado por comportamento
Como funciona o pepino?
Vamos ver como funciona o Cucumber.
Cucumber consiste em arquivos de recursos, arquivos de definição de etapas e classe Runner.
Arquivos de recursos
Os arquivos de recursos são escritos por seu analista de negócios ou talvez seu patrocinador. Estes são escritos em formato de linguagem natural com especificações descritas nele e validam que as funções do aplicativo de acordo com as especificações.
Essas especificações têm vários cenários ou exemplos mencionados. Cada cenário é uma lista de certas etapas para Cucumber trabalhar.
Vamos considerar um cenário em que o usuário deseja efetuar login no sistema.
Para verificar se está funcionando de acordo com as especificações, este cenário precisa ser descrito. Aqui estão as etapas a serem executadas juntamente com o resultado desejado de acordo com as especificações.
Só para se ter uma ideia, é assim que um cenário de exemplo será:
Scenario: Login to the system Given User launches Login screen When User enters username, password and submit Then Login Successful message appears
Você pode ver que cada cenário é uma espécie de lista das etapas para Cucumber trabalhar. Para Cucumber entender os cenários, eles devem seguir algumas regras básicas de sintaxe, chamadas Maxixe .
Arquivos de definição de etapas
Os arquivos de definições de etapa mapeiam cada etapa do Gherkin mencionada em um arquivo de recurso para o código de implementação. Isso permite que o Cucumber execute a ação que deve ser executada pela etapa.
A estrutura Cucumber oferece suporte a muitas linguagens de programação para escrever definições de Step como Java, .net e Ruby.
Observação : No artigo ' Teste de API REST com Spring RestTemplate e TestNG ’, Desenvolvemos o projeto de teste TestNG com o modelo Spring.
Agora, desenvolveremos o Test Framework para o mesmo serviço REST e RestTemplate, mas usando Cucumber para o estilo de teste de desenvolvimento orientado por comportamento.
Vamos começar com a configuração de nossa estrutura de teste de automação com Cucumber!
Configurando o Cucumber Test Framework no Windows
# 1) Instalação
(eu) Vamos usar Java para desenvolvimento de definição de etapas. Portanto, primeiro baixe o instalador JDK para Windows em Oráculo e instale o Java em sua máquina.
(ii) IDE (Ambiente de Desenvolvimento Integrado) : Eu usei o Eclipse como um IDE para meu desenvolvimento de pacote de teste de automação. Você pode baixá-lo de Eclipse
(iii) Obtenha o Plug-in Eclipse para Cucumber:
Siga estas etapas no Eclipse:
- Selecione Ajuda -> Instalar Novo Software na opção de menu.
- Digitar ‘Cucumber Eclipse’ na caixa de texto de pesquisa.
- Clique no Instalar botão.
Instalação do plug-in Cucumber no Eclipse
- Continue clicando no botão Próximo até chegar ao Rever licença tela.
Por fim, clique na caixa de seleção para aceitar o Contrato de Licença e clique no Terminar botão. Isso irá completar a instalação. Agora, reinicie o IDE Eclipse. Isso é necessário para que a instalação do plug-in tenha efeito.
(iv) Jarros de Primavera: Como vamos usar a classe RestTemplate que pertence ao framework spring, você precisa ter jars de framework spring. Você pode baixar potes de primavera no Spring Framework e salve-o na pasta local. Por exemplo, C: / projectJar
(v) JSON-Jars simples: Precisamos realizar a análise JSON. Portanto, usaremos uma API simples JSON leve. Então, baixe JSON-simple-1.1.jar e salve-o em C: / projectJar
(vi) Jarras de pepino:
Você precisaria dos seguintes potes Cucumber para executar o projeto Cucumber:
- caroço de pepino
- pepino-java
- pepino-JUnit
- pepino-JVM-deps
- relato de pepino
- pepino
- JUnit
- mockito-all
- cobertura
- pepino-HTML (Para relatórios em html)
Você pode baixar esses arquivos usando o arquivo pom.xml. Mas, a maneira mais simples é baixar esses arquivos jar do Repositório central e salve esses arquivos jar na pasta local, Por exemplo, C: / projectJar
Agora, com isso, concluímos todas as instalações necessárias. Então, vamos criar nosso projeto BDD Test Automation.
# 2) Configuração do projeto
- Criar Arquivo -> Novo -> Projeto Java -> Nomeie como ‘ CRUD_Cucumber ’.
- Agora, crie um novo pacote Java demo.
- Configure BuildPath do projeto:
- Como você viu na seção anterior, instalamos o plug-in Cucumber, baixamos o Spring e jars JSON simples. Então, é hora de adicionar o caminho de construção em nosso projeto para consumi-los. Para isso, crie um lib pasta em Pasta CRUD_Cucumber ' e agora copie todos os jars do C: / projectJar para lib / Cucumber, lib / Spring pasta.
- Clique com o botão direito em ‘ CRUD_Cucumber ’ -> Caminho de construção -> Configurar caminho de construção.
- Clique no Bibliotecas aba.
- Clique em Adicionar jarras botão-> Selecione todos os jars do lib / pepino pasta e lib / Spring pasta. Isso adicionará todos os potes de pepino, potes de mola e jarros JSON simples ao caminho de construção do projeto.
A estrutura do seu projeto será exibida da seguinte forma no Eclipse Package Explorer.
Estrutura do pacote do projeto de teste
# 3) Arquivo de recurso
Agora, vamos construir nosso arquivo de recursos DemoFeature.feature tendo o recurso como Executando operações CRUD no serviço do funcionário.
Em nosso exemplo, usei um http://dummy.restapiexample.com/api Serviço REST de amostra fictício.
Este arquivo de recurso descreve os cenários para realizar as operações CRUD, ou seja, para cobrir CRUD (Criar-Ler-Atualizar-Excluir).
- Vamos definir o recurso primeiro, em nosso caso, são os métodos de teste CRUD, que podem ser descritos a seguir.
Feature: Test CRUD methods in Sample Employee REST API testing
- Agora, isso tem cenários diferentes, como criar, atualizar, ler e excluir o registro do funcionário. Portanto, dê uma olhada no cenário POST:
Scenario: Add Employee record
- Descreva o pré-requisito para o teste de configuração da URL do serviço do funcionário.
Given I Set POST employee service api endpoint
- Especifique a etapa de teste real para enviar uma solicitação de postagem.
When I Set request HEADER And Send a POST HTTP request
- Agora, descreva a verificação do corpo da resposta.
Then I receive valid Response
Portanto, em nosso arquivo de recurso, o cenário será o seguinte:
Scenario: Add Employee record Given I Set POST employee service api endpoint When I Set request HEADER And Send a POST HTTP request Then I receive valid Response
Da mesma forma, você pode escrever os cenários restantes conforme mostrado abaixo.
DemoFeature.feature
# 4) Implementação da Definição das Etapas
Para as etapas do recurso usadas nos cenários acima, você precisa escrever implementações programáticas, neste caso, é Java.
Uma definição de etapa é um método escrito em Java que possui uma expressão. Ele vincula seu método a uma ou várias etapas. Então, quando Cucumber executa as etapas descritas em um cenário do arquivo de característica, ele primeiro procura uma correspondência definição de etapa executar.
Por exemplo, quando a definição da etapa para Adicionar funcionário usando POST pode ser escrita como segue.
Para a etapa dada, a implementação é escrita da seguinte forma:
@Given('^I Set POST employee service api endpoint$') public void setPostEndpoint(){ addURI = 'http://dummy.restapiexample.com/api/v1/create'; System.out.println('Add URL :'+addURI); }
Da mesma forma, para a etapa Quando, o seguinte é o método de definição:
@When ('^Send a POST HTTP request$') public void sendPostRequest(){ doublename_id = Math.random(); emp_name = 'zozo_'+name_id;//Just to avoid Duplicate Name entry String jsonBody'{'name':''+emp_name+'','salary':'123','age':'23'}'; System.out.println('
' + jsonBody); HttpEntityentity = new HttpEntity(jsonBody, headers); //POST Method to Add New Employee restTemplate = newRestTemplate (); response = restTemplate.postForEntity(addURI, entity, String.class); }
Agora, aqui está a parte da etapa de verificação, ou seja, a implementação da etapa Then:
@Then ('^I receive valid Response$') Public void verifyPostResponse(){ responseBodyPOST = response.getBody(); // Write response to file responseBody = response.getBody().toString(); System.out.println('responseBody --->' + responseBody); // Get ID from the Response object employeeId = getEmpIdFromResponse(responseBody); System.out.println('empId is :' + employeeId); // Check if the added Employee is present in the response body. Assert.hasText(responseBody,employeeId); // Check if the status code is 201 Assert.isTrue(response.getStatusCode()==HttpStatus.OK); System.out.println('Employee is Added successfully employeeId:'+employeeId); }
Observação: Aqui, estamos usando o método RestTemplate para enviar solicitação. Este é o mesmo método usado em ' Teste de API REST com Spring RestTemplate e TestNG ' . Para saber mais sobre os métodos do Rest Template, você pode consultar o tutorial.
Portanto, sua definição de etapa será a seguinte.
StepDefinition.java
Você pode implementar as definições de etapa para os cenários restantes Atualizar, Ler e Excluir Funcionário da mesma maneira.
# 5) Executando os testes
Agora, concluímos nosso cenário e a tarefa de desenvolvimento de script de etapas, então vamos executar nossos testes. Para isso, precisamos escrever uma classe de execução JUnit.
publicclassRunner { }
Aqui, você precisa adicionar as seguintes anotações acima do nome da classe:
@RunWith (Cucumber.class): Para ser executado como uma classe executora de teste para Cucumber.
@CucumberOptions: Aqui, você especifica o local do arquivo de Recursos e o local do arquivo de definição de Etapa para a estrutura Cucumber examinar durante a execução.
features='' glue=''
Plugar: Isso é usado para especificar diferentes opções de formatação para o relatório que é gerado como saída.
Portanto, sua classe de corredor será semelhante a esta.
TestRunner.java
Basta clicar com o botão direito em TestRunner.java e selecione a opção ‘ Executar como teste JUnit ’ . Isso exibirá o resultado da execução do teste conforme a seguir.
Saída da guia Junit
Você verá as seguintes mensagens no console.
Saída do console
# 6) Relatórios
Vimos o resultado no console. No entanto, o Cucumber fornece resultados de teste em um formato HTML mais apresentável que pode ser compartilhado com as partes interessadas.
Abrir alvo -> pepino-relatórios no navegador.
Observação : Lembra da classe de corredor Junit CucmberOptions?
@CucumberOptions (features='Features',glue={'demo'},plugin={'pretty', 'html:target/cucumber-reports'})
Aqui, o plugin é a opção que especificamos para relatórios em formato HTML junto com a pasta.
target/cucumber-reports
Agora abra a página target cucumber-reports index.html. A página de relatório é a página HTML onde você pode ver o nome do recurso com cenários que foram executados com sucesso.
Portanto, o seu relatório será o seguinte.
Resultado do CucumberTest em formato Html
Conclusão
Para concluir este tutorial, vamos resumir o que aprendemos até agora.
Vimos todas as etapas desde o início para configurar o BDD Cucumber REST API Test Automation Framework.
Nesse processo, aprendemos o seguinte:
- Para automação de teste, selecionamos Java como a linguagem de programação.
- Escolhemos o Cucumber como a estrutura de teste para a criação de um conjunto de testes no modo de teste Behavior Driven Development.
- Para enviar solicitações HTTP reais ao servidor, consumimos a classe RestTemplate do Spring framework.
- Para consumir essas APIs, instalamos o plug-in Cucumber, baixamos os arquivos jar das dependências do Cucumber, Spring jars e JSON-simple jar for parser API.
- Criamos o arquivo Feature para descrever cenários em inglês simples, arquivo Step Definition para mapear etapas e a classe JUnit Runner para executar o arquivo Feature.
- Por fim, executamos a classe Test Runner e vimos o resultado no console em um formato HTML mais apresentável e legível.
Resumindo, este artigo explicou como começar com a automação de teste de API REST com Cucumber. Abordamos a configuração de nossa estrutura de automação de teste desde a instalação de todos os softwares essenciais, configuração do projeto, desenvolvimento do TestScript até a execução do teste e visualização dos relatórios gerados.
Isso é suficiente para que qualquer controle de qualidade de automação comece com a estrutura de automação de teste. Mas se alguém quiser entender em detalhes como o Cucumber funciona internamente, como a linguagem Gherkin funciona, ele pode ser explorado em Pepino.
Espero que você esteja pronto para começar a testar a API REST no estilo BDD com pepino !!
Leitura recomendada
- As 10 melhores ferramentas de teste de API em 2021 (ferramentas de teste de API SOAP e REST)
- Melhores ferramentas de teste de software 2021 (QA Test Automation Tools)
- Teste de API REST com Spring RestTemplate e TestNG
- Download do e-book do Testing Primer
- As 20 perguntas e respostas mais importantes da entrevista de teste de API
- Teste de SaaS: desafios, ferramentas e abordagem de teste
- Tornando o teste de API simples com o Katalon Studio
- Teste de automação usando a ferramenta Cucumber e Selenium - Selenium Tutorial # 30