SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
Globalcode – Open4education
Trilha – Ruby
Testes de contrato em um
contexto de services e
microservices
Globalcode – Open4education
Quem sou eu?
Bruno Tanoue
QA Engineer
@ResultadosDigitais
Globalcode – Open4education
Agenda
• O que são testes de contrato?
• Arquitetura de testes de contrato em
(micro)serviços
• Teste de contrato em (micro)serviços internos
• Teste de contrato em serviços de terceiros
(públicos)
• Pacto & Pact
• Case: Testes de Contrato na API do Facebook
Globalcode – Open4education
Motivação
• Março 2016
• 2 incidentes por causa de atualização de versão de
API’s (facebook e twitter).
• Com a atualização, foram modificadas algumas
chamadas e dados de retorno.
• Essa modificação fez com que algumas features
nossas ficassem inconsistentes e parassem de
funcionar.
Globalcode – Open4education
Motivação
Globalcode – Open4education
O que são testes de contrato?
• Em um contexto de testes unitários
• Descrever a interface de programação disponível em um
objeto.
• Métodos e parâmetros.
• Garantir que o objeto possua os métodos que estão
sendo simulados com mocks/stubs em algum teste.
http://shipit.resultadosdigitais.com.br/blog/usando-testes-de-contrato-e-colaboracao/
Globalcode – Open4education
O que são testes de contrato?
• Services e microservices
• Stubs - comunicações.
• Como garantir que este stub represente realmente a
comunicação real?
Testes de contrato em contexto de
services e microservices
(Teste de Contrato de Integração)
Globalcode – Open4education
O que são testes de contrato?
• Em um contexto de services e microservices
http://martinfowler.com/bliki/IntegrationContractTest.html
Globalcode – Open4education
O que são testes de contrato?
• O que é um contrato?
• Arquivo (ex: JSON)
• Requisição
• Resposta
• Tipagem dos dados da resposta
• Exemplos de dados de resposta
Globalcode – Open4education
O que são testes de contrato?
• Requisição
Globalcode – Open4education
O que são testes de contrato?
• Resposta
Globalcode – Open4education
O que são testes de contrato?
• Tipagem dos dados da resposta
Globalcode – Open4education
O que são testes de contrato?
• Em um contexto de services e microservices
• Verificar a validade do stub
• Suíte de testes separada
• Executar uma vez ao dia
Globalcode – Open4education
Arquitetura de testes de
contrato em (micro)serviços
• Mas e a abordagem de Teste de Integração?
Consumidor Serviço BD
X Y Z
T T
Globalcode – Open4education
Arquitetura de testes de
contrato em (micro)serviços
• Teste de Contrato do lado do Consumidor
Consumidor Stub
X BUILD REGULAR
Consumidor
X”
Contrato
Serviço
T
Globalcode – Open4education
Arquitetura de testes de
contrato em (micro)serviços
• Teste de Contrato do lado do Serviço
BUILD REGULAR
Serviço BD
Contrato
(Simulação)
Y Z
T
Globalcode – Open4education
Arquitetura de testes de
contrato em (micro)serviços
• Vantagens em relação aos testes de integração:
• Execução rápida
• Redução de testes flakey(falso positivo)
• Fácil identificação do erro.
• O fluxo de integração pode executar múltiplos serviços.
Globalcode – Open4education
Teste de contrato em
(micro)serviços internos
• Características
• Propriedade do código.
• Maior controle e também um teste mais rápido e fácil.
• Auxilia a aplicar o padrão Consumer Driven-Contracts
Consumidor 1
Provedor de ServiçoConsumidor 2
Consumidor 3
Contrato
Contrato
Contrato
http://martinfowler.com/articles/consumerDrivenContracts.html
Globalcode – Open4education
Teste de contrato em serviços
de terceiros (públicos)
• O que são serviços de terceiros(públicos)?
• API’s externas das quais não temos controle sobre o
código fonte e sobre suas alterações.
http://graph.facebook.com http://api.twitter.com http://api.linkedin.com
Globalcode – Open4education
Teste de contrato em serviços
de terceiros (públicos)
• Características
• Não existe propriedade do código da api.
• Adaptação ao serviço já existente.
• Nenhum controle das alterações do service.
Globalcode – Open4education
A solução?
• Estudo e implementação de testes de contrato
para essas API’s.
● POC das gems Pacto e Pact.
● Criação dos testes de contrato para o Facebook.
● Inclusão dos testes no build noturno.
Globalcode – Open4education
Pact & Pacto
TW Radar (Julho 2014/ Janeiro 2015)
Globalcode – Open4education
Pact
• Basicamente o Pact é indicado para
(micro)services criados do zero.
+ Tem suporte para diagramas.
+ Documentação das API’s baseada na criação dos testes.
+ Documentação mais detalhada.
- O contrato é gerado a partir da criação do teste.
- Utiliza rake.
- A própria documentação do Pact indica utilizar o Pacto
para teste de API’s de terceiros.
https://github.com/realestate-com-au/pact
Globalcode – Open4education
Pact
Diagrama - Gems pact + pact_broker
Globalcode – Open4education
Pact
Documentação autogerada - Gems pact + pact_broker
Globalcode – Open4education
Pacto
• O Pacto é indicado para testes de serviços de
terceiros.
+ O contrato é gerado automaticamente a partir da
requisição para a api.
+ Utiliza Rspec ou rake.
+ É mais fácil de utilizar.
- Documentação menos detalhada.
- Não possui gráficos e nem documentação das API’s.
https://github.com/thoughtworks/pacto
Globalcode – Open4education
Pacto
• Pacto.generate! -> Primeira execução
• Pacto.load_contracts(path, base_url)
• <api request>
• expect(Pacto).to have_validated(:method,
api_url).against_contract(/contract.json/)
Globalcode – Open4education
Case: Testes de Contrato na
API do Facebook
• Dificuldades encontradas na automação dos testes
da api do Facebook
• A gem pacto trabalha bem com arquiteturas REST bem
definidas.
• A api do Facebook tem uma arquitetura REST, contudo
faz um grande uso de query params.
• O filtro de headers não é muito efetivo. Os matchers
falham por questões de letras maiúsculas e minúsculas.
Solução: Criar um fork da gem e fazer commits para
contornar o problema.
Globalcode – Open4education
Case: Testes de Contrato na
API do Facebook
• Path params:
Path: "/v2.5/me/accounts" -> OK!
• Path + Query params:
Path:
"/v2.5/me/accounts?access_token=<HASH_TOKEN>&limit=2
00&type=page" -> NOK!
Problema: Gera o contrato, mas na seguinte
execução do teste o contrato não é encontrado.
Globalcode – Open4education
Case: Testes de Contrato na
API do Facebook
Globalcode – Open4education
Case: Testes de Contrato na
API do Facebook
Globalcode – Open4education
Case: Testes de Contrato na
API do Facebook
Globalcode – Open4education
Case: Testes de Contrato na
API do Facebook
• Resultados obtidos
• Diminuição de linhas de código do spec de integração
• facebook_contract_spec.rb -> 86 linhas
• facebook_client_spec.rb -> 526 linhas
• “Contratos” jogados no meio do código.
• Simulação de atualização da api do Facebook da versão
2.5 para 2.7 quebrou um endpoint.
Globalcode – Open4education
Próximos Passos
Globalcode – Open4education
Próximos Passos
• Explorar o Pact para construção de microservices
• Testes de contrato do LinkedIn e Twitter
Globalcode – Open4education
Dúvidas?
bruno.tanoue@resultadosdigitais.com.br
https://linkedin.com/in/brunotanoue
twitter: @brunotanoue

