SlideShare uma empresa Scribd logo
DÊ A MÁXIMA COBERTURA NOS
SEUS TESTES DE API
ELIAS NOGUEIRA
@eliasnogueira
Conceituação
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
SUT – System Under Test | Front-end
Informar um CPF:
• válido
• que não esteja com restrição
• não cadastrado
SUT – System Under Test | Front-end
Efetuar o cadastro
respeitando as restrições
SUT – System Under Test | Front-end
Efetuar operações de CRUD
Passos...
1 Entender a documentação da API
2 Pensar nos testes com uma divisão de pipeline
3 Criar uma versão inicial da arquitetura
4 Criar os testes e definir as suítes de testes
1.
Entender a
documentação da API
Open API
Swagger
Ter a documentação correta e
dentro de padrões é a melhor
forma de entender a API e iniciar
os testes .
2.
Pensar nos testes com
uma divisão de
pipeline
API
Pipeline
Health Check
Contrato
Funcional
Aceitação
Garantir que o endpoint está respondendo
Garantir que o endpoint não teve seus
atributos alterados
Garantir que o endpoint funciona ou apresenta
os resultados de falha esperados
Garantir que um conjunto de endpoints
funcionam como na UI
3.
Criar uma versão
inicial da arquitetura
Modelo 1
Um projeto de teste para cada microserviço +
um projeto de testes de aceitação
Como serão os projetos de teste?
BACKEND
TEST TEST TEST
PROEJTO
TESTE
TEST
PROJETO
ACEITAÇÃO
Modelo 2
Projeto único para todas as APIs
Como serão os projetos de teste?
BACKEND
TEST
PROEJTO
TESTE
Base Test
Ponto centralizado para pré e pós condições de teste
Builder
Criação de métodos fluentes
Data Factory
Criação de dados de forma dinâmica e centralizada
Data Driven
Estratégia de utilização de dados nos testes
Uso de Padrões de Projeto
4.
Criar testes e definir as
suítes de teste
Rest-Assured
http://rest-assured.io
DSL Java para testar e validar APIs REST.
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class ExemploRestAssured {
@Test
public void boasVindas() {
given().
param("nome", "Elias").
when().
post("/cadastro").
then().
body("mensagem", is("Olá Elias"));
}
}
Rest-Assured
http://rest-assured.io
DSL Java para testar e validar APIs REST.
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class ExemploRestAssured {
@Test
public void boasVindas() {
given().
param("nome", "Elias").
when().
post("/cadastro").
then().
body("mensagem", is("Olá Elias"));
}
}
importação das
bibliotecas necessárias
Rest-Assured
http://rest-assured.io
DSL Java para testar e validar APIs REST.
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class ExemploRestAssured {
@Test
public void boasVindas() {
given().
param("nome", "Elias").
when().
post("/cadastro").
then().
body("mensagem", is("Olá Elias"));
}
}
pré-condição para a
requisição
Rest-Assured
http://rest-assured.io
DSL Java para testar e validar APIs REST.
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class ExemploRestAssured {
@Test
public void boasVindas() {
given().
param("nome", "Elias").
when().
post("/cadastro").
then().
body("mensagem", is("Olá Elias"));
}
}
ação (requisição)
Rest-Assured
http://rest-assured.io
DSL Java para testar e validar APIs REST.
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class ExemploRestAssured {
@Test
public void boasVindas() {
given().
param("nome", "Elias").
when().
post("/cadastro").
then().
body("mensagem", is("Olá Elias"));
}
}
validação dos dados
de retorno
API
health-check
Health Check
Contrato
Funcional
Aceitação
Garantir que o endpoint está respondendo
Garantir que o endpoint não teve seus
atributos alterados
Garantir que o endpoint funciona ou apresenta
os resultados de falha esperados
Garantir que um conjunto de endpoints
funcionam como na UI
heath-check
Apenas validamos se a API está disponível
Se existir alguma abordagem de verificação ou monitoramento validamos
o status geral do retorno
@Test(groups = "health")
public void healthCheckViaActuator() {
basePath = "/actuator";
when().
get("/health").
then().
statusCode(200).
body("status", is("UP"));
}
@Test(groups = "health")
public void healthCheckViaAPI() {
given().
pathParam("cpf", "81016654049").
when().
get("/restricoes/{cpf}").
then().
statusCode(204);
}
via monitoramento via API
API
contrato
Health Check
Contrato
Funcional
Aceitação
Garantir que o endpoint está respondendo
Garantir que o endpoint não teve seus
atributos alterados
Garantir que o endpoint funciona ou apresenta
os resultados de falha esperados
Garantir que um conjunto de endpoints
funcionam como na UI
● É o nome dado ao pacto entre o produtor e consumidor
● Garante que mudanças na API não invalidem o consumo:
● path
● parâmetros
● dados de envio (request)
● dados de retorno (response body)
● json-schema é um contrato que define os dados
esperados, tipos e formatos de cada campo na resposta
contrato
{
"nome": "Elias",
"idade": 36
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"nome": {
"type": "string"
},
"idade": {
"type": "integer"
}
},
"required": [
"nome",
"idade"
],
"additionalProperties": false
}
json-schema
{
"nome": "Elias",
"idade": 36
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"nome": {
"type": "string"
},
"idade": {
"type": "integer"
}
},
"required": [
"nome",
"idade"
],
"additionalProperties": false
}
json-schema possui o nome
do atributo e o tipo de dados
json-schema
{
"nome": "Elias",
"idade": 36
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"nome": {
"type": "string"
},
"idade": {
"type": "integer"
}
},
"required": [
"nome",
"idade"
],
"additionalProperties": false
}
os dois atributos devem estar
presentes, obrigatoriamente
json-schema
{
"nome": "Elias",
"idade": 36
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"nome": {
"type": "string"
},
"idade": {
"type": "integer"
}
},
"required": [
"nome",
"idade"
],
"additionalProperties": false
}
json-schema
nenhum outro
atributo é permitido
API
funcional
Health Check
Contrato
Funcional
Aceitação
Garantir que o endpoint está respondendo
Garantir que o endpoint não teve seus
atributos alterados
Garantir que o endpoint funciona ou apresenta
os resultados de falha esperados
Garantir que um conjunto de endpoints
funcionam como na UI
funcional
Validar cenários positivos e negativos (caminho feliz | fluxo exceção)
@Test(groups = {"funcional"})
public void cPFExistente() {
given().
pathParam("cpf", "66414919004").
when().
get("/simulacoes/{cpf}").
then().
statusCode(200).
body(
"id", equalTo(1),
"nome", equalTo("Fulano"),
"cpf", equalTo("66414919004"),
"email", equalTo("fulano@gmail.com"),
"valor", equalTo(11000f),
"parcelas", equalTo(3),
"seguro", equalTo(true)
);
}
validação de dados
API
aceitação
Health Check
Contrato
Funcional
Aceitação
Garantir que o endpoint está respondendo
Garantir que o endpoint não teve seus
atributos alterados
Garantir que o endpoint funciona ou apresenta
os resultados de falha esperados
Garantir que um conjunto de endpoints
funcionam como na UI
Testar com a perspectiva do usuário
● Acessar a página e efetuar a consulta de
restrição no CPF
● Inserir uma simulação de crédito
aceitação
@Test(groups = {"aceitacao"})
public void realizaSimulacaoCredito() {
baseURI = "http://localhost";
port = 8088;
basePath = "/api/v1";
String cpf = "12345678901";
// efetua a verificacao de cpf restrito
given().
pathParam("cpf", cpf).
when().
get("/restricoes/{cpf}").
then().
statusCode(204);
// efetua a simulacao
port = 8089;
Simulacao simulacao = SimulacaoDataFactory.criaNovaSimulacao();
given().
contentType(ContentType.JSON).
body(simulacao).
when().
post("/simulacoes").
then().
statusCode(201);
}
aceitação
@Test(groups = {"aceitacao"})
public void realizaSimulacaoCredito() {
baseURI = "http://localhost";
port = 8088;
basePath = "/api/v1";
String cpf = "12345678901";
// efetua a verificacao de cpf restrito
given().
pathParam("cpf", cpf).
when().
get("/restricoes/{cpf}").
then().
statusCode(204);
// efetua a simulacao
port = 8089;
Simulacao simulacao = SimulacaoDataFactory.criaNovaSimulacao();
given().
contentType(ContentType.JSON).
body(simulacao).
when().
post("/simulacoes").
then().
statusCode(201);
}
requisição de consulta
restrição
aceitação
@Test(groups = {"aceitacao"})
public void realizaSimulacaoCredito() {
baseURI = "http://localhost";
port = 8088;
basePath = "/api/v1";
String cpf = "12345678901";
// efetua a verificacao de cpf restrito
given().
pathParam("cpf", cpf).
when().
get("/restricoes/{cpf}").
then().
statusCode(204);
// efetua a simulacao
port = 8089;
Simulacao simulacao = SimulacaoDataFactory.criaNovaSimulacao();
given().
contentType(ContentType.JSON).
body(simulacao).
when().
post("/simulacoes").
then().
statusCode(201);
}
requisição de
simulação de crédito
Obrigado!
@eliasnogueira
github.com/eliasnogueira

