Hoje, quero falar sobre uma ferramenta de código-fonte bastante nova para testes automatizados chamada Airtest . No futuro, farei mais alguns artigos com uma história detalhada sobre os elementos individuais deste kit de ferramentas e como trabalhar com eles, mas agora tenho o objetivo de apresentá-lo e dar uma idéia geral.
Este é o primeiro de três artigos. A segunda parte descreve a estrutura para o reconhecimento de imagem (Image Recognition) - AirTest , e a terceira e última parte é dedicada ao Poco - a estrutura de automação da interface do usuário, escrevendo código .
O AirTest IDE foi desenvolvido pela NetEase e destina-se a aplicativos "difíceis de automatizar", como, por exemplo, jogos. Na verdade, eles são o foco principal dos desenvolvedores, embora isso não pare de usar o AirTest para outros aplicativos.
O AirTest IDE é executado no Windows, MacOS X e Linux e contém 2 estruturas: AirTest e Poco. Este desenvolvimento foi apresentado por Xin Liu no Android Game Developer Summit 2018 . Python 2.7 e Python 3.3+ são usados para escrever testes. Coisas importantes como suporte para executar testes imediatamente em um grande número de dispositivos, código-fonte aberto e aplicativos gratuitos, além de testes escritos fáceis - essas são as vantagens destacadas pelos desenvolvedores. O aplicativo pode ser usado no Windows e no MacOS e permite automatizar aplicativos no seguinte sistema operacional: Windows, iOS, Android.
O Projeto AirTest no GitHub contém 4 projetos: Airtest , Poco , iOS-Tangent , multi-device-runner .
Também vale mencionar que o NetEase fornece seu próprio farm de dispositivos físicos para testes automatizados chamado AirLab .

Brevemente sobre estruturas.
O Airtest é uma estrutura de plataforma cruzada de reconhecimento de imagem para jogos e aplicativos para dispositivos móveis, baseada na retenção de imagem . O AirTest IDE permite que você interaja com o aplicativo usando os seguintes comandos:
toque, aguarde, deslize, existe, texto, evento de chave, instantâneo, suspensão, assert_exists, assert_not_exists, assert_equal, assert_not_equal. Vou falar sobre os recursos e parâmetros dos comandos em um artigo separado dedicado a um estudo mais detalhado dos quadros AirTest e Poco. Agora, vale mencionar que o comando keyevent é responsável por "pressionar os botões físicos" do dispositivo, como Casa, Energia, Menu, Voltar. Ao usar a maioria dos comandos, o usuário é solicitado a destacar uma parte da tela do dispositivo de trabalho, cuja captura de tela será usada para o comando correspondente (toque, deslize, afirme, etc.).

As vantagens do Airtest que posso destacar após o trabalho:
- Escrita de código rápida e clara. Tudo é feito, na prática, no modo automático, você só precisa selecionar os parâmetros necessários, ajustar os tempos e ter cuidado com a escolha da imagem.
- A definição exata da imagem, usada no código, no dispositivo de trabalho ativo. Além disso, o relatório indica a porcentagem de coincidência (comparação) da imagem usada no código e da imagem na tela do dispositivo de trabalho.
- Falando de relatórios. Após cada inicialização, você pode criar um relatório usando o atalho de teclado Ctrl \ Cmd + L. Um relatório conveniente fornece informações como: tipos de afirmação de seus resultados, e cada etapa do teste é destacada em uma subseção separada com informações sobre onde o AirTest clicou, onde esperava uma imagem, porcentagem de imagens correspondentes etc.
- Depois de escrever o código, você pode usá-lo em qualquer dispositivo.
- Multithreading: conecte vários dispositivos de teste e execute-os em paralelo.
Contras Airtest, que posso destacar após o trabalho:
- Se no processo houver elementos com a mesma aparência visual, por exemplo, controles deslizantes, botões etc., com uma alta probabilidade, o AirTest não entenderá qual controle você deseja usar. Isso será indicado no erro correspondente. Mas esse menos é facilmente dispensado do uso da segunda estrutura (Poco), que será discutida abaixo.
- A comparação de imagens (do código e as reais na tela) ocorre em preto e branco. Vale a pena considerar se você é importante, por exemplo, a aparência visual do personagem (sua cor, roupas diferentes etc.). Se os caracteres são visualmente diferentes, mas são exibidos na tela da mesma maneira (uma pose, etc.), a verificação provavelmente será bem-sucedida. As opções de reconhecimento de imagem têm uma marca de seleção "rgb" que você pode usar, mas não funciona muito bem se você tiver uma imagem pequena.
- Você não pode "congelar" a tela enquanto estiver usando o aplicativo para capturar com precisão as capturas de tela necessárias. De tempos em tempos, você precisa "capturar" o quadro que precisa.
- Porque aplicação em beta aberto, você pode encontrar vários erros ou imprecisões irritantes, por exemplo, como a incapacidade de redimensionar uma janela com um aplicativo interno no Windows. Agora, os autores estão atualizando o AirTest IDE a cada poucos meses, e espero que esses problemas sejam corrigidos em breve.
O Poco é uma estrutura universal para automatizar a interface do usuário (UI), que fornece APIs poderosas, independentemente do mecanismo (do jogo). Esses, por sua vez, recuperam a hierarquia dos elementos da interface do usuário em tempo de execução. Graças a isso, o usuário pode "alcançar" toda a hierarquia de elementos na página atual em apenas alguns cliques no elemento que ele precisa, etc. Além disso, essa estrutura permite “congelar” a tela atual para escrever código com base na hierarquia de elementos da janela atual. O Poco foi projetado para ajudar o AirTest a entender que tipo de elemento de interface do usuário os testes estão falando, mas ninguém o incomoda em escrever todos os testes usando apenas essa estrutura.
Todos os testes são escritos em Python. As implementações de comando podem ser encontradas nas APIs correspondentes: módulo airtest.core.api , pacote airtest.core.android , pacote airtest.core.ios , pacote airtest.core.win