Mais conteúdo relacionado

Mais procurados

O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 Gabriel Machado
 
[ATC] Testando sua API com HTTPARTY e Rodando em um CI
[ATC] Testando sua API com HTTPARTY e Rodando em um CI[ATC] Testando sua API com HTTPARTY e Rodando em um CI
[ATC] Testando sua API com HTTPARTY e Rodando em um CINathanael Silva
 
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 PostmanLucas Amaral
 
Apresentação TDC2015
Apresentação TDC2015Apresentação TDC2015
Apresentação TDC2015Bruno Murawski
 
Criando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredCriando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredElias Nogueira
 
Automação e virtualização de serviços
Automação e virtualização de serviçosAutomação e virtualização de serviços
Automação e virtualização de serviçosElias Nogueira
 
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a ServiçosContinuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a ServiçosSamanta Cicilia
 

Mais procurados (9)

O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
 
[ATC] Testando sua API com HTTPARTY e Rodando em um CI
[ATC] Testando sua API com HTTPARTY e Rodando em um CI[ATC] Testando sua API com HTTPARTY e Rodando em um CI
[ATC] Testando sua API com HTTPARTY e Rodando em um CI
 
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
 
Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
 
Apresentação TDC2015
Apresentação TDC2015Apresentação TDC2015
Apresentação TDC2015
 
Criando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredCriando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssured
 
Testes de contrato
Testes de contratoTestes de contrato
Testes de contrato
 
Automação e virtualização de serviços
Automação e virtualização de serviçosAutomação e virtualização de serviços
Automação e virtualização de serviços
 
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a ServiçosContinuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
 

Semelhante a Testes de contrato em um contexto de services e microservices tdc-poa2016

ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeAndré Abe Vicente
 
Arquitetura monolítica à orientação a serviços
Arquitetura monolítica à orientação a serviçosArquitetura monolítica à orientação a serviços
Arquitetura monolítica à orientação a serviçosRyan Padilha
 
Desenvolvimento de Aplicações Web AngularJS no Contexto da IoT
Desenvolvimento de Aplicações Web AngularJS no Contexto da IoTDesenvolvimento de Aplicações Web AngularJS no Contexto da IoT
Desenvolvimento de Aplicações Web AngularJS no Contexto da IoTRodrigo Fortes
 
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidadeTDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidadeStefan Teixeira
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...Bruno Tanoue
 
Iac & DevOps no Azure: Automatizando deployments
Iac & DevOps no Azure: Automatizando deploymentsIac & DevOps no Azure: Automatizando deployments
Iac & DevOps no Azure: Automatizando deploymentsRicardo Martins ☁
 
Monitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application InsightsMonitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application InsightsRenato Groff
 
Containers e DevOps
Containers e DevOps Containers e DevOps
Containers e DevOps Raul Leite
 
Kubernetes New Contributors Workshop - Brasil 2022
Kubernetes New Contributors Workshop - Brasil 2022Kubernetes New Contributors Workshop - Brasil 2022
Kubernetes New Contributors Workshop - Brasil 2022Ricardo Katz
 
K6 - Teste de Carga e Desempenho.pptx
K6 - Teste de Carga e Desempenho.pptxK6 - Teste de Carga e Desempenho.pptx
K6 - Teste de Carga e Desempenho.pptxGdfr2
 
Buscapé 2.0 - Como mudamos uma empresa em 1 ano
Buscapé 2.0 - Como mudamos uma empresa em 1 anoBuscapé 2.0 - Como mudamos uma empresa em 1 ano
Buscapé 2.0 - Como mudamos uma empresa em 1 anoThiago Freitas
 
Monitorando serviços REST com o Application Insights e Distributed Tracing
Monitorando serviços REST com o Application Insights e Distributed TracingMonitorando serviços REST com o Application Insights e Distributed Tracing
Monitorando serviços REST com o Application Insights e Distributed TracingRenato Groff
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsSamanta Cicilia
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...minastestingconference
 
DevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeKamilla Queiroz Xavier
 
RPA - Portfólio de Serviços iProcess com RPA uiPath
RPA - Portfólio de Serviços iProcess com RPA uiPathRPA - Portfólio de Serviços iProcess com RPA uiPath
RPA - Portfólio de Serviços iProcess com RPA uiPathEduardo Britto
 
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021Mauricio Bitencourt, CBPP
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservicestdc-globalcode
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Renato Groff
 

Semelhante a Testes de contrato em um contexto de services e microservices tdc-poa2016 (20)

ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
 
Arquitetura monolítica à orientação a serviços
Arquitetura monolítica à orientação a serviçosArquitetura monolítica à orientação a serviços
Arquitetura monolítica à orientação a serviços
 
Desenvolvimento de Aplicações Web AngularJS no Contexto da IoT
Desenvolvimento de Aplicações Web AngularJS no Contexto da IoTDesenvolvimento de Aplicações Web AngularJS no Contexto da IoT
Desenvolvimento de Aplicações Web AngularJS no Contexto da IoT
 
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidadeTDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
 
Iac & DevOps no Azure: Automatizando deployments
Iac & DevOps no Azure: Automatizando deploymentsIac & DevOps no Azure: Automatizando deployments
Iac & DevOps no Azure: Automatizando deployments
 
Monitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application InsightsMonitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application Insights
 
Containers e DevOps
Containers e DevOps Containers e DevOps
Containers e DevOps
 
