Concrete Logo
Hamburger button

EarlGrey vs KIF -Testing framework

  • Blog
  • 15 de Agosto de 2018

**Aviso Legal**

Este post fala principalmente sobre o EarlGrey, mas com uma breve comparação com o KIF.

Algumas semanas atrás eu conheci EarlGrey (yeah! Talvez eu esteja atrasado). EarlGrey é uma estrutura de teste de automação de interface do usuário desenvolvida pelo Google, sua versão atual é 1.14.0 e está muito ativa no GitHub no momento.

Earlgrey vs KIF popularity (26/06/2018)

À primeira vista, pensei que poderia ser um bom substituto para o KIF porque:

  • Sincronização: o Earlgrey sincroniza solicitação de rede, interface do usuário e threads. Nós não precisamos ‘esperar’ ou ‘esperar mais’! Odeio esperar;
  • Verificações de visibilidade: verifica se o elemento está visível antes de executar qualquer ação;
  • Interação com o usuário: Swipes e taps são executados usando eventos de app-level.

As interações de interface do usuário do EarlGrey simulam como um usuário real interage com a interface do usuário do seu aplicativo e ajudam você a encontrar e corrigir os mesmos bugs que os usuários vão encontrar no seu aplicativo.

A instalação do EarlGrey é simples e pode ser feita facilmente por meio de cocoapods. Usamos a versão 1.12.1, porque tivemos alguns problemas com o 1.14.0.

Testando

Com isso em mente, decidimos comparar o KIF ao EarlGrey em um projeto real. Para fazer isso, reescrevemos alguns testes com o novo framework, usando Xcode 9.3, Quick, Nimble e Nimble-Snapshots.

Para selecionar um elemento com EarlGrey, podemos chamar:

Onde MATCHER pode ser GREYMatcher como accessibilityID, accessibilityLabel, buttonTitle e ACTION qualquer GREYAction, por exemplo taps, swipes, scrolls. Para mais informações, dê só uma olhada nessas dicas.

Vantagens

Escrever testes usando EarlGrey é fácil porque é simples: não precisa esperar por quase nada.

KIF (wait) VS EarlGrey (not wait)

Devido a isso, pode ser mais fácil para os desenvolvedores juniores começarem a escrever testes com o EarlGrey e colocar ‘wait’ em algum lugar no seu código pode ser perigoso.

EarlGrey pode ser um pouco mais detalhado do que o KIF, mas nada que um Wrapper não possa lidar com isso.

Problemas

O primeiro problema que tivemos foi quando estávamos usando accessibilityLabel, pois algumas chamadas no EarlGrey não encontraram o nosso elemento; o que foi facilmente resolvido adicionando um ID de acessibilidade a ele.

Outro problema é que, às vezes, o EarlGrey encontrou vários elementos, embora saibamos que há apenas um elemento. Isso foi um pouco mais complicado, mas resolvemos forçá-lo a selecionar o primeiro elemento. Sabemos que provavelmente não foi a melhor solução, mas funciona no momento.

Running tests

Depois que todos os testes foram criados usando KIF e EarlGrey, decidimos rodar algumas vezes e checar o tempo de execução (em segundos).

Tempo de execução do conjunto de testes

A tabela acima mostra o tempo em segundos que o EarlGrey e o KIF levam para executar todo o processo de teste. Podemos notar que o EarlGrey é 150% mais lento, então decidimos ir mais fundo e verificar o porquê.

Nós anotamos o tempo de execução de cada classe de teste. À esquerda, temos o número de testes para cada classe. Às vezes o EarlGrey é muito lento, mas às vezes foi mais rápido que o KIF. Então nos confundimos. O que está acontecendo? O que está fazendo testes muito mais lentos?

Comparação por classe de teste

Então decidimos ir mais fundo ainda. E verifique quais ações/eventos são chamados em cada teste.

Clear and text events

Swipe, tap and search events

Podemos notar que texto claro e texto de entrada são mais rápidos no EarlGrey do que no KIF, mas swipes, toques e pesquisas levam muito tempo e nos perguntamos o por quê?

A resposta que recebemos foi tirada da página de recursos do EarlGrey:

Taps e swipes são executados usando eventos de toque em nível de aplicativo, em vez de usar manipuladores de eventos em nível de elemento. Antes de cada interação com a interface, EarlGrey afirma que os elementos que estão sendo interagidos estão realmente visíveis (veja Verificações de Visibilidade) e não apenas presentes na hierarquia da visão. As interações de interface do usuário do EarlGrey simulam como um usuário real interage com a interface do usuário do seu aplicativo e ajudam você a encontrar e corrigir os mesmos bugs que os usuários vão encontrar no seu aplicativo.

Enquanto o KIF:

O KIF tenta imitar a entrada real do usuário. A automação é feita usando eventos de tap sempre que possível.

EarlGrey adiciona outra camada de eventos que acionam manipuladores e muito mais. Então faz sentido levar mais tempo.

Nós tentamos fazê-lo funcionar mais rápido, permitindo animações rápidas.

O que realmente faz com que seja mais rápido, mas não mais rápido que o KIF.

EarlGrey x KIF x EarlGrey (Fast Animation)

Mas nos perguntamos se o EarlGrey ainda simula um usuário real, mesmo permitindo animações rápidas…

Conclusão

O EarlGrey é pior que o KIF? A resposta é NÃO! Você não pode jogar fora EarlGrey só porque é mais lento. A finalidade de EarlGrey não é ser a estrutura de teste mais rápida disponível.

Então, qual devo usar? Isso depende: você quer um teste rápido? Ou aproveitar a sincronização, as verificações de visibilidade e a interação do usuário?

Se você quer um traje mais rápido, use KIF se quiser um mais simples, talvez o EarlGrey seja a melhor opção.

PS: Se você gostou deste post, compartilhe-o no Twitter, recomende-o no meio, ou ambos =). Isso realmente me ajuda a alcançar mais pessoas. Muito obrigado.

A Concrete é uma empresa da Accenture especializada no desenvolvimento ágil de produtos digitais. No capítulo de iOS temos a oportunidade de viver em uma comunidade prática com dezenas de desenvolvedores iOS, trocando conhecimento e compartilhando informações técnicas e práticas. Além de desafiadores, os projetos têm acompanhamento próximo dos gerentes, que estão sempre buscando entender o momento de cada membro do capítulo, considerando seus próximos desafios e oportunidades de crescimento e visando a melhoria contínua e evolução de todos. Práticas ágeis, lean, visão de produto e engenharia sólida são pilares que serão incorporados desde o primeiro dia até se tornarem quase que uma segunda natureza. Quer fazer parte disso? Acesse: concrete.com.br/vagas