Poco vantagens que posso destacar após o trabalho:
- Há suporte para vários mecanismos de jogos importantes, incluindo Unity3D, cocos2dx-js, cocos2dx-lua, mecanismos internos do NetEase, além de suporte para aplicativos Android / iOS nativos. Se você quiser usar um mecanismo que não esteja na lista de "suportados", poderá criar o seu próprio seguindo as instruções apropriadas . Na documentação oficial, há uma menção ao Unreal Engine, mas até agora tudo se limita à frase "Em breve".
- A hierarquia dos elementos da interface do usuário na tela retorna em tempo real.
- Início rápido e execução de testes.
- Como no AirTest, escrevi o código uma vez - use-o em qualquer lugar. Suporte para Python 2.7 e 3.3+
- É possível conectar bibliotecas externas ao seu projeto
- A julgar pela documentação, há suporte para sensores GPS, acelerômetro e giroscópio, além de suporte para os modos de exibição retrato e paisagem.
Poco contras que posso destacar depois do trabalho:
- Durante o trabalho no Windows 7, não encontrei problemas fundamentais. o que interferiria no trabalho de pleno direito, mas, no momento, eles estão ao trabalhar com o Windows 10. O principal é o movimento incorreto de objetos (comando de furto) em alguns casos. Por exemplo, indico o objeto a ser movido e as coordenadas do segundo objeto, que é o ponto final. Nesses casos raros, Poco perde o local final, mas os relatórios mostram os dados de deslocamento corretos (vetor) e a etapa é considerada bem-sucedida.
- Quando você seleciona alguns elementos com layouts grandes (layout), a seleção pode se sobrepor à janela do Poco Assistant e você não poderá selecionar outros elementos até que a seleção seja removida da atual. Para remover a seleção, você pode usar o atalho do teclado Alt + F4
Para concluir, vale ressaltar que o Airtest IDE possui seu próprio plug-in Selenium , com o qual você pode automatizar seu projeto da Web, mas usando apenas um navegador Chrome. O restante, no momento, não é suportado. Pessoalmente, ainda não trabalhei com ele, portanto não posso dizer sobre o trabalho dele, mas era impossível sentir falta dele nesta breve descrição.

Como resultado, eu diria que o AirTest IDE é um desenvolvimento muito promissor, projetado para automatizar a interface do usuário em jogos, mas, no momento, não é adequado para testar o processo do jogo. Se você tem muitos elementos de interface do usuário e / ou muitos dispositivos para verificar e não deseja gastar muitas horas de trabalho, esse IDE pode se tornar seu salva-vidas. Para começar a escrever os testes mais simples, você não precisa de conhecimentos profundos em automação e programação, apenas possui um entendimento básico de como trabalhar com o Python. Obviamente, dessa maneira você não irá longe e precisará aprender essa linguagem de programação, mas para começar e entender o quão realista esse programa combina com você, basta para seus olhos. A única coisa frustrante agora são vários erros irritantes associados, por exemplo, à incapacidade de redimensionar uma janela com um dispositivo em funcionamento (aplicativo Windows) depois de incorporá-lo, sobrepondo um grande objeto selecionado da interface principal do programa etc., mas é bem possível chegar a um acordo, especialmente considerando o fato de que o aplicativo está no estágio Beta.
