Artigo
· Jul. 30 3min de leitura

Toolqa - A espera acabou

É... Chegou a hora dos testes. Sabemos que em muitas vezes, ela até já passou. Bom, e agora? Consigo reforçar a qualidade do meu desenvolvimento?

A resposta é: SIM. Sim, você consegue. A ferramenta Toolqa busca exatamente isto. É um facilitador. Qual é o seu objetivo? Garantir que as APIS atendam aos requisitos de negócio pré-estabelecidos, e também mantenha-se rígida com as <sarcasm> futuras tentativas frustradas </sarcasm> de acabar com a sua aplicação, site, App ou qualquer outro que utilize-se de sua API.

Agora deve estar se perguntando, mas como é que isto acontece? Onde está a mágica?

A classe ToolQA.tool.BP.Tool foi projetada como um agente de teste inteligente e automatizado para classes de API no InterSystems IRIS, e seus maiores objetivos são:

  1. Gerar de forma automática (a partir da seleção de uma classe) novas classes de teste para qualquer classe de API;
  2. Avaliar os próprios métodos e parâmetros da classe de API usando metadados da classe IRIS;
  3. Gerar diversos valores de teste sintéticos para cada parâmetro do método com base em seu tipo (Integer, String, Float, Date...);
  4. Confrontar esses valores de teste em relação ao esquema do seu banco de dados antes de invocar o método da API, garantindo a conformidade com o tipo e os limites;
  5. Compilar e salvar a classe de teste gerada no ambiente IRIS;
  6. Fornecer um método Run() executável dentro da classe de teste gerada para executar os testes e reportar os resultados.

Certo, entendi, mas, e como eu faço isto? Basta seguir os passos abaixo:

Input

Você chama o método

DO ##class(ToolQA.tool.BP.Tool).GenerateTestForClass(“Your.API.ClassName”)
Com o nome da API que você deseja testar.

  1. Introspecção e Análise de Metadados A ferramenta utiliza IRIS’ %Dictionary.ClassDefinition :

Abra a definição de classe da API;

Enumere todos os métodos de classe públicos;

Extraia os nomes e tipos de parâmetros de cada método.

  1. Synthetic Test Data Generation For each method parameter:

O método CreateFakeValue gera um valor fictício compatível com o tipo do parâmetro (por exemplo, string, inteiro, float);

A ferramenta tenta encontrar um mapeamento entre parâmetros e classes/campos persistentes do banco de dados por meio do método ClassBank, examinando classes persistentes conhecidas em busca de campos correspondentes;

Se existir um mapeamento, o valor fictício gerado é validado em relação ao tipo e às restrições do campo do banco de dados (ValidateValueField), verificando a correção do tipo, os limites de comprimento e os limites numéricos.

  1. A geração da classe de teste é criada dinamicamente pelo agente como uma nova classe de teste com a convenção de nome:

ToolQA.QA.Tests.Test
A classe contai um método Run()  que:

Exibe a mensagem de início do teste;

Executa cada método da API com os parâmetros gerados, após a validação;

Captura e registra erros ou exceções durante chamadas de métodos;

Relata o sucesso ou a falha do teste.

  1. A compilação e execução da classe de teste gerada é salva no formato de arquivo *.cls e compilada automaticamente com o IRIS. Em seguida você executa os testes com:

DO ##class(ToolQA.QA.Tests.Test).Run()
Como as respostas e resultados são tratados: 
A classe de teste captura o status de retorno (%Status) de cada chamada de método da API;

Erros (códigos de insucesso) são exibidos no console com os detalhes:

Exceções geradas por métodos de API são capturadas e registradas com seu rastreamento de pilha;

Como o agente gera entradas sintéticas, ele não valida o conteúdo da resposta além do sucesso da execução — mas você pode estender a classe de teste para adicionar asserções em objetos de saída ou estruturas de dados retornadas, conforme necessário.

Para mais informações sobre a ferramenta e como proceder, acesse o link:

https://openexchange.intersystems.com/package/toolqa

Esta ferramenta foi desenvolvida em conjunto com @Andre Ribera Dienes Friedrich. Obrigado pela sua consideração... E o céu é o limite.

Discussão (0)1
Entre ou crie uma conta para continuar