Slide 1

Slide 1 text

Como criar projetos de teste modulares para microserviços Elias Nogueira

Slide 2

Slide 2 text

Elias Nogueira I help professional software engineers (backend, frontend, qa) to develop their quality mindset and deliver bug-free software so they become top-level engineers and get hired for the best positions in the market. Backbase Principal Software Engineer Utrecht, the Netherlands eliasnogueira.com @eliasnogueira bit.ly/eliasnogueira

Slide 3

Slide 3 text

Qual problema queremos resolver?

Slide 4

Slide 4 text

Implicitamente queremos… ● Aumentar da confiança na entrega ● Cobrir principais cenários de negócio ● Certeza que o teste encontrará uma possível falha depois de alguma modificação

Slide 5

Slide 5 text

Conceituação

Slide 6

Slide 6 text

APIs Individuais API API API API API API API API Cada microserviço é uma pequena funcionalidade sendo executada de maneira independente.

Slide 7

Slide 7 text

APIs Individuais Testes Unitários done! API API API API API API API API Cada API deve possuir seus testes unitários e integração.

Slide 8

Slide 8 text

API API API API API API API API Possível solução Criar testes funcionais e e2e para cobrir possíveis gaps e diminuir o teste na interface gráfica. Testes Funcionais & E2E

Slide 9

Slide 9 text

API API API API API API API API Possível solução Porque? Cada API pode ter uma dependência direta ou indireta. depende consom e

Slide 10

Slide 10 text

Como os projetos de teste podem ser criados?

Slide 11

Slide 11 text

Modelo 1 Um projeto de teste para todos os microserviço BACKEND TEST PROEJTO TESTE

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Modelo 2 Ganhos ● Descentralização organizada dos projetos de teste para com uma API ● Isolamento entre APIs Problemas ● Possíveis duplicidades de código

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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)

Slide 17

Slide 17 text

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!

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Exemplo de Implementação

Slide 20

Slide 20 text

Exemplo de Implementação Divisão de projeto BACKEND PROEJTO TESTE TEST TEST TEST CLIENT CLIENT CLIENT COMMONS PARENT

Slide 21

Slide 21 text

Divisão dos projetos CLIENT TEST COMMONS PARENT Projeto contendo todas as chamadas para o microserviço, sendo as chamadas com sucesso ou simulando exceções. Projeto contendo os testes para o microserviço, testando sua funcionalidade e dependências com outros microserviços. Código e bibliotecas comuns aos clients como definições de URLs, autenticação e qualquer outro código compartilhado. Código e bibliotecas comuns aos tests como massa de dados, funções de suporte ou qualquer código comum aos testes.

Slide 22

Slide 22 text

Exemplo dos Microserviços Possível interface gráfica: Verificação de Restrição pelo CPF

Slide 23

Slide 23 text

Exemplo dos Microserviços Possível interface gráfica: Simulação de Empréstimo

Slide 24

Slide 24 text

Exemplo dos Microserviços Colocaremos aqui toda a lógica necessária para efetuar as requisições como: RESTRICTIONS GET /api/v1/restricrions/{cpf} GET /api/v2/restricrions/{cpf} API de Consulta de Restrição SIMULATIONS GET /api/v1/simulations/ GET /api/v1/simulations/{cpf} POST /api/v1/simulations/ PUT /api/v1/simulations/{cpf} DELETE /api/v1/simulations/{cpf} API Simulação de Crédito

Slide 25

Slide 25 text

Implementação do client Métodos serão criados para simular todas as possíveis chamadas de cada método HTTP CLIENT RESTRICTIONS GET /api/v1/restricrions/{cpf} Client da Consulta de Restrição Método - consulta CPF com sucesso Método - consulta CPF e retorna restrição

Slide 26

Slide 26 text

CLIENT SIMULATIONS GET /api/v1/simulations/ GET /api/v1/simulations/{cpf} POST /api/v1/simulations/ Client da simulação de crédito Método – consulta simulações Método – consulta simulação Método – consulta simulação e retorna not found Método – submete simulação Método – submete simulação e retorna unprocessable entity Método – submete simulação e retorna conflict Métodos serão criados para simular todas as possíveis chamadas de cada método HTTP Implementação do client

Slide 27

Slide 27 text

CLIENT SIMULATIONS POST /api/v1/simulations/ Client da simulação de crédito Método – submete simulação Um método de teste será criado para uma ou mais uso dos métodos no client Implementação do test TEST SIMULATIONS deve criar uma simulação com sucesso - Teste Projeto de teste da simulação

Slide 28

Slide 28 text

CLIENT SIMULATIONS POST /api/v1/simulations/ Client da simulação de crédito Método – submete simulação Método – submete simulação e retorna unprocessable entity Um método de teste será criado para uma ou mais uso dos métodos no client Implementação do test TEST SIMULATIONS deve criar uma simulação com sucesso deve apresentar erro quando atributo não for submetido - Teste - Teste Projeto de teste da simulação

Slide 29

Slide 29 text

CLIENT SIMULATIONS POST /api/v1/simulations/ Client da simulação de crédito Método – submete simulação Método – submete simulação e retorna unprocessable entity Método – submete simulação e retorna conflict Um método de teste será criado para uma ou mais uso dos métodos no client Implementação do test TEST SIMULATIONS deve criar uma simulação com sucesso deve apresentar erro quando atributo não for submetido deve apresentar conflito quando CPF já existir - Teste - Teste - Teste Projeto de teste da simulação

Slide 30

Slide 30 text

Como associar o client <-> test?

Slide 31

Slide 31 text

Como associar o client <-> test? Através da versão do client ● Devemos adicionar a dependência do client no test com.eliasnogueira simulations-client 1.2.5 "devDependencies": { "@eliasnogueira/simulations-client": ”1.2.5", } Exemplo Java + Maven Exemplo Typescript + Node

Slide 32

Slide 32 text

Como associar o client <-> test? Ganho: associação do client com a versão do microserviço Assim como o microserviço evolui o client e o test também evoluem. Adicionar um changelog com a associação da versão do client com a versão do microserviço pode ajudar na correção de bugs.

Slide 33

Slide 33 text

Recapitulando

Slide 34

Slide 34 text

Recapitulando ● Criamos um modelo robusto para ○ testar um microserviço isoladamente (teste funcional) ○ testar um microserviço e suas dependências (e2e) ● Modularizamos a criação dos projetos ○ client: toda a chamada de API para um microserviço ○ test: projeto de teste utilizando o client do microserviço ○ commons: codigos e bibliotecas do client ○ parent: código e bibliotecas do test

Slide 35

Slide 35 text

Gratuito! SCAN ME https://leanpub.com/testando-microservices-com-restassured

Slide 36

Slide 36 text

Obrigado! SCAN ME Você pode me seguir no Twitter @eliasnogueira e também encontrar os exemplos práticos desta apresentação. Não deixe de simular os exemplos no código!

Slide 37

Slide 37 text

Projetos • https://github.com/eliasnogueira/test-parent • https://github.com/eliasnogueira/test-commons • https://github.com/eliasnogueira/restrictions-client • https://github.com/eliasnogueira/restrictions-test • https://github.com/eliasnogueira/simulations-client • https://github.com/eliasnogueira/simulations-test