Mais conteúdo relacionado

Mais procurados

Arquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto JavaArquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto Java
Elias Nogueira
 
Pirâmide de testes mobile, dividindo seus testes de maneira efetiva
Pirâmide de testes mobile, dividindo seus testes de maneira efetivaPirâmide de testes mobile, dividindo seus testes de maneira efetiva
Pirâmide de testes mobile, dividindo seus testes de maneira efetiva
Frederico Augusto Do Carmo Moreira
 
TOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
TOTVS - Agile Testing e a Importância de se ter Estratégia de TestesTOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
TOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
Samanta Cicilia
 
Test Design and Automation for REST API
Test Design and Automation for REST APITest Design and Automation for REST API
Test Design and Automation for REST API
Ivan Katunou
 
Arquitetura de Automação de Teste
Arquitetura de Automação de TesteArquitetura de Automação de Teste
Arquitetura de Automação de Teste
Elias Nogueira
 
Postman. From simple API test to end to end scenario
Postman. From simple API test to end to end scenarioPostman. From simple API test to end to end scenario
Postman. From simple API test to end to end scenario
HYS Enterprise
 
Karate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testingKarate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testing
Roman Liubun
 
DevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágilDevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágil
Elias Nogueira
 
Plano de teste
Plano de testePlano de teste
Plano de teste
Eduardo Nilsen
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
Kleitor Franklint Correa Araujo
 
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
Mayara Fernandes
 
