Concrete Logo
Hamburger button

Debugando seus testes usando a gem Pry

  • Blog
  • 26 de Março de 2018
Share

Quando estamos desenvolvendo uma automação de testes, precisamos executá-la diversas vezes para validar alguma lógica do código ou para saber se o que foi escrito está realmente testando a funcionalidade do jeito adequado. Mas isso pode gastar muito do nosso tempo, pois vão ser necessárias muitas repetições até chegar ao trecho da execução. Imagine a seguinte situação:

Uma funcionalidade simples, mas que tenha 3 passos. O teste escrito inicialmente para ela funciona bem no começo, mas no meio do script ele não se comporta como deveria e acaba quebrando. Nesse caso você teria que fazer o ajuste e rodar novamente o teste todo, isso pode gastar muito tempo pois a cada novo ajuste você precisa rodar todos os outros passos anteriores para validar apenas um único ponto do código que esta no meio ou no final dele por exemplo.

A solução para isso é ter um “breakpoint” no meio da automação, onde você consegue interagir com o software e validar seu código/lógica em tempo real e encontrar o melhor jeito de escrever seu teste.

Na linguagem Ruby temos a gem Pry que faz exatamente isso.

Pry é uma gem que podemos usar para incluir esse ponto de debug no meio da automação, ou seja, no caso que citei acima basta incluir o Pry no segundo passo e enquanto a automação está pausada, podemos inserir comandos no terminal e ver quais se comportam melhor nessa parte do software.

Pry é uma alternativa poderosa para o IRB, padrão do terminal Ruby. Possui destaque de sintaxe, uma arquitetura de plugin flexível, invocação de tempo de execução e navegação de fontes e documentação.

Como toda gem em Ruby é necessário primeiro fazer a sua instalação. Para isso, use o comando abaixo:

Além disso, temos que adicionar ao arquivo Gemfile do projeto essa nova dependência. Abaixo, existe um exemplo. Este é o arquivo que uso em meu projeto.

Gemfile

Dentro do projeto precisamos também fazer um require para poder usar os recursos do Pry. Minha automação de testes foi feita com o framework Appium e como tenho um arquivo de configuração centralizado, deixei o require dentro dele.

env.rb

O próximo passo é identificar onde o teste esta quebrando. Se você estiver usando o Cucumber, isso fica bem mais fácil. Para exemplificar, vou usar uma funcionalidade básica: fazer um login no sistema, como já foi citado. Ela tem três passos.

login.feature

No exemplo, a automação está conseguindo acessar a plataforma e digitar o nome do usuário e a senha, mas ela está quebrando no momento de clicar no botão para efetivar o login.

Ou seja, o passo “Quando efetuo o login com credenciais válidas” não está funcionando direito. Para ajudar na correção, temos que usar o Pry e, para isso, temos que ir na automação e inserir o comando “binding.pry” antes do problema. Esse comando vai ser responsável pelo momento em que o debug vai ser acionado.

login_steps.rb

Rodei a automação com o Pry e vou descrever abaixo as etapas que usei:

log do terminal em modo debug Pry

[0] após rodar a automação pelo terminal, o teste percorre os passos anteriores e entra em modo debug, aguardando a nossa interação por meio de comandos. Na imagem conseguimos ver o trecho exato onde a automação está parada;

[1] usei novamente o comando find_element(id: ‘button’).click e a automação retornou ao erro que já foi identificado;

[2] alterei a estratégia de localização do elemento e agora ao invés de buscar pelo id, estou usando o tag_name. Veja que na mensagem abaixo é retornado um identificador do elemento em verde;

[3], [4] e [5] como agora já encontrei o elemento, estou usando outros métodos de interação e o retorno de cada ação é exibido abaixo:

.displayed? retorna true

.text retorna “Login”

.name retorna ” ”

[6] usei o método .click no elemento e com esse comando a automação passa a funcionar do jeito que esperamos;

[7] digitei o comando exit, isso faz com que a automação saia do debug do Pry e volte a executar o resto do seu fluxo.

Depois que toda a automação é finalizada, o report do cucumber é gerado normalmente.

log do terminal após finalizar a execução

Agora que sabemos qual comando nos atende, basta remover o binding.pry da automação e arrumar o passo com o comando que achamos no momento do debug.

Usando essa estratégia conseguimos economizar bastante tempo, pois não temos que rodar a automação inteira toda a vez que precisamos saber o melhor jeito de interagir com o software. E creio que isso é ganho importante durante o projeto. \o/

Lembrando que essa gem também serve para debugar qualquer código Ruby, mas o foco desse post é na parte de testes.

Se você usa outra linguagem em seus testes ou debuga de outro jeito, por favor, comente como faz isso aqui no post, pois assim a postagem não fica presa em Ruby apenas. Para JavaScript vi que existe o PryJS, mas não cheguei a explorá-lo ainda.

Subi para o Github(manda PR) o projeto usado no post e você pode usá-lo para brincar com a essa Gem.

Bons testes. o/

Trabalha com QA e quer fazer parte do nosso time? Clique aqui.