denisismagilov - Fotolia
Uma lição sobre como testar microsserviços localmente
Os microsserviços são pequenas partes do quadro geral, portanto, são difíceis de testar isoladamente. Use essas dicas para executar testes de unidade e integração localmente em microsserviços.
Nos primeiros dias dos microsserviços, um desenvolvedor escreveu 20 linhas de código e depois registrou um subdomínio em um endereço IP e porta. Dez anos depois, esse processo é ainda mais fácil. Com a ajuda da nuvem e da abstração sem servidor, os desenvolvedores podem escrever o código, publicá-lo em um ambiente de controle de versão e conectar um sistema a esse código; gerenciamento de servidor, dimensionamento e outros processos de back-end são tratados na nuvem.
Mas como esses aplicativos baseados em microsserviços hospedados em nuvem são testados localmente? Você pode testar em uma máquina local, ou pelo menos em um contêiner local, antes de enviar seu código para um ambiente de teste. No entanto, um aplicativo típico baseado em microsserviços chama até 60 serviços separados. Para testar esses aplicativos complexos localmente, você precisará montar cada serviço individual, e provavelmente os bancos de dados subjacentes, na máquina local. O teste de microsserviços localmente geralmente envolve a execução de meia dúzia de sessões de terminal em uma máquina.
Uma opção melhor é separar e isolar serviços, o que é sempre uma boa ideia ao realizar testes de unidade ou testes de integração em arquiteturas de aplicativos complexas. Primeiro, revisaremos o processo de teste de microsserviços localmente, incluindo testes de unidade e integração. Em seguida, veremos algumas técnicas eficazes para isolamento de serviço, como virtualização de serviço e clusters de teste de nuvem privada.
Isolar componentes
Com uma estrutura de teste, como JUnit para código Java, é possível testar partes de um aplicativo baseado em microsserviços como unidades individuais. Quando essas pequenas coleções de métodos testáveis estão em uma dependência, como uma conexão de banco de dados, você pode usar a injeção de dependência para criar os stubs, simulações e spoofs necessários para testar o serviço com precisão. Quando se trata de testes de unidade simples, existem padrões fáceis de aprender, como o padrão Arrange, Act e Assert. Organizar, Agir e Afirmar requer configuração, ação e, em seguida, a validação de um resultado.
Testar um serviço enquanto ele está em execução, integrado a outros componentes, é uma questão diferente. Os testes de integração são um pouco mais complicados do que os testes de unidade. Em vez de criar simulações em nível de unidade, projete testes para imitar as muitas integrações envolvidas, de maneira realista.
A virtualização de serviço é uma forma de registrar a resposta de um serviço a uma determinada chamada e, em seguida, reproduzir a sequência sob demanda. Essa abordagem fornece um modelo de serviço previsível e leve que você pode testar conforme necessário. E é provável que simule ou elimine os bancos de dados e outros componentes externos com os quais interage.
Quando você não consegue isolar microsserviços
A virtualização de serviço, a alteração de dependências e os sinalizadores de teste podem ser difíceis de configurar. Você precisa de experiência nesse tipo de codificação. E os grupos de arquitetura podem querer ditar a maneira "certa" de lidar com os serviços de teste ou impedir que as equipes de desenvolvimento adotem novas ferramentas de virtualização.
Se você não pode alterar diretamente seu código para executar testes de microsserviços localmente conforme descrito acima, tente criar um novo ambiente que contenha toda a coleção de serviços que você deseja testar. Para fazer isso, implemente um mecanismo que verifique e identifique cada dependência. Pact.io é uma ferramenta de teste de contrato de código aberto que pode fazer isso; Microservice Graph Explorer é outro.
Depois de identificar os serviços e suas dependências a serem testados, crie contêineres que possam executar o serviço e conectá-los ao mesmo banco de dados de teste. Em seguida, crie um cluster de teste (use uma nuvem pública ou privada) que contenha os serviços reais e os dados simulados. Você pode ficar tentado a executar esses testes localmente em um desktop, pois não precisará de autorizações ou licenças para fazê-lo. No entanto, a simulação de vários serviços em um desktop, juntamente com a sobrecarga de um administrador de cluster, causa problemas de desempenho.
Essa técnica de criar todas as dependências de um serviço e imitar o que é apropriado é essencialmente um projeto de infraestrutura. Vai demorar muito e vai ser um pouco caro. No entanto, depois de criado, você terá a oportunidade de realmente testar os microsserviços de forma isolada.