Robot Framework - principais características
Robot Framework - principais característicasRobot Framework - principais características
Robot Framework - principais características
alinebiath
 
Introduction to APIs & how to automate APIs testing with selenium web driver?
Introduction to APIs & how to automate APIs testing with selenium web driver?Introduction to APIs & how to automate APIs testing with selenium web driver?
Introduction to APIs & how to automate APIs testing with selenium web driver?
BugRaptors
 
Papel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilPapel do QA na Transformação Ágil
Papel do QA na Transformação Ágil
Elias Nogueira
 
Karate - Web-Service API Testing Made Simple
Karate - Web-Service API Testing Made SimpleKarate - Web-Service API Testing Made Simple
Karate - Web-Service API Testing Made Simple
VodqaBLR
 
Testes E2E em Cypress com JS
Testes E2E em Cypress com JSTestes E2E em Cypress com JS
Testes E2E em Cypress com JS
Nàtali Cabral
 
Automação de teste de software
Automação de teste de softwareAutomação de teste de software
Automação de teste de software
Qualister
 
Automation Best Practices
Automation Best PracticesAutomation Best Practices
Automation Best Practices
Sauce Labs
 
Como criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containersComo criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containers
Elias Nogueira
 
API TESTING
API TESTINGAPI TESTING
API TESTING
Sijan Bhandari
 

Mais procurados (20)

Arquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto JavaArquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto Java
 
Pirâmide de testes mobile, dividindo seus testes de maneira efetiva
Pirâmide de testes mobile, dividindo seus testes de maneira efetivaPirâmide de testes mobile, dividindo seus testes de maneira efetiva
Pirâmide de testes mobile, dividindo seus testes de maneira efetiva
 
TOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
TOTVS - Agile Testing e a Importância de se ter Estratégia de TestesTOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
TOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
 
Test Design and Automation for REST API
Test Design and Automation for REST APITest Design and Automation for REST API
Test Design and Automation for REST API
 
Arquitetura de Automação de Teste
Arquitetura de Automação de TesteArquitetura de Automação de Teste
Arquitetura de Automação de Teste
 
Postman. From simple API test to end to end scenario
Postman. From simple API test to end to end scenarioPostman. From simple API test to end to end scenario
Postman. From simple API test to end to end scenario
 
Karate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testingKarate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testing
 
DevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágilDevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágil
 
Plano de teste
Plano de testePlano de teste
Plano de teste
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
 
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
 
Robot Framework - principais características
Robot Framework - principais característicasRobot Framework - principais características
Robot Framework - principais características
 
Introduction to APIs & how to automate APIs testing with selenium web driver?
Introduction to APIs & how to automate APIs testing with selenium web driver?Introduction to APIs & how to automate APIs testing with selenium web driver?
Introduction to APIs & how to automate APIs testing with selenium web driver?
 
Papel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilPapel do QA na Transformação Ágil
Papel do QA na Transformação Ágil
 
Karate - Web-Service API Testing Made Simple
Karate - Web-Service API Testing Made SimpleKarate - Web-Service API Testing Made Simple
Karate - Web-Service API Testing Made Simple
 
Testes E2E em Cypress com JS
Testes E2E em Cypress com JSTestes E2E em Cypress com JS
Testes E2E em Cypress com JS
 
Automação de teste de software
Automação de teste de softwareAutomação de teste de software
Automação de teste de software
 
Automation Best Practices
Automation Best PracticesAutomation Best Practices
Automation Best Practices
 
Como criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containersComo criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containers
 
API TESTING
API TESTINGAPI TESTING
API TESTING
 

Semelhante a De a máxima cobertura nos seus testes de API

Workshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootWorkshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Rodrigo Cândido da Silva
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NET
slides_teltools
 
Design patterns
Design patternsDesign patterns
Design patterns
DouglasSoaresAndrSch
 
Spring MVC - QConSP
Spring MVC - QConSPSpring MVC - QConSP
Spring MVC - QConSP
Eduardo Bregaida
 
Explorando a API Rest Jira Cloud
Explorando a API Rest Jira CloudExplorando a API Rest Jira Cloud
Explorando a API Rest Jira Cloud
Joao Galdino Mello de Souza
 
Automação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileAutomação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e Mobile
Elias Nogueira
 
Spring Capitulo 03
Spring Capitulo 03Spring Capitulo 03
Spring Capitulo 03
Diego Pacheco
 
Integrando o dev com o ops - Marcelo Castellani
Integrando o dev com o ops - Marcelo CastellaniIntegrando o dev com o ops - Marcelo Castellani
Integrando o dev com o ops - Marcelo Castellani
iMasters
 
uma história sobre testes de API
uma história sobre testes de APIuma história sobre testes de API
uma história sobre testes de API
Samuel Lourenço
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
grupoweblovers
 
Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando Postman
Lucas Amaral
 
Path to the future #2 - Internet das coisas com AWS IoT
Path to the future #2 - Internet das coisas com AWS IoTPath to the future #2 - Internet das coisas com AWS IoT
Path to the future #2 - Internet das coisas com AWS IoT
Amazon Web Services LATAM
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
Wesley Lemos
 
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
André Ricardo Barreto de Oliveira
 
JAX-RS 2.0
JAX-RS 2.0JAX-RS 2.0
JAX-RS 2.0
fabiovelloso
 
GUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EEGUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
Rafael Benevides
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Helder da Rocha
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
Workshop05
Workshop05Workshop05

Semelhante a De a máxima cobertura nos seus testes de API (20)

Workshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootWorkshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring Boot
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NET
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Spring MVC - QConSP
Spring MVC - QConSPSpring MVC - QConSP
Spring MVC - QConSP
 
Explorando a API Rest Jira Cloud
Explorando a API Rest Jira CloudExplorando a API Rest Jira Cloud
Explorando a API Rest Jira Cloud
 
Automação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileAutomação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e Mobile
 
Spring Capitulo 03
Spring Capitulo 03Spring Capitulo 03
Spring Capitulo 03
 
Integrando o dev com o ops - Marcelo Castellani
Integrando o dev com o ops - Marcelo CastellaniIntegrando o dev com o ops - Marcelo Castellani
Integrando o dev com o ops - Marcelo Castellani
 
uma história sobre testes de API
uma história sobre testes de APIuma história sobre testes de API
uma história sobre testes de API
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando Postman
 
Path to the future #2 - Internet das coisas com AWS IoT
Path to the future #2 - Internet das coisas com AWS IoTPath to the future #2 - Internet das coisas com AWS IoT
Path to the future #2 - Internet das coisas com AWS IoT
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
 
