Synthetic Testing
A arte de combinar automação de testes com monitoramento das aplicações
Uma breve introdução..
Há algumas semanas atrás fui indagado se conhecia sobre Synthetic Testing pelo meu chefe. Admito que até aquele dia nunca tinha ouvido falar a respeito sobre o tema e antes de sair pesquisando o que realmente significava já imaginei comigo mesmo diversas possibilidades.
Comecei a pesquisar até que encontrei um artigo super bem detalhado no site do Martin Fowler, um dos gurus do Manifesto Ágil.
Assim, a ideia desse artigo é apenas o de contextualizar o que foi explicado pelo Martin Fowler e quem sabe em um futuro post, mostrar através de um exemplo prático como podemos implementar no nosso dia a dia.
Synthetic Testing
Ou também conhecido como Synthetic Monitoring nada mais é do que uma forma de executarmos automações de teste com ênfase em métricas. Ainda não ficou claro? Vamos explanar um pouco mais a respeito.
O intuito de quando escrevemos testes é que estes melhorem a qualidade dos nossos serviços, garantindo que possíveis bugs não afetem e também que não sejam identificados pelos usuários finais.
A ideia dessa técnica é a de executar esporadicamente durante o dia um subconjunto de testes apontando diretamente para produção. E este subconjunto deverá possuir características próprias para que possam ser identificados pelas ferramentas de monitoramento. Dessa forma tais métricas não irão interferir nos dados extraídos pela utilização dos usuários reais.
Uma vez que problemas forem encontrados durante a execução dos testes, a própria ferramenta de monitoração se encarregará de notificar os envolvidos para a análise/correção.
Abaixo podemos ver uma imagem exemplificando o que foi dito anteriormente:
Ou seja, um conjunto de testes é executado no ambiente de staging mas queremos que os cenários mais críticos e/ou os que apresentam mais problemas para os usuários sejam executados diretamente em produção ao longo do dia.
Estes testes por possuirem características próprias são captados pelas ferramentas de monitoração de uma forma apartada e não levados em conta pela área de dados da empresa.
Identificando os dados fakes dos reais
Há diversas formas de identificarmos uma ação realizada por um robô. Podemos por exemplo, em comum acordo entre quem irá escrever os testes automatizados e quem irá consumir os dados, definir prefixos ou sufixos que serão utilizados apenas pelos scripts de teste. Por exemplo, em um cadastro o domínio do e-mail será sempre formado por: @beyondtest.fake
Ou também caso estivermos testando uma API diretamente, podemos enviar um header específico que será utilizado apenas nos testes:
Pra encerrar vou deixar uma frase que li a um tempo atrás e que faz todo sentido com esse post:
Próximos passos
Acredito que o post tenha deixado claro a necessidade dos testes automatizados e o quão importante é realizarmos o monitoramento das nossas aplicações. Normalmente o monitoramento é feito apenas do lado das aplicações mas porque não monitorarmos nossos testes também?
Como próximo passo iremos criar uma suíte de testes automatizados que irão enviar informações específicas apenas para que sejam consumidadas por um dashboard de monitoramento. Sugestões de qual ferramenta utilizar pra automatizar? Ou qual pra monitorar? Manda nos comentários :)
Referências: