TestMace - um IDE poderoso para trabalhar com APIs

Olá a todos! Hoje queremos apresentar ao público de TI nosso produto - um IDE para trabalhar com APIs TestMace. Talvez alguns de vocês já nos conheçam por artigos anteriores. No entanto, não houve uma revisão abrangente da ferramenta, por isso abordamos esta lamentável deficiência.

TestMace - um IDE poderoso para trabalhar com APIs

Motivação

Gostaria de começar contando como, de fato, chegamos a esta vida e decidimos criar nossa própria ferramenta para trabalho avançado com API. Comecemos com uma lista de funcionalidades que um produto deve ter, sobre as quais, em nossa opinião, podemos dizer que se trata de um “IDE para trabalhar com APIs”:

  • Criação e execução de consultas e scripts (sequências de consultas)
  • Escrevendo vários tipos de testes
  • Geração de teste
  • Trabalhar com descrições de API, incluindo importação de formatos como Swagger, OpenAPI, WADL, etc.
  • Solicitações simuladas
  • Bom suporte para uma ou mais linguagens para escrever scripts, incluindo integração com bibliotecas populares
  • и т.д.

A lista pode ser expandida para se adequar ao seu gosto. Além disso, é importante criar não apenas o IDE em si, mas também uma determinada infraestrutura, como sincronização em nuvem, ferramentas de linha de comando, serviço de monitoramento online, etc. Afinal, as tendências dos últimos anos ditam-nos não só a poderosa funcionalidade da aplicação, mas também a sua interface agradável.

Quem precisa de tal ferramenta? Obviamente, todos aqueles que estão de alguma forma conectados com o desenvolvimento e teste de APIs são desenvolvedores e testadores =). Além disso, se para os primeiros muitas vezes é suficiente executar consultas únicas e scripts simples, então para os testadores esta é uma das principais ferramentas, que, entre outras coisas, deve incluir um mecanismo poderoso para escrever testes com a capacidade de executá-los em IC.

Então, seguindo essas orientações, começamos a criar nosso produto. Vamos ver o que conseguimos nesta fase.

Início rápido

Vamos começar conhecendo o aplicativo pela primeira vez. Você pode baixá-lo no nosso site. No momento, todas as 3 principais plataformas são suportadas – Windows, Linux, MacOS. Baixe, instale, inicie. Ao iniciá-lo pela primeira vez, você verá a seguinte janela:

TestMace - um IDE poderoso para trabalhar com APIs

Clique no sinal de mais na parte superior da área de conteúdo para criar sua primeira solicitação. A guia de consulta é semelhante a esta:

TestMace - um IDE poderoso para trabalhar com APIs

Vejamos isso com mais detalhes. A interface de solicitação é muito semelhante à interface de clientes de descanso populares, o que facilita a migração de ferramentas semelhantes. Vamos fazer a primeira solicitação para a url https://next.json-generator.com/api/json/get/NJv-NT-U8

TestMace - um IDE poderoso para trabalhar com APIs

Em geral, à primeira vista, o painel de resposta também não traz surpresas. Porém, gostaria de chamar sua atenção para alguns pontos:

  1. O corpo da resposta é representado na forma de uma árvore, que em primeiro lugar adiciona conteúdo informativo e em segundo lugar permite adicionar alguns recursos interessantes sobre os quais abaixo
  2. Existe uma aba Assertions, que exibe uma lista de testes para uma determinada solicitação

Como você pode ver, nossa ferramenta pode ser usada como um cliente de descanso conveniente. Porém, não estaríamos aqui se suas capacidades se limitassem apenas ao envio de solicitações. A seguir, descreverei os conceitos básicos e a funcionalidade do TestMace.

Conceitos e recursos básicos