JAX-RS 2.0
JAX-RS 2.0JAX-RS 2.0
JAX-RS 2.0
 
GUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EEGUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EE
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EE
 
Workshop05
Workshop05Workshop05
Workshop05
 

Mais de Elias Nogueira

Coach por Imersão - Buscando a excelência técnica com o time
Coach por Imersão - Buscando a excelência técnica com o timeCoach por Imersão - Buscando a excelência técnica com o time
Coach por Imersão - Buscando a excelência técnica com o time
Elias Nogueira
 
O Agile Coach pode (e muitas vezes deve) ser técnico
O Agile Coach pode (e muitas vezes deve) ser técnicoO Agile Coach pode (e muitas vezes deve) ser técnico
O Agile Coach pode (e muitas vezes deve) ser técnico
Elias Nogueira
 
Create an architecture for web test automation
Create an architecture for web test automationCreate an architecture for web test automation
Create an architecture for web test automation
Elias Nogueira
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Elias Nogueira
 
Como 4 Agile Coaches trabalham em uma Transformação Ágil
Como 4 Agile Coaches trabalham em uma Transformação Ágil Como 4 Agile Coaches trabalham em uma Transformação Ágil
Como 4 Agile Coaches trabalham em uma Transformação Ágil
Elias Nogueira
 
BDD não é automação de teste - Scrum Gathering
BDD não é automação de teste - Scrum GatheringBDD não é automação de teste - Scrum Gathering
BDD não é automação de teste - Scrum Gathering
Elias Nogueira
 
Improve Yourself -- Learn the Skills, Join the Community - Tests
Improve Yourself -- Learn the Skills, Join the Community - TestsImprove Yourself -- Learn the Skills, Join the Community - Tests
Improve Yourself -- Learn the Skills, Join the Community - Tests
Elias Nogueira
 
BDD não é Automação de Testes
BDD não é Automação de TestesBDD não é Automação de Testes
BDD não é Automação de Testes
Elias Nogueira
 
Criando uma grid para execução de testes paralelo com Appium
Criando uma grid para execução de testes paralelo com AppiumCriando uma grid para execução de testes paralelo com Appium
Criando uma grid para execução de testes paralelo com Appium
Elias Nogueira
 
Como ter sucesso ministrando uma palestra técnica
Como ter sucesso ministrando uma palestra técnicaComo ter sucesso ministrando uma palestra técnica
Como ter sucesso ministrando uma palestra técnica
Elias Nogueira
 
Quais são os steps de que deve conter na sua pipeline?
Quais são os steps de que deve conter na sua pipeline?Quais são os steps de que deve conter na sua pipeline?
Quais são os steps de que deve conter na sua pipeline?
Elias Nogueira
 
Tem que testar mesmo?
Tem que testar mesmo?Tem que testar mesmo?
Tem que testar mesmo?
Elias Nogueira
 
Testes em todos os niveis de planejamento
Testes em todos os niveis de planejamentoTestes em todos os niveis de planejamento
Testes em todos os niveis de planejamento
Elias Nogueira
 
Coaching the Agile Coach
Coaching the Agile CoachCoaching the Agile Coach
Coaching the Agile Coach
Elias Nogueira
 
Trust Your Pipeline - Automatically Testing and End-to-End Java Application
Trust Your Pipeline - Automatically Testing and End-to-End Java ApplicationTrust Your Pipeline - Automatically Testing and End-to-End Java Application
Trust Your Pipeline - Automatically Testing and End-to-End Java Application
Elias Nogueira
 
O que é um Agile Coach
O que é um Agile CoachO que é um Agile Coach
O que é um Agile Coach
Elias Nogueira
 
Criando uma grid para execução de teste automatizado funcional e e2e
Criando uma grid para execução de teste automatizado funcional e e2eCriando uma grid para execução de teste automatizado funcional e e2e
Criando uma grid para execução de teste automatizado funcional e e2e
Elias Nogueira
 
A importancia de testes em todos os aspectos
A importancia de testes em todos os aspectosA importancia de testes em todos os aspectos
A importancia de testes em todos os aspectos
Elias Nogueira
 
Testes de ponta a ponta
Testes de ponta a pontaTestes de ponta a ponta
Testes de ponta a ponta
Elias Nogueira
 
O Testador Técnico
O Testador TécnicoO Testador Técnico
O Testador Técnico
Elias Nogueira
 