Kubernetes New Contributors Workshop - Brasil 2022
Kubernetes New Contributors Workshop - Brasil 2022Kubernetes New Contributors Workshop - Brasil 2022
Kubernetes New Contributors Workshop - Brasil 2022
 
K6 - Teste de Carga e Desempenho.pptx
K6 - Teste de Carga e Desempenho.pptxK6 - Teste de Carga e Desempenho.pptx
K6 - Teste de Carga e Desempenho.pptx
 
Buscapé 2.0 - Como mudamos uma empresa em 1 ano
Buscapé 2.0 - Como mudamos uma empresa em 1 anoBuscapé 2.0 - Como mudamos uma empresa em 1 ano
Buscapé 2.0 - Como mudamos uma empresa em 1 ano
 
Monitorando serviços REST com o Application Insights e Distributed Tracing
Monitorando serviços REST com o Application Insights e Distributed TracingMonitorando serviços REST com o Application Insights e Distributed Tracing
Monitorando serviços REST com o Application Insights e Distributed Tracing
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
 
DevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a Qualidade
 
RPA - Portfólio de Serviços iProcess com RPA uiPath
RPA - Portfólio de Serviços iProcess com RPA uiPathRPA - Portfólio de Serviços iProcess com RPA uiPath
RPA - Portfólio de Serviços iProcess com RPA uiPath
 
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
 
Um pouco sobre APIs
Um pouco sobre APIsUm pouco sobre APIs
Um pouco sobre APIs
 

Testes de contrato em um contexto de services e microservices tdc-poa2016

  • 1. Globalcode – Open4education Trilha – Ruby Testes de contrato em um contexto de services e microservices
  • 2. Globalcode – Open4education Quem sou eu? Bruno Tanoue QA Engineer @ResultadosDigitais
  • 3. Globalcode – Open4education Agenda • O que são testes de contrato? • Arquitetura de testes de contrato em (micro)serviços • Teste de contrato em (micro)serviços internos • Teste de contrato em serviços de terceiros (públicos) • Pacto & Pact • Case: Testes de Contrato na API do Facebook
  • 4. Globalcode – Open4education Motivação • Março 2016 • 2 incidentes por causa de atualização de versão de API’s (facebook e twitter). • Com a atualização, foram modificadas algumas chamadas e dados de retorno. • Essa modificação fez com que algumas features nossas ficassem inconsistentes e parassem de funcionar.
  • 6. Globalcode – Open4education O que são testes de contrato? • Em um contexto de testes unitários • Descrever a interface de programação disponível em um objeto. • Métodos e parâmetros. • Garantir que o objeto possua os métodos que estão sendo simulados com mocks/stubs em algum teste. http://shipit.resultadosdigitais.com.br/blog/usando-testes-de-contrato-e-colaboracao/
  • 7. Globalcode – Open4education O que são testes de contrato? • Services e microservices • Stubs - comunicações. • Como garantir que este stub represente realmente a comunicação real? Testes de contrato em contexto de services e microservices (Teste de Contrato de Integração)
  • 8. Globalcode – Open4education O que são testes de contrato? • Em um contexto de services e microservices http://martinfowler.com/bliki/IntegrationContractTest.html
  • 9. Globalcode – Open4education O que são testes de contrato? • O que é um contrato? • Arquivo (ex: JSON) • Requisição • Resposta • Tipagem dos dados da resposta • Exemplos de dados de resposta
  • 10. Globalcode – Open4education O que são testes de contrato? • Requisição
  • 11. Globalcode – Open4education O que são testes de contrato? • Resposta
  • 12. Globalcode – Open4education O que são testes de contrato? • Tipagem dos dados da resposta
  • 13. Globalcode – Open4education O que são testes de contrato? • Em um contexto de services e microservices • Verificar a validade do stub • Suíte de testes separada • Executar uma vez ao dia
  • 14. Globalcode – Open4education Arquitetura de testes de contrato em (micro)serviços • Mas e a abordagem de Teste de Integração? Consumidor Serviço BD X Y Z T T
  • 15. Globalcode – Open4education Arquitetura de testes de contrato em (micro)serviços • Teste de Contrato do lado do Consumidor Consumidor Stub X BUILD REGULAR Consumidor X” Contrato Serviço T
  • 16. Globalcode – Open4education Arquitetura de testes de contrato em (micro)serviços • Teste de Contrato do lado do Serviço BUILD REGULAR Serviço BD Contrato (Simulação) Y Z T
  • 17. Globalcode – Open4education Arquitetura de testes de contrato em (micro)serviços • Vantagens em relação aos testes de integração: • Execução rápida • Redução de testes flakey(falso positivo) • Fácil identificação do erro. • O fluxo de integração pode executar múltiplos serviços.
  • 18. Globalcode – Open4education Teste de contrato em (micro)serviços internos • Características • Propriedade do código. • Maior controle e também um teste mais rápido e fácil. • Auxilia a aplicar o padrão Consumer Driven-Contracts Consumidor 1 Provedor de ServiçoConsumidor 2 Consumidor 3 Contrato Contrato Contrato http://martinfowler.com/articles/consumerDrivenContracts.html
  • 19. Globalcode – Open4education Teste de contrato em serviços de terceiros (públicos) • O que são serviços de terceiros(públicos)? • API’s externas das quais não temos controle sobre o código fonte e sobre suas alterações. http://graph.facebook.com http://api.twitter.com http://api.linkedin.com
  • 20. Globalcode – Open4education Teste de contrato em serviços de terceiros (públicos) • Características • Não existe propriedade do código da api. • Adaptação ao serviço já existente. • Nenhum controle das alterações do service.
  • 21. Globalcode – Open4education A solução? • Estudo e implementação de testes de contrato para essas API’s. ● POC das gems Pacto e Pact. ● Criação dos testes de contrato para o Facebook. ● Inclusão dos testes no build noturno.
  • 22. Globalcode – Open4education Pact & Pacto TW Radar (Julho 2014/ Janeiro 2015)
  • 23. Globalcode – Open4education Pact • Basicamente o Pact é indicado para (micro)services criados do zero. + Tem suporte para diagramas. + Documentação das API’s baseada na criação dos testes. + Documentação mais detalhada. - O contrato é gerado a partir da criação do teste. - Utiliza rake. - A própria documentação do Pact indica utilizar o Pacto para teste de API’s de terceiros. https://github.com/realestate-com-au/pact
  • 24. Globalcode – Open4education Pact Diagrama - Gems pact + pact_broker
  • 25. Globalcode – Open4education Pact Documentação autogerada - Gems pact + pact_broker
  • 26. Globalcode – Open4education Pacto • O Pacto é indicado para testes de serviços de terceiros. + O contrato é gerado automaticamente a partir da requisição para a api. + Utiliza Rspec ou rake. + É mais fácil de utilizar. - Documentação menos detalhada. - Não possui gráficos e nem documentação das API’s. https://github.com/thoughtworks/pacto
  • 27. Globalcode – Open4education Pacto • Pacto.generate! -> Primeira execução • Pacto.load_contracts(path, base_url) • <api request> • expect(Pacto).to have_validated(:method, api_url).against_contract(/contract.json/)
  • 28. Globalcode – Open4education Case: Testes de Contrato na API do Facebook • Dificuldades encontradas na automação dos testes da api do Facebook • A gem pacto trabalha bem com arquiteturas REST bem definidas. • A api do Facebook tem uma arquitetura REST, contudo faz um grande uso de query params. • O filtro de headers não é muito efetivo. Os matchers falham por questões de letras maiúsculas e minúsculas. Solução: Criar um fork da gem e fazer commits para contornar o problema.
  • 29. Globalcode – Open4education Case: Testes de Contrato na API do Facebook • Path params: Path: "/v2.5/me/accounts" -> OK! • Path + Query params: Path: "/v2.5/me/accounts?access_token=<HASH_TOKEN>&limit=2 00&type=page" -> NOK! Problema: Gera o contrato, mas na seguinte execução do teste o contrato não é encontrado.
  • 30. Globalcode – Open4education Case: Testes de Contrato na API do Facebook
  • 31. Globalcode – Open4education Case: Testes de Contrato na API do Facebook
  • 32. Globalcode – Open4education Case: Testes de Contrato na API do Facebook
  • 33. Globalcode – Open4education Case: Testes de Contrato na API do Facebook • Resultados obtidos • Diminuição de linhas de código do spec de integração • facebook_contract_spec.rb -> 86 linhas • facebook_client_spec.rb -> 526 linhas • “Contratos” jogados no meio do código. • Simulação de atualização da api do Facebook da versão 2.5 para 2.7 quebrou um endpoint.
  • 35. Globalcode – Open4education Próximos Passos • Explorar o Pact para construção de microservices • Testes de contrato do LinkedIn e Twitter