A funcionalidade TestMace é dividida em diferentes tipos de nós. No exemplo acima, demonstramos o funcionamento do nó RequestStep. No entanto, os seguintes tipos de nós agora também estão disponíveis no aplicativo:

  • Etapa de solicitação. Este é o nó através do qual você pode criar uma solicitação. Ele só pode ter um nó Assertion como elemento filho.
  • Afirmação. O nó é usado para escrever testes. Só pode ser um nó filho do nó RequestStep.
  • Pasta. Permite agrupar nós Folder e RequestStep dentro deles mesmos.
  • Projeto. Este é o nó raiz, criado automaticamente quando o projeto é criado. Caso contrário, repete a funcionalidade do nó Pasta.
  • Link. Link para o nó Folder ou RequestStep. Permite reutilizar consultas e scripts.
  • и т.д.

Os nós estão localizados em riscos (o painel no canto inferior esquerdo, usado para criar rapidamente consultas “únicas”) e em projetos (o painel no canto superior esquerdo), sobre os quais nos deteremos com mais detalhes.

Projeto

Ao iniciar o aplicativo, você poderá notar uma linha de projeto solitária no canto superior esquerdo. Esta é a raiz da árvore do projeto. Ao iniciar um projeto, um projeto temporário é criado, cujo caminho depende do seu sistema operacional. A qualquer momento você pode mover o projeto para um local conveniente para você.

O principal objetivo do projeto é a capacidade de salvar desenvolvimentos no sistema de arquivos e sincronizá-los posteriormente através de sistemas de controle de versão, executar scripts em CI, revisar alterações, etc.

Variáveis

Variáveis ​​são um dos principais mecanismos de um aplicativo. Quem trabalha com ferramentas como TestMace já deve ter uma ideia do que estamos falando. Portanto, variáveis ​​são uma forma de armazenar dados comuns e comunicar-se entre nós. Um análogo, por exemplo, são as variáveis ​​de ambiente em Postman ou Insomnia. Porém, fomos além e desenvolvemos o tema. No TestMace, as variáveis ​​podem ser definidas no nível do nó. Qualquer. Existe também um mecanismo para herdar variáveis ​​de ancestrais e sobrepor variáveis ​​em descendentes. Além disso, há uma série de variáveis ​​incorporadas, os nomes das variáveis ​​incorporadas começam com $. Aqui estão alguns deles:

  • $prevStep — link para variáveis ​​do nó anterior
  • $nextStep — link para variáveis ​​do próximo nó
  • $parent - a mesma coisa, mas apenas para o ancestral
  • $response - resposta do servidor
  • $env - variáveis ​​​​de ambiente atuais
  • $dynamicVar - variáveis ​​dinâmicas criadas durante a execução de script ou consulta

$env - estas são essencialmente variáveis ​​comuns no nível do nó do Projeto, no entanto, o conjunto de variáveis ​​de ambiente muda dependendo do ambiente selecionado.

A variável é acessada via ${variable_name}
O valor de uma variável pode ser outra variável ou até mesmo uma expressão inteira. Por exemplo, a variável url pode ser uma expressão como
http://${host}:${port}/${endpoint}.

Separadamente, vale destacar a possibilidade de atribuição de variáveis ​​durante a execução do script. Por exemplo, muitas vezes é necessário salvar dados de autorização (um token ou o cabeçalho inteiro) que vieram do servidor após um login bem-sucedido. TestMace permite salvar esses dados em variáveis ​​​​dinâmicas de um dos ancestrais. Para evitar colisões com variáveis ​​“estáticas” já existentes, as variáveis ​​dinâmicas são colocadas em um objeto separado $dynamicVar.

cenários

Usando todos os recursos acima, você pode executar scripts de consulta inteiros. Por exemplo, criar uma entidade -> consultar uma entidade -> excluir uma entidade. Neste caso, por exemplo, é possível usar o nó Folder para agrupar vários nós RequestStep.

Preenchimento automático e destaque de expressão

Para um trabalho conveniente com variáveis ​​(e não apenas), é necessário o preenchimento automático. E, claro, destacar o valor de uma expressão para tornar mais fácil e conveniente esclarecer a que uma determinada variável é igual. Este é exatamente o caso quando é melhor ver uma vez do que ouvir cem vezes:

TestMace - um IDE poderoso para trabalhar com APIs