Mais de Elias Nogueira (20)

Coach por Imersão - Buscando a excelência técnica com o time
Coach por Imersão - Buscando a excelência técnica com o timeCoach por Imersão - Buscando a excelência técnica com o time
Coach por Imersão - Buscando a excelência técnica com o time
 
O Agile Coach pode (e muitas vezes deve) ser técnico
O Agile Coach pode (e muitas vezes deve) ser técnicoO Agile Coach pode (e muitas vezes deve) ser técnico
O Agile Coach pode (e muitas vezes deve) ser técnico
 
Create an architecture for web test automation
Create an architecture for web test automationCreate an architecture for web test automation
Create an architecture for web test automation
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
 
Como 4 Agile Coaches trabalham em uma Transformação Ágil
Como 4 Agile Coaches trabalham em uma Transformação Ágil Como 4 Agile Coaches trabalham em uma Transformação Ágil
Como 4 Agile Coaches trabalham em uma Transformação Ágil
 
BDD não é automação de teste - Scrum Gathering
BDD não é automação de teste - Scrum GatheringBDD não é automação de teste - Scrum Gathering
BDD não é automação de teste - Scrum Gathering
 
Improve Yourself -- Learn the Skills, Join the Community - Tests
Improve Yourself -- Learn the Skills, Join the Community - TestsImprove Yourself -- Learn the Skills, Join the Community - Tests
Improve Yourself -- Learn the Skills, Join the Community - Tests
 
BDD não é Automação de Testes
BDD não é Automação de TestesBDD não é Automação de Testes
BDD não é Automação de Testes
 
Criando uma grid para execução de testes paralelo com Appium
Criando uma grid para execução de testes paralelo com AppiumCriando uma grid para execução de testes paralelo com Appium
Criando uma grid para execução de testes paralelo com Appium
 
Como ter sucesso ministrando uma palestra técnica
Como ter sucesso ministrando uma palestra técnicaComo ter sucesso ministrando uma palestra técnica
Como ter sucesso ministrando uma palestra técnica
 
Quais são os steps de que deve conter na sua pipeline?
Quais são os steps de que deve conter na sua pipeline?Quais são os steps de que deve conter na sua pipeline?
Quais são os steps de que deve conter na sua pipeline?
 
Tem que testar mesmo?
Tem que testar mesmo?Tem que testar mesmo?
Tem que testar mesmo?
 
Testes em todos os niveis de planejamento
Testes em todos os niveis de planejamentoTestes em todos os niveis de planejamento
Testes em todos os niveis de planejamento
 
Coaching the Agile Coach
Coaching the Agile CoachCoaching the Agile Coach
Coaching the Agile Coach
 
Trust Your Pipeline - Automatically Testing and End-to-End Java Application
Trust Your Pipeline - Automatically Testing and End-to-End Java ApplicationTrust Your Pipeline - Automatically Testing and End-to-End Java Application
Trust Your Pipeline - Automatically Testing and End-to-End Java Application
 
O que é um Agile Coach
O que é um Agile CoachO que é um Agile Coach
O que é um Agile Coach
 
Criando uma grid para execução de teste automatizado funcional e e2e
Criando uma grid para execução de teste automatizado funcional e e2eCriando uma grid para execução de teste automatizado funcional e e2e
Criando uma grid para execução de teste automatizado funcional e e2e
 
A importancia de testes em todos os aspectos
A importancia de testes em todos os aspectosA importancia de testes em todos os aspectos
A importancia de testes em todos os aspectos
 
Testes de ponta a ponta
Testes de ponta a pontaTestes de ponta a ponta
Testes de ponta a ponta
 
O Testador Técnico
O Testador TécnicoO Testador Técnico
O Testador Técnico
 

