SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
Criando uma arquitetura para seus testes de API com RestAssured
3.
Pirâmide de Testes Original
UI
Tests
Service Tests
Unit Tests
mais
isolamento
mais
integração
rápido
lento
4.
Pirâmide de Testes IdealPirâmide de Testes Ideal
5.
FRONTENDBACKEND
API Gateway
testes funcionais e de
aceitação para o frontend
web e/ou mobile
testes unitários e integração
no backend
testes na api de
consumo
6.
APIs Individuais
API
API
API
API
API
API
API
API
7.
APIs Individuais
API
API
API
API
API
API
API
API
Assumimos que as
API já possuem
testes unitários
Testes
Unitários done!
8.
Individual APIs
API
API
API
API
API
API
API
API
Precisamos testar
funcionalmente as
APIs em separado
Foco desta apresentação
9.
Testes de Contrato e E2E
API
API
API
API
API
API
API
API
Contrato
&
E2E
10.
Contract and E2E testing
API
API
API
API
API
API
API
API
Contrato
&
E2E
Garante a
comunicação
entre APIs
11.
Contract and E2E testing
API
API
API
API
API
API
API
API
Contrato
&
E2E
Garante que as
APIs podem ser
utilizadas em
conjunto
12.
Como serão os projetos de teste?
Modelo 1
Um projeto de teste para todos os microserviço
BACKEND
TEST
PROEJTO
TESTE
13.
Como serão os projetos de teste?
Modelo 2
Um projeto de teste para cada microserviço
BACKEND
TEST TEST TEST
PROEJTO
TESTE
14.
Como serão os projetos de teste?
Modelo 3
Um projeto de teste para cada microserviço
dividido em projetos de cliente e testes
BACKEND
PROEJTO
TESTE
TEST TEST TEST
CLIENT CLIENT CLIENT
16.
Rest-Assured
http://rest-assured.io
DSL Java para simplificar a execução de testes para serviços REST
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class RestAssuredExampleTest {
@Test
public void welcome() {
given().
param(”nome", "Elias").
when().
post("/registro").
then().
body(”mensagem", is(”Oi Elias"));
}
}
17.
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class RestAssuredExampleTest {
@Test
public void welcome() {
given().
param(”nome", "Elias").
when().
post("/registro").
then().
body(”mensagem", is(”Oi Elias"));
}
}
Rest-Assured
http://rest-assured.io
importar as bibliotecas
DSL Java para simplificar a execução de testes para serviços REST
18.
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class RestAssuredExampleTest {
@Test
public void welcome() {
given().
param(”nome", "Elias").
when().
post("/registro").
then().
body(”mensagem", is(”Oi Elias"));
}
}
Rest-Assured
http://rest-assured.io
pre-condição do
request
DSL Java para simplificar a execução de testes para serviços REST
19.
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class RestAssuredExampleTest {
@Test
public void welcome() {
given().
param(”nome", "Elias").
when().
post("/registro").
then().
body(”mensagem", is(”Oi Elias"));
}
}
Rest-Assured
http://rest-assured.io
ação (request)
DSL Java para simplificar a execução de testes para serviços REST
20.
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class RestAssuredExampleTest {
@Test
public void welcome() {
given().
param(”nome", "Elias").
when().
post("/registro").
then().
body(”mensagem", is(”Oi Elias"));
}
}
Rest-Assured
http://rest-assured.io
asserção do resultado
response body
DSL Java para simplificar a execução de testes para serviços REST
26.
Modelo 1
Você criará apenas um projeto de teste para todas as APIs
BACKEND
TEST
PROEJTO
TESTE
27.
Modelo 1
Ganhos
● Centralização do código em um único projeto
● Rapidez e agilidade na criação de testes e resolução de problemas
Problemas
● Mudanças constantes por diversas pessoas podem gerar efeitos
colaterais nos resultados
29.
Modelo 2
Um projeto de teste para cada microserviço onde as interações
com o(s) endpoint(s) estarão no projeto de teste.
BACKEND
TEST TEST TEST
PROEJTO
TESTE
30.
Modelo 2
Ganhos
● Descentralização organizada dos projetos de teste para com uma API
● Isolamento entre APIs
Problemas
● Possíveis duplicidades de código
32.
Modelo 3
Um projeto de teste para cada microserviço dividido em um
projeto cliente e um projeto de teste.
BACKEND
PROEJTO
TESTE
TEST TEST TEST
CLIENT CLIENT CLIENT
33.
Modelo 3
Projeto Cliente
Colocaremos aqui toda a lógica necessária para efetuar as
requisições como:
○ Retorno de exceções
○ Objetos de Transporte
○ Chamada das requisições
○ Customizações para validações
○ Configurações de apontamento (URI, base path, porta)
34.
Modelo 3
Projeto Teste
Colocaremos aqui todos os métodos de utilização da API que
criamos no projeto cliente, criando a lógica de testes e
validando os resultados.
Em resumo, todos os testes serão criados aqui
35.
Modelo 3
Ganhos
● Maior gestão de versões (novas funcionalidades, breaking changes)
● Fácil utilização por outros times
○ eles só precisam consumir o cliente e criar seus testes
Problemas
● Aumento de tempo, comparado com os modelos anteriores
37.
Próximos passos
Aplicação de estratégias e Design Patters para diminuir a manutenção e
acelerar o desenvolvimento dos testes
Gerais Tipo Biblioteca?
Builder Design Pattern Lombok
Logging Estratégia Log4J
Base Test Testing Pattern
Data Driven Testing Pattern TestNG | JUnit
Test Data Factory Testing Pattern
Properties Strategy Estratégia Owner
Reporting Estratégia Allure Report
RestAssured
Request Specification
Response Specification
Validatable response
Filters
Logging