É importante notar que o preenchimento automático é implementado não apenas para variáveis, mas também, por exemplo, para cabeçalhos, valores de determinados cabeçalhos (por exemplo, preenchimento automático para o cabeçalho Content-Type), protocolos e muito mais. A lista é atualizada constantemente conforme o aplicativo cresce.

Desfazer refazer

Desfazer/refazer alterações é uma coisa muito conveniente, mas por algum motivo não é implementado em todos os lugares (e as ferramentas para trabalhar com APIs não são exceção). Mas não somos um desses!) Implementamos desfazer/refazer ao longo de todo o projeto, o que permite desfazer não apenas a edição de um nó específico, mas também sua criação, exclusão, movimentação, etc. As operações mais críticas requerem confirmação.

Criando testes

O nó Assertion é responsável pela criação de testes. Uma das principais funcionalidades é a possibilidade de criar testes sem programação, utilizando editores integrados.

Um nó Assertion consiste em um conjunto de asserções. Cada asserção tem seu próprio tipo; no momento existem vários tipos de asserções

  1. Compare valores - simplesmente compara 2 valores. Existem vários operadores de comparação: igual, diferente, maior que, maior ou igual a, menor que, menor ou igual a.

  2. Contém valor - verifica a ocorrência de uma substring em uma string.

  3. XPath - verifica se o seletor em XML contém um determinado valor.

  4. A asserção JavaScript é um script javascript arbitrário que retorna verdadeiro em caso de sucesso e falso em caso de falha.

Observo que apenas a última requer habilidades de programação do usuário, as outras 3 asserções são criadas por meio de uma interface gráfica. Aqui está, por exemplo, a aparência da caixa de diálogo para criar uma asserção de comparação de valores:

TestMace - um IDE poderoso para trabalhar com APIs

A cereja do bolo é a criação rápida de afirmações a partir de respostas, basta olhar!

TestMace - um IDE poderoso para trabalhar com APIs

No entanto, tais asserções têm limitações óbvias, que você pode querer usar uma asserção javascript para superar. E aqui o TestMace também oferece um ambiente confortável com preenchimento automático, destaque de sintaxe e até mesmo um analisador estático.

Descrição da API

TestMace permite não apenas usar a API, mas também documentá-la. Além disso, a própria descrição também possui uma estrutura hierárquica e se enquadra organicamente no restante do projeto. Além disso, atualmente é possível importar descrições de API dos formatos Swagger 2.0/OpenAPI 3.0. A descrição em si não é apenas um peso morto, mas está intimamente integrada com o resto do projeto, em particular, o preenchimento automático de URLs, cabeçalhos HTTP, parâmetros de consulta, etc. está disponível e, no futuro, planejamos adicionar testes para conformidade da resposta com a descrição da API.

Nó de compartilhamento

Caso: você gostaria de compartilhar uma solicitação problemática ou até mesmo um script inteiro com um colega ou simplesmente anexá-lo a um bug. TestMace também cobre este caso: o aplicativo permite serializar qualquer nó e até mesmo uma subárvore em uma URL. Copie e cole e você poderá transferir facilmente a solicitação para outra máquina ou projeto.

Formato de armazenamento de projeto legível por humanos

No momento, cada nó é armazenado em um arquivo separado com extensão yml (como é o caso do nó Assertion) ou em uma pasta com o nome do nó e o arquivo index.yml nele.
Por exemplo, esta é a aparência do arquivo de solicitação que fizemos na revisão acima:

índice.yml

children: []
variables: {}
type: RequestStep
assignVariables: []
requestData:
  request:
    method: GET
    url: 'https://next.json-generator.com/api/json/get/NJv-NT-U8'
  headers: []
  disabledInheritedHeaders: []
  params: []
  body:
    type: Json
    jsonBody: ''
    xmlBody: ''
    textBody: ''
    formData: []
    file: ''
    formURLEncoded: []
  strictSSL: Inherit
authData:
  type: inherit
name: Scratch 1

Como você pode ver, tudo está muito claro. Se desejar, este formato pode ser facilmente editado manualmente.

A hierarquia de pastas no sistema de arquivos repete completamente a hierarquia de nós no projeto. Por exemplo, um script como:

TestMace - um IDE poderoso para trabalhar com APIs

Mapeia o sistema de arquivos para a seguinte estrutura (apenas a hierarquia de pastas é mostrada, mas a essência é clara)

TestMace - um IDE poderoso para trabalhar com APIs

Isso facilita o processo de revisão do projeto.

Importar do Carteiro

Depois de ler tudo isso, alguns usuários vão querer experimentar (certo?) um novo produto ou (que diabos, não é brincadeira!) usá-lo completamente em seu projeto. No entanto, a migração pode ser interrompida por um grande número de desenvolvimentos no mesmo Postman. Para tais casos, TestMace suporta a importação de coleções do Postman. No momento, são apoiadas importações sem testes, mas não descartamos apoiá-las no futuro.

Planos

Espero que muitos dos que leram até agora tenham gostado do nosso produto. No entanto, isso não é tudo! O trabalho no produto está a todo vapor e aqui estão alguns recursos que planejamos adicionar em breve.

Sincronização na nuvem

Um dos recursos mais solicitados. No momento propomos a utilização de sistemas de controle de versão para sincronização, para os quais estamos tornando o formato mais amigável para este tipo de armazenamento. No entanto, este fluxo de trabalho não é adequado para todos, por isso planejamos adicionar um mecanismo de sincronização familiar a muitos através de nossos servidores.

CLI

Conforme mencionado acima, os produtos de nível IDE não podem prescindir de todos os tipos de integrações com aplicativos ou fluxos de trabalho existentes. A CLI é exatamente o que é necessário para integrar testes escritos em TestMace no processo de integração contínua. O trabalho na CLI está em pleno andamento; as primeiras versões lançarão o projeto com um simples relatório de console. No futuro, planejamos adicionar saída de relatório no formato JUnit.

Sistema de plug-ins

Apesar de todo o poder da nossa ferramenta, o conjunto de casos que necessitam de soluções é ilimitado. Afinal, existem tarefas específicas de um determinado projeto. É por isso que no futuro planejamos adicionar um SDK para desenvolvimento de plugins e cada desenvolvedor poderá adicionar funcionalidades ao seu gosto.

Expandindo a gama de tipos de nós

Este conjunto de nós não cobre todos os casos exigidos pelo usuário. Nós que estão planejados para serem adicionados:

  • Nó de script - converte e coloca dados usando js e a API correspondente. Usando esse tipo de nó, você pode fazer coisas como scripts de pré-solicitação e pós-solicitação no Postman.
  • Nó GraphQL - suporte a graphql
  • Nó de asserção personalizado - permitirá expandir o conjunto de asserções existentes no projeto
    Naturalmente, esta não é uma lista final; ela será constantemente atualizada devido, entre outras coisas, ao seu feedback.

Perguntas frequentes

Em que você é diferente do Postman?

  1. O conceito de nós, que permite dimensionar quase infinitamente a funcionalidade do projeto
  2. Formato de projeto legível por humanos com salvamento em um sistema de arquivos, o que simplifica o trabalho usando sistemas de controle de versão
  3. Capacidade de criar testes sem programação e suporte js mais avançado no editor de testes (preenchimento automático, analisador estático)
  4. Preenchimento automático avançado e destaque do valor atual das variáveis

Este é um produto de código aberto?

Não, neste momento as fontes estão fechadas, mas no futuro estamos a considerar a possibilidade de abrir as fontes

Do que você vive?)

Junto com a versão gratuita, planejamos lançar uma versão paga do produto. Incluirá principalmente coisas que requerem um lado do servidor, por exemplo, sincronização.

Conclusão

Nosso projeto está avançando aos trancos e barrancos em direção a uma versão estável. No entanto, o produto já pode ser utilizado e o feedback positivo dos nossos primeiros utilizadores é prova disso. Coletamos feedback ativamente, porque sem uma cooperação estreita com a comunidade é impossível construir uma boa ferramenta. Você pode nos encontrar aqui:

Site oficial

Telegram

Slack

Facebook

Rastreador de problemas

Aguardamos seus desejos e sugestões!

Fonte: habr.com

Adicionar um comentário