De a máxima cobertura nos seus testes de API

  • 1. DÊ A MÁXIMA COBERTURA NOS SEUS TESTES DE API ELIAS NOGUEIRA @eliasnogueira
  • 3. 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
  • 4. SUT – System Under Test | Front-end Informar um CPF: • válido • que não esteja com restrição • não cadastrado
  • 5. SUT – System Under Test | Front-end Efetuar o cadastro respeitando as restrições
  • 6. SUT – System Under Test | Front-end Efetuar operações de CRUD
  • 7. Passos... 1 Entender a documentação da API 2 Pensar nos testes com uma divisão de pipeline 3 Criar uma versão inicial da arquitetura 4 Criar os testes e definir as suítes de testes
  • 9. Open API Swagger Ter a documentação correta e dentro de padrões é a melhor forma de entender a API e iniciar os testes .
  • 10. 2. Pensar nos testes com uma divisão de pipeline
  • 11. API Pipeline Health Check Contrato Funcional Aceitação Garantir que o endpoint está respondendo Garantir que o endpoint não teve seus atributos alterados Garantir que o endpoint funciona ou apresenta os resultados de falha esperados Garantir que um conjunto de endpoints funcionam como na UI
  • 13. Modelo 1 Um projeto de teste para cada microserviço + um projeto de testes de aceitação Como serão os projetos de teste? BACKEND TEST TEST TEST PROEJTO TESTE TEST PROJETO ACEITAÇÃO
  • 14. Modelo 2 Projeto único para todas as APIs Como serão os projetos de teste? BACKEND TEST PROEJTO TESTE
  • 15. Base Test Ponto centralizado para pré e pós condições de teste Builder Criação de métodos fluentes Data Factory Criação de dados de forma dinâmica e centralizada Data Driven Estratégia de utilização de dados nos testes Uso de Padrões de Projeto
  • 16. 4. Criar testes e definir as suítes de teste
  • 17. Rest-Assured http://rest-assured.io DSL Java para testar e validar APIs REST. import static io.restassured.RestAssured.*; import static org.hamcrest.Matchers.*; public class ExemploRestAssured { @Test public void boasVindas() { given(). param("nome", "Elias"). when(). post("/cadastro"). then(). body("mensagem", is("Olá Elias")); } }
  • 18. Rest-Assured http://rest-assured.io DSL Java para testar e validar APIs REST. import static io.restassured.RestAssured.*; import static org.hamcrest.Matchers.*; public class ExemploRestAssured { @Test public void boasVindas() { given(). param("nome", "Elias"). when(). post("/cadastro"). then(). body("mensagem", is("Olá Elias")); } } importação das bibliotecas necessárias
  • 19. Rest-Assured http://rest-assured.io DSL Java para testar e validar APIs REST. import static io.restassured.RestAssured.*; import static org.hamcrest.Matchers.*; public class ExemploRestAssured { @Test public void boasVindas() { given(). param("nome", "Elias"). when(). post("/cadastro"). then(). body("mensagem", is("Olá Elias")); } } pré-condição para a requisição
  • 20. Rest-Assured http://rest-assured.io DSL Java para testar e validar APIs REST. import static io.restassured.RestAssured.*; import static org.hamcrest.Matchers.*; public class ExemploRestAssured { @Test public void boasVindas() { given(). param("nome", "Elias"). when(). post("/cadastro"). then(). body("mensagem", is("Olá Elias")); } } ação (requisição)
  • 21. Rest-Assured http://rest-assured.io DSL Java para testar e validar APIs REST. import static io.restassured.RestAssured.*; import static org.hamcrest.Matchers.*; public class ExemploRestAssured { @Test public void boasVindas() { given(). param("nome", "Elias"). when(). post("/cadastro"). then(). body("mensagem", is("Olá Elias")); } } validação dos dados de retorno
  • 22. API health-check Health Check Contrato Funcional Aceitação Garantir que o endpoint está respondendo Garantir que o endpoint não teve seus atributos alterados Garantir que o endpoint funciona ou apresenta os resultados de falha esperados Garantir que um conjunto de endpoints funcionam como na UI
  • 23. heath-check Apenas validamos se a API está disponível Se existir alguma abordagem de verificação ou monitoramento validamos o status geral do retorno @Test(groups = "health") public void healthCheckViaActuator() { basePath = "/actuator"; when(). get("/health"). then(). statusCode(200). body("status", is("UP")); } @Test(groups = "health") public void healthCheckViaAPI() { given(). pathParam("cpf", "81016654049"). when(). get("/restricoes/{cpf}"). then(). statusCode(204); } via monitoramento via API
  • 24. API contrato Health Check Contrato Funcional Aceitação Garantir que o endpoint está respondendo Garantir que o endpoint não teve seus atributos alterados Garantir que o endpoint funciona ou apresenta os resultados de falha esperados Garantir que um conjunto de endpoints funcionam como na UI
  • 25. ● É o nome dado ao pacto entre o produtor e consumidor ● Garante que mudanças na API não invalidem o consumo: ● path ● parâmetros ● dados de envio (request) ● dados de retorno (response body) ● json-schema é um contrato que define os dados esperados, tipos e formatos de cada campo na resposta contrato
  • 26. { "nome": "Elias", "idade": 36 } { "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "properties": { "nome": { "type": "string" }, "idade": { "type": "integer" } }, "required": [ "nome", "idade" ], "additionalProperties": false } json-schema
  • 27. { "nome": "Elias", "idade": 36 } { "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "properties": { "nome": { "type": "string" }, "idade": { "type": "integer" } }, "required": [ "nome", "idade" ], "additionalProperties": false } json-schema possui o nome do atributo e o tipo de dados json-schema
  • 28. { "nome": "Elias", "idade": 36 } { "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "properties": { "nome": { "type": "string" }, "idade": { "type": "integer" } }, "required": [ "nome", "idade" ], "additionalProperties": false } os dois atributos devem estar presentes, obrigatoriamente json-schema
  • 29. { "nome": "Elias", "idade": 36 } { "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "properties": { "nome": { "type": "string" }, "idade": { "type": "integer" } }, "required": [ "nome", "idade" ], "additionalProperties": false } json-schema nenhum outro atributo é permitido
  • 30. API funcional Health Check Contrato Funcional Aceitação Garantir que o endpoint está respondendo Garantir que o endpoint não teve seus atributos alterados Garantir que o endpoint funciona ou apresenta os resultados de falha esperados Garantir que um conjunto de endpoints funcionam como na UI
  • 31. funcional Validar cenários positivos e negativos (caminho feliz | fluxo exceção) @Test(groups = {"funcional"}) public void cPFExistente() { given(). pathParam("cpf", "66414919004"). when(). get("/simulacoes/{cpf}"). then(). statusCode(200). body( "id", equalTo(1), "nome", equalTo("Fulano"), "cpf", equalTo("66414919004"), "email", equalTo("fulano@gmail.com"), "valor", equalTo(11000f), "parcelas", equalTo(3), "seguro", equalTo(true) ); } validação de dados
  • 32. API aceitação Health Check Contrato Funcional Aceitação Garantir que o endpoint está respondendo Garantir que o endpoint não teve seus atributos alterados Garantir que o endpoint funciona ou apresenta os resultados de falha esperados Garantir que um conjunto de endpoints funcionam como na UI
  • 33. Testar com a perspectiva do usuário ● Acessar a página e efetuar a consulta de restrição no CPF ● Inserir uma simulação de crédito
  • 34. aceitação @Test(groups = {"aceitacao"}) public void realizaSimulacaoCredito() { baseURI = "http://localhost"; port = 8088; basePath = "/api/v1"; String cpf = "12345678901"; // efetua a verificacao de cpf restrito given(). pathParam("cpf", cpf). when(). get("/restricoes/{cpf}"). then(). statusCode(204); // efetua a simulacao port = 8089; Simulacao simulacao = SimulacaoDataFactory.criaNovaSimulacao(); given(). contentType(ContentType.JSON). body(simulacao). when(). post("/simulacoes"). then(). statusCode(201); }
  • 35. aceitação @Test(groups = {"aceitacao"}) public void realizaSimulacaoCredito() { baseURI = "http://localhost"; port = 8088; basePath = "/api/v1"; String cpf = "12345678901"; // efetua a verificacao de cpf restrito given(). pathParam("cpf", cpf). when(). get("/restricoes/{cpf}"). then(). statusCode(204); // efetua a simulacao port = 8089; Simulacao simulacao = SimulacaoDataFactory.criaNovaSimulacao(); given(). contentType(ContentType.JSON). body(simulacao). when(). post("/simulacoes"). then(). statusCode(201); } requisição de consulta restrição
  • 36. aceitação @Test(groups = {"aceitacao"}) public void realizaSimulacaoCredito() { baseURI = "http://localhost"; port = 8088; basePath = "/api/v1"; String cpf = "12345678901"; // efetua a verificacao de cpf restrito given(). pathParam("cpf", cpf). when(). get("/restricoes/{cpf}"). then(). statusCode(204); // efetua a simulacao port = 8089; Simulacao simulacao = SimulacaoDataFactory.criaNovaSimulacao(); given(). contentType(ContentType.JSON). body(simulacao). when(). post("/simulacoes"). then(). statusCode(201); } requisição de simulação de crédito