Testes de Fluxos Poliglotas cover

Testes de Fluxos Poliglotas

Nem tudo é um mar de rosas na reatividade.

16/Jul/2018
4 minutos

Como vimos no capítulo sobre fluxos poliglotas, é razoável que múltiplos protocolos coexistam em um mesmo ecossistema de software.

Essa gigantesca combinação de mensagens, sistemas e protocolos potencializam mal-entendidos e ambiguidades. Aumentando a complexidade de desenvolvimento e manutenção dos serviços. Diante disso, questiona-se: como podem ser testados tais sistemas?

Ferramentas existentes

Um dos motivos citados para o eventual fracasso de SOA (Service-Oriented Architecture) foi a escassez de ferramentas maduras, fazendo com que a interoperabilidade se tornasse um pesadelo, especialmente quando serviços parassem de aderir aos próprios contratos publicados pelos próprios serviços, o que é inevitável em muitos contextos.

Hoje em dia, após o ocaso do SOA, acham-se muitas ferramentas no mercado, cada qual com sua vantagem e desvantagem. Por conta da predominância na comunidade, algumas são dignas de serem mencionadas.

Abaixo, analiso e faço uma comparação nas principais ferramentas disponíveis no mercado.

Postman

Postman é uma aplicação espetacular. Não é a toa que a própria a ferramenta orgulhosamente anuncia ser usada por 5 milhões de desenvolvedores e mais de 100.000 companhias para acessar 130 milhões de APIs todo mês. É número pra dedéu!

Existem bons motivos para isso: é muito fácil de usar, inclusive por não programadores. Basta apertar dois ou três botões e voilà. É facilmente integrável com CI e fornece opções de encadeamento de requisições consecutivas.

Contudo, apesar de explorar exaustivamente inúmeras propriedades do universo HTTP é também limitada a esse contexto. Como sabemos, sistemas reativos não se resumem a HTTP. Pelo contrário, comunicações síncronas são desencorajadas por promover o acoplamento entre componentes.

Logo, Postman deixa a desejar por desconsiderar fluxos multi protocolos _IPC_s. Acredito também que a falta de reforço na funcionalidade de testes e da execução de runners faz com que a ferramenta perca alguns pontos.

Mountebank

É uma ferramenta que suporta múltiplos protocolos. Para ser exato: TCP, SMTP e HTTP/HTTPS com uma atenção mais do que especial_._

Mountebank expõe uma API HTTP para configuração e oferece, principalmente stubs e proxies para execução de testes. Por meio de impostores é possível simular a resposta de sistemas do fluxo, realizar parsings interessantes com predicados e asserções em cima do conteúdo das mensagens.

Contudo, deixa a desejar em alguns pontos: a falta de atenção a protocolos assíncronos, quantidade de protocolos suportados e a execução somente sob demanda, o que torna difícil o encadeamento de execuções de cenários de testes e o disparo feito pela própria ferramenta.

É possível argumentar que, uma vez que a ferramenta suporta o protocolo TCP, qualquer outro protocolo baseado em TCP seja passível de ser testado. No entanto, contra-argumento que será necessário perder um tempo em demasia controlando e escrevendo o protocolo em cima de TCP desvirtuando o propósito original de testar.

Apache Camel

Apache Camel exerce um excelente papel. Principalmente por considerar fluxos múltiplos protocolos IPC, e põe múltiplos nisso.

Infelizmente, não é convidativa para pessoas não desenvolvedoras: requer profundo conhecimento em programação para escrever os cenários. Inclusive, não é convidativa para pessoas desenvolvedoras também.

Naturalmente, entende-se que qualquer um que tenha entendimento de como o fluxo e como o protocolo IPC em questão funciona deveria ser capaz de testá-lo. Esses testes não devem ser de responsabilidade exclusiva de quem manja de programação.

Além disso, não é possível testar mais de um sistema em um fluxo composto de múltiplos sistemas. Outro ponto é que muitos dos conectores Apache Camel são implementados de uma forma síncrona e/ou bloqueante, acarretando em um uso ineficiente dos recursos e consequente escalabilidade limitada.

Enqueuer

Enqueuer é um framework CLI (command line interface) de código-aberto (você encontra o repositório aqui: https://github.com/enqueuer-land/enqueuer) escrito em Typescript concebido com o intuito de resolver os problemas citados nas ferramentas mais utilizados do mercado.

Se trata de uma ferramenta multi-protocolo, amigável para não programadores, e facilmente extensível. Um mix das ferramentas supracitadas.

É basicamente um postman com esteroides. Imagine um postman que seja capaz de enviar mensagens em outros protocolos além do HTTP. A lista de protocolos suportados pelo enqueuer é vasta, atualmente, são mais de 10 e um novo protocolo é facilmente adicionado.

Além da funcionalidade de enviar mensagens, imagine também que postman com anabolizantes seja capaz de simular respostas de um servidor HTTP, o que é exatamente o que o mountebank faz.

Se uma ferramenta CLI não for suficiente para você. Considere usar o stacker e sua exuberante interface gráfica:

Conclusão

As ferramentas amplamente utilizadas atualmente podem não ser suficientes para testar fluxos poliglotas. Enqueuer supre essa carência.

Como visto, ao utilizá-lo, é possível testar se o sistema está funcionando apropriadamente, testar fluxos que utilizam múltiplos protocolos IPC sem conhecimento aprofundado de programação e adicionar o resultado aos passos da integração contínua.

Em um futuro próximo, será exemplificado como criar testes utilizando o enqueuer.

Já que você tá por aqui, dá uma olhada nesses aqui também: