Concrete Logo
Hamburger button

SikuliX: automatize testes apenas com visualização (Parte 2)

  • Blog
  • 10 de Setembro de 2015
Share

Na semana passada, eu fiz uma introdução à SikuliX, ferramenta que utiliza apenas a visualização para automatizar testes. Hoje, vamos entrar em uma abordagem mais profunda e partir para o código! Antes de tudo, porém, é importante lembrar algumas coisas.

Primeiro, nós vamos utilizar a IDE do SikuliX para tirar as nossas prints. Segundo, quando nós criamos um projeto com a IDE do SikuliX, ele gera um arquivo .py , que fica dentro de uma pasta .SikuliX, que tem a sintaxe muito parecida com os métodos Ruby. Sim, vamos desenvolver em Ruby.

image02

O terceiro ponto é que vamos fazer umas configurações bem específicas do Ruby, então eu recomendo (MUITO) que você tenha o rbenv ou o rvm instalados. Por fim, vale lembrar que vamos utilizar o Cucumber.

Dito isso, vamos começar com a IDE. Levando em conta que todo mundo já instalou (o tutorial está aqui no post da semana anterior), vamos criar um novo projeto e salvá-lo no mesmo local onde estará nosso projeto em Ruby. Depois disso, vamos mudar um detalhe na nossa IDE, seguindo o caminho:

SikuliX>Preferências>Nomear Automaticamente>Manualmente.

Agora, quando nós tirarmos as prints vamos poder colocar nomes legíveis.

image01

A primeira coisa a se fazer é, pela IDE, salvar o projeto. Assim, a SikuliX vai criar uma pasta .sikuliX no diretório desejado. Abra este mesmo diretório, só que pelo terminal.

Partindo do princípio de que você está com o Rbenv instalado, vamos descobrir qual versão do Ruby estamos usando no diretório. Eu utilizo o Ruby para desenvolver testes em plataformas que exigem versões diferentes, então é importante verificar. Lembrando que o Rbenv é facilmente adaptável para quem usa Rvm e o uso do Brew vai facilitar a sua vida. Vale destacar também que a organização das coisas é melhor. O ambiente fica isolado e é possível depurar erros de setup mais facilmente.

Usando o comando rbenv version, você vai descobrir qual a sua versão atual. Provavelmente não vai ser a versão que o SikuliX precisa, que é Jruby-1.7.18. Então, é só rodar o comando rbenv install Jruby-1.7.18 e a sua máquina vai baixar a versão necessária para que possamos rodar o projeto. Depois disso, teste de novo a versão do Ruby (ruby -v) na pasta, e se ela não for a que nós baixamos agora, basta utilizar o comando rbenv local Jruby-1.7.18 que o rbenv vai setar essa versão para a pasta. Se você estiver em dúvida se baixou e instalou mesmo, o comando rbenv versions (não esqueça o S no final do versions) mostra todas as versões instaladas.

Você vai precisar instalar o Cucumber (gem install cucumber), a Sikuli (gem install sikuli) e a SikuliX (gem install sikulix). Caso exista qualquer dúvida na instalação, aqui está a lista das gems da pasta que eu fiz o setup.

Depois de instalar as gems, rode o comando cucumber –init para criar a estrutura inicial de pastas. Algumas versões do Cucumber podem não disponibilizar este método, e caso isso aconteça crie o seguinte ambiente de pastas: Pasta do projeto contendo uma pasta chamada features, que contém o arquivo especificacoes.feature e as pastas support e step_definitions. A pasta support contém o arquivo env.rb e a pasta step_definitions contém o arquivo home.rb. A estrutura final deve ficar assim:

image04

Dentro do projeto que vai ser criado (em Ruby), altere o .env incluindo as seguintes linhas:

Aqui nós adicionamos a Sikuli, iniciamos a plataforma e adicionamos o path do qual ele vai ler as nossas imagens. Perceba que o .sikuli, ali em cima, é a pasta na qual a minha IDE da Sikuli está salvando as imagens.

Agora, caso você queira experimentar uma das funcionalidades que eu acho mais interessantes, vamos abrir a pasta criada pela Sikuli, o .sikuli, e o .py que foi gerado lá dentro.

image05

Dentro deste arquivo, existe o script:

Dentro da pasta features, criada pelo Cucumber, crie um arquivo chamado nome_da_sua_feature.feature e dentro da pasta step_definitions crie o arquivo nome_do_seu_setp.rb

image00

Para cada uma das funcionalidades geradas em Python pela IDE eu vou criar um step:

Para inicializar o Sikuli no Ruby, é necessário chamar uma nova Screen (escreva isso no topo do seu step.rb)

image03

Um ponto a levantar é que algumas classes, quando vindas do Sikuli, precisam receber o prefixo Sikulix::, por exemplo:

Se tudo der certo, é só rodar o comando “cucumber” na pasta correspondente e pronto! Ele vai começar a rodar os testes. Aqui está o repositório com o app Android que eu usei e o teste usando Sikuli e Cucumber. E aqui está o repositório da Sikuli com o Cucumber.

Ficou alguma dúvida ou tem algum comentário? Deixe sua contribuição abaixo.