Tutorial de Teste de API REST Assured
โก Resumo Inteligente
A REST Assured se estabelece como uma JavaBiblioteca de cรณdigo aberto baseada em [nome da biblioteca/framework] que simplifica os testes de automaรงรฃo de APIs REST. O framework permite que engenheiros de qualidade validem respostas JSON complexas, cabeรงalhos, cรณdigos de status e tempos de resposta usando uma sintaxe limpa no estilo BDD com integraรงรฃo perfeita com o Maven.

O que รฉ fique tranquilo?
Tenha certeza permite testar APIs REST usando bibliotecas java e integra-se bem com Maven. Possui tรฉcnicas de correspondรชncia muito eficientes, portanto, afirmar os resultados esperados tambรฉm รฉ bastante simples. Rest Assured possui mรฉtodos para buscar dados de quase todas as partes da solicitaรงรฃo e resposta, nรฃo importa quรฃo complexas sejam as estruturas JSON.
Para a comunidade de testes, o API Automation Testing ainda รฉ novo e um nicho. As complexidades do JSON mantรชm os testes de API inexplorados. Mas isso nรฃo o torna menos importante no processo de teste. A estrutura Rest Assured.io tornou tudo muito simples usando os fundamentos bรกsicos do Java, tornando-o algo muito desejรกvel de aprender.
Por que precisa do Rest-Assured?
Imagine que vocรช abre o Google Maps e procura um lugar para ir. Imediatamente, vocรช vรช restaurantes prรณximos, opรงรตes de transporte de grandes empresas de viagens e muitas outras opรงรตes ao seu alcance. Sabemos que esses nรฃo sรฃo produtos do Google, entรฃo como o Google consegue exibi-los? Ele usa as APIs expostas desses provedores. Agora, se vocรช for solicitado a testar esse tipo de configuraรงรฃo, mesmo antes da interface do usuรกrio ser criada ou estar em desenvolvimento, testar as APIs se torna extremamente importante. Testรก-las repetidamente com diferentes combinaรงรตes de dados torna esse um caso muito adequado para automaรงรฃo.
Anteriormente, as equipes usavam linguagens dinรขmicas como Groovy e Ruby para alcanรงar isso, o que foi um desafio. Consequentemente, os testes de API nรฃo foram amplamente explorados pelos testadores funcionais.
No entanto, com o Rest Assured, o teste automatizado de APIs e o envio de solicitaรงรตes HTTPS simples com personalizaรงรตes fรกceis de usar tornam-se simples para quem tem um conhecimento bรกsico de Javaร รบtil para entender testes de API e testes de integraรงรฃo. O Rest Assured oferece grande confianรงa no backend, enquanto os testadores de frontend podem se concentrar na interface do usuรกrio e nas operaรงรตes do lado do cliente. O Rest Assured รฉ de cรณdigo aberto e a constante adiรงรฃo de mรฉtodos e bibliotecas o tornou uma รณtima opรงรฃo para automaรงรฃo de APIs.
REST Assured vs Postman: Principais diferenรงas
Tanto REST Assured quanto Postman Existem vรกrias ferramentas para validar APIs REST, mas cada uma se encaixa em uma etapa diferente do ciclo de vida de testes. A escolha da ferramenta certa depende das habilidades da sua equipe, do escopo do projeto e das necessidades de integraรงรฃo.
| Aspecto | Tenha certeza | Postman |
|---|---|---|
| Formato | Java Biblioteca para automaรงรฃo baseada em cรณdigo | Cliente de API baseado em GUI com suporte a scripts |
| Melhor Caso de Uso | Pipelines de integraรงรฃo contรญnua e suรญtes de regressรฃo | Exploraรงรฃo manual e verificaรงรตes rรกpidas de API |
| Requisito de habilidade | Setores de Java conhecimento necessรกrio | Codificaรงรฃo mรญnima; utiliza JavaTrechos de script |
| Relatรณrios | Integra-se com TestNG, JUnite Allure | Resumos de execuรงรฃo integrados via CLI do Newman |
Muitas equipes usam Postman para prototipagem inicial e transiรงรฃo para REST Assured para regressรฃo automatizada assim que o contrato da API estiver estabilizado.
Como configurar o Rest Assured.io com Eclipse
A configuraรงรฃo do REST Assured envolve trรชs dependรชncias principais: Java, uma IDE e o Maven. Siga os passos abaixo para evitar erros de compilaรงรฃo posteriormente.
Etapa 1) Instalar Java. Consulte isto guia
Etapa 2) Baixe um IDE para comeรงar: eclipse
Etapa 3) Instale o Maven e configure seu eclipse. Referir aqui..
Configuraรงรฃo fique tranquilo
- Crie um projeto Maven em sua IDE. Estamos usando o IntelliJ, mas vocรช obterรก uma estrutura semelhante em qualquer IDE que esteja utilizando.
- Abra seu arquivo POM.xml.
Estrutura do projeto para um espaรงo de trabalho Maven com REST Assured
Para ficar tranquilo.io: Para Java versรฃo <9 usuรกrios:
Adicione a dependรชncia abaixo ao seu POM.xml:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>json-path</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>xml-path</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>json-schema-validator</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Para ficar tranquilo.io: Para Java Usuรกrios da versรฃo 9+:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured-all</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Soluรงรฃo de problemas:
Caso encontre erros e nรฃo tenha certeza se as dependรชncias foram baixadas corretamente, siga estes passos:
- Execute um build do Maven para importar todas as dependรชncias. Vocรช encontrarรก ajuda sobre a configuraรงรฃo do Maven no Guru99.
- Se os erros persistirem, execute um `Maven clean` seguido de um `Maven install`. A compilaรงรฃo deverรก ser concluรญda sem erros.
- Adicione as importaรงรตes abaixo em seu Java Execute a classe e confirme se nรฃo hรก erros de compilaรงรฃo.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
Primeiro script simples de Rest Assured
Com as dependรชncias configuradas, vocรช jรก pode escrever seu primeiro script. O framework segue um estilo de Desenvolvimento Orientado a Comportamento (BDD) que se lรช quase como inglรชs.
Sintaxe:
A sintaxe do Rest Assured.io รฉ a parte mais legรญvel da estrutura, pois รฉ muito semelhante ao BDD e fรกcil de entender.
Given().
param("x", "y").
header("z", "w").
when().
Method().
Then().
statusCode(XXX).
body("x", "y", equalTo("z"));
Explicaรงรฃo:
| Code | Explicaรงรฃo |
|---|---|
| Dado() | A palavra-chave 'Given' permite definir um plano de fundo. Aqui, vocรช passa os cabeรงalhos da solicitaรงรฃo, os parรขmetros de consulta e caminho, o corpo e os cookies. Isso รฉ opcional se esses itens nรฃo forem necessรกrios na solicitaรงรฃo. |
| Quando() | A palavra-chave 'quando' marca a premissa do seu cenรกrio. Por exemplo, 'quando' vocรช receber/postar/inserir algo, faรงa outra coisa. |
| Mรฉtodo() | Substitua isso por qualquer uma das operaรงรตes CRUD (get/post/put/delete). |
| Entรฃo() | Suas condiรงรตes de assert e matcher vรฃo aqui. |
Agora que vocรช jรก tem a configuraรงรฃo e uma noรงรฃo da sintaxe, vamos criar nosso primeiro teste simples. Nรฃo se preocupe se a estrutura parecer nova para vocรช; conforme vocรช for programando e interpretando cada linha, vocรช vai se familiarizar.
O que vocรช vai buscar?
Abra seu navegador e clique em โ https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Certifique-se de ver algo como abaixo.
Exemplo de resposta da API capturada pelo REST Assured
Caso vocรช receba um erro no navegador ao tentar obter uma resposta para a solicitaรงรฃo:
- Verifique se vocรช usou HTTPS ou HTTP. Seu navegador pode ter configuraรงรตes que bloqueiam sites nรฃo seguros.
- Verifique se algum proxy ou firewall estรก bloqueando o acesso ao site pelo seu navegador.
*Observaรงรฃo โ Vocรช nรฃo usou nenhum cabeรงalho, corpo ou cookie aqui. Era uma URL e vocรช estava obtendo conteรบdo da API em vez de enviar ou atualizar qualquer conteรบdo existente. Isso caracteriza uma chamada GET. Lembre-se disso para entender melhor nosso primeiro teste.
O objetivo do seu teste:
O objetivo do script รฉ imprimir em seu console IDE a mesma saรญda que vocรช recebeu no navegador por meio do Rest Assured.
Vamos codificar isso com as etapas abaixo:
Obtendo o corpo da resposta
Passo 1) Crie uma classe chamada โmyFirstRestAssuredClassโ.
Passo 2) Crie um mรฉtodo chamado โgetResponseBodyโ.
Passo 3) Semelhante ร estrutura aprendida anteriormente de dado, quando e entรฃo, digite o cรณdigo abaixo:
dado(). -> Nรฃo sรฃo necessรกrios cabeรงalhos, nenhuma consulta ou parรขmetro de caminho.
when(). -> Nenhuma condiรงรฃo especรญfica definida.
pegar('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> basta fornecer a URL.
entรฃo(). -> Nenhuma asserรงรฃo especรญfica รฉ necessรกria.
log().all() -> Assim que toda a resposta for obtida, registre a resposta, os cabeรงalhos e essencialmente tudo o que a solicitaรงรฃo retornar.
public static void getResponseBody(){
given().when().get("https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
.all();
}
Observe agora que a URL utilizada รฉ longa e menos legรญvel. Analisando atentamente, vocรช notarรก que trรชs parรขmetros de consulta estรฃo sendo usados:
- Identificaรงรฃo do Cliente
- Senha
- Conta_Nรฃo
O Rest Assured nos ajuda a passar cada parte (consulta, caminho, parรขmetro de cabeรงalho) separadamente, tornando o cรณdigo mais legรญvel e fรกcil de manter. Alรฉm disso, podemos parametrizar os dados de um arquivo externo conforme necessรกrio.
Para usar parรขmetros de consulta, voltamos ร nossa definiรงรฃo de sintaxe e vemos que todos eles sรฃo passados โโโโcomo parte de determinado.
public static void getResponseBody(){
given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1")
.when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log()
.body();
}
**Observe que usamos โcorpoโ em vez de โtudoโ; isso nos ajuda a extrair apenas o corpo da resposta.
Saรญda:
Obtendo o cรณdigo de status da resposta
O prรณximo mรฉtodo que vamos programar รฉ obter o cรณdigo de status e inserir uma asserรงรฃo para validรก-lo.
Passo 1) Crie um mรฉtodo chamado getResponseStatus().
Passo 2) Use a mesma estrutura de solicitaรงรฃo usada acima. Copie e cole.
Passo 3) Em vez de registrรก-lo, use o mรฉtodo integrado 'getStatusCode' do Rest Assured para obter o valor do cรณdigo de status.
Passo 4) Para afirmar que seu cรณdigo de status รฉ 200, use as palavras-chave โ assertThat().statusCode(expectedCode).
**Observaรงรฃo: URL รฉ uma variรกvel usada para simplificar. URL contรฉm o endereรงo completo da solicitaรงรฃo da API.**
public static void getResponseStatus(){
int statusCode= given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
System.out.println("The response status is "+statusCode);
given().when().get(url).then().assertThat().statusCode(200);
}
Saรญda:
Necessidade de Negรณcios
Uma das regras bรกsicas da automaรงรฃo รฉ que devemos colocar pontos de verificaรงรฃo para que o teste prossiga somente se todas as condiรงรตes exigidas forem atendidas. Nos testes de API, a validaรงรฃo mais bรกsica รฉ verificar se o cรณdigo de status da solicitaรงรฃo estรก no formato 2XX.
O cรณdigo completo, atรฉ agora:
import java.util.ArrayList;
import static io.restassured.RestAssured.*;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
public class myFirstRestAssuredClass {
final static String url="https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1";
public static void main(String args[]) {
getResponseBody();
getResponseStatus();
; }
//This will fetch the response body as is and log it. given and when are optional here
public static void getResponseBody(){
given().when().get(url).then().log()
.all();
given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log().body();
}
public static void getResponseStatus(){
int statusCode= given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1")
.when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
System.out.println("The response status is "+statusCode);
given().when().get(url).then().assertThat().statusCode(200);
}
}
*Nota:
- 200 รฉ uma resposta bem-sucedida para este cenรกrio. รs vezes, vocรช pode precisar que a solicitaรงรฃo falhe, caso em que vocรช pode usar 4XX ou 5XX. Tente alterar o cรณdigo de status fornecendo parรขmetros invรกlidos e verifique.
- Quando afirmamos uma condiรงรฃo, nรฃo haverรก impressรฃo no console, a menos que haja um erro.
Script para buscar diferentes partes de uma resposta
Alรฉm do corpo da resposta e do cรณdigo de status, o REST Assured tambรฉm expรตe cabeรงalhos, tempo de resposta e tipo de conteรบdo por meio de mรฉtodos extratores encadeรกveis. A palavra-chave 'extract' รฉ essencial para obter essas partes especรญficas.
cabeรงalho
Rest Assured รฉ uma linguagem muito direta e buscar cabeรงalhos รฉ igualmente simples. O nome do mรฉtodo รฉ headers(). Como antes, criaremos um mรฉtodo independente para fazer o mesmo.
public static void getResponseHeaders(){
System.out.println("The headers in the response "+
get(url).then().extract()
.headers());
}
Observe que 'given().when()' รฉ omitido aqui, e a linha de cรณdigo comeรงa em get(). Isso ocorre porque nรฃo hรก nenhuma prรฉ-condiรงรฃo ou verificaรงรฃo feita antes de enviar a solicitaรงรฃo e obter uma resposta. Nesses casos, o uso de 'given().when()' รฉ opcional.
Saรญda:
Necessidade de negรณcios:
Muitas vezes, vocรช precisarรก usar o token de autorizaรงรฃo ou um cookie de sessรฃo para a solicitaรงรฃo subsequente, e esses detalhes geralmente sรฃo retornados como cabeรงalhos da resposta.
Tempo de Resposta
Para obter o tempo necessรกrio para buscar a resposta do back-end ou de outros sistemas downstream, o Rest Assured fornece um mรฉtodo chamado 'timeIn' com um timeUnit adequado para obter o tempo necessรกrio para retornar a resposta.
public static void getResponseTime(){
System.out.println("The time taken to fetch the response "+get(url)
.timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}
Saรญda:
Necessidade de negรณcios:
Um aspecto muito importante no teste de APIs รฉ o tempo de resposta, que mede o desempenho da aplicaรงรฃo. O tempo necessรกrio para a sua chamada pode variar dependendo da sua velocidade de internet, do desempenho da API naquele momento, da carga do servidor e de outros fatores que influenciam o tempo de resposta.
Content-Type
Vocรช pode obter o tipo de conteรบdo da resposta retornada usando o mรฉtodo โcontentType()โ.
public static void getResponseContentType(){
System.out.println("The content type of response "+
get(url).then().extract()
.contentType());
}
saรญda
Necessidade de negรณcios:
Em alguns casos, obter o tipo de conteรบdo รฉ essencial para garantir que nรฃo haja brechas de seguranรงa para ameaรงas de origem cruzada e para confirmar se o conteรบdo transmitido estรก de acordo com os padrรตes da API.
Buscar elemento JSON individual
Com base na resposta fornecida, vocรช deve calcular o valor total. Vocรช precisa reunir todos os valores e somรก-los.
Passos:
Passo 1) O campo "amount" estรก dentro de uma matriz com a chave "statements", que por sua vez estรก na lista com a chave "result".
Passo 2) O Rest Assured fornece um mecanismo para acessar os valores na API usando o "caminho".
Passo 3) O caminho para chegar aos valores รฉ โresult.statements.AMOUNTโ. Pense nisso como um XPath em Selenium.
Passo 4) Recupere todos os valores em uma coleรงรฃo e, em seguida, percorra todos os valores para calcular a soma.
public static void getSpecificPartOfResponseBody(){
ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ;
int sumOfAll=0;
for(String a:amounts){
System.out.println("The amount value fetched is "+a);
sumOfAll=sumOfAll+Integer.valueOf(a);
}
System.out.println("The total amount is "+sumOfAll);
}
Observaรงรฃo: Como o valor da quantia รฉ do tipo string, nรณs o convertemos para um nรบmero inteiro para a soma.
Saรญda:
Melhores Prรกticas para Automaรงรฃo de Testes REST Assured
Depois de compreender os conceitos bรกsicos, a aplicaรงรฃo de padrรตes disciplinados mantรฉm seu conjunto de testes confiรกvel ร medida que a superfรญcie da API cresce. As prรกticas abaixo ajudam as equipes a evitar testes instรกveis โโe sobrecarga de manutenรงรฃo.
- Centralizar o URL base: Armazene o URI base e os tokens de autenticaรงรฃo em uma รบnica classe de configuraรงรฃo ou arquivo de propriedades. Isso evita duplicaรงรฃo e simplifica a troca de ambientes.
- Utilize as especificaรงรตes de solicitaรงรฃo e resposta: Crie objetos RequestSpecBuilder e ResponseSpecBuilder reutilizรกveis. Eles reduzem o cรณdigo repetitivo quando muitos testes compartilham cabeรงalhos ou asserรงรตes comuns.
- Validar esquema JSON: Combine o REST Assured com o mรณdulo json-schema-validator para confirmar a integridade do contrato. As verificaรงรตes de esquema detectam alteraรงรตes incompatรญveis antes que elas cheguem aos consumidores subsequentes.
- Externalizar dados de teste: Armazene os dados em arquivos JSON ou use provedores de dados de TestNGDados codificados diretamente no cรณdigo rapidamente se tornam obsoletos.
- Realizar testes independentes: Cada teste deve configurar e limpar seus prรณprios dados. Conjuntos de testes dependentes da ordem falham de forma imprevisรญvel em execuรงรตes paralelas de CI.
- Capturar registros seletivamente: Use `log().ifError()` em ambientes estรกveis โโe `log().all()` durante a depuraรงรฃo. Logs detalhados tornam os pipelines de CI mais lentos e ocultam problemas reais.
- Integre-se ao CI/CD: Acione suรญtes REST Assured por meio do Maven Surefire ou Failsafe no Jenkins, GitHub Actions ou GitLab. Execute verificaรงรตes rรกpidas a cada commit e testes de regressรฃo completos durante a noite.
Adotar esses hรกbitos desde cedo transforma a automaรงรฃo de APIs em um ativo de longo prazo, em vez de um gargalo frรกgil.


