logo

Dicas de Ruby para Testers

De tempos em tempos aparece nos grupos de discussão o pessoal perguntando sobre problemas com capybara, webdriver-watir, e afins, gems em ruby usadas para automação de teste.

O problema é que a falta de conhecimento da linguagem torna tarefas simples como soma de variáveis ou até um parser um processo dolorido.

TL:DR a idéia é falar sobre alguns aspectos simples da linguagem que os testadores pegam no dia a dia e não entendem muito bem.. para um guia completo é melhor acessar o rubylearning traduzido pela comunidade ruby --> http://guru-sp.github.io/tutorial_ruby/

Ruby Yeah!

Assumo que você já instalou o ruby em sua maquina, seja a versão 1.9.x ou a versão 2.x.x e que você consiga acessar o console ruby (irb) ou rodar ruby --version em seu terminal (win/mac/lnx)

Variáveis e Métodos Nativos

Em ruby, não existe o conceito de tipo de variável explícito, pois de acordo com o conteúdo da variável ela pode ser boolean, int ou string.

Para entender melhor, abra o terminal e faça uns testes:

a = 1
a.is_a? String
a.is_a? Integer
[true, false].include?(a)

Primeiro, perceba que você não precisa declarar que a variável a é um inteiro.

Segundo, perceba que eu chamei o is_a que é um método nativo do ruby para validar o tipo de objeto passado.

Boolean não é um objeto para usar o is_a teria que usar os paramêtros TrueClass ou FalseClass, mas não iria ficar claro no exemplo.

Como é um método nativo e o retorno é um boolean, é utilizado o ? para passar o parâmetro.

Existem diversos métodos nativos do ruby, fora os métodos que você na sua lib de automação (rspec, ou cucumber).

Você pode dar uma olhada neles aqui --> http://www.ruby-doc.org/core-2.1.2/index.html#methods

Teste o código novamente aquele código mas dessa vez coloque * a = true * ou * a = "Seu Nome"* e veja o que retorna :)

Módulos, Classes e Métodos

Existe uma linha tênue na definição de módulos e classe pois a forma de construção é similar.

Em poucas palavras classes e módulos são agrupamentos de métodos, porém classes podem ser herdadas de outras classes e módulos não.. módulos não herdam nada.

mais informações aqui --> http://www.rootr.net/rubyfaq-8.html

Que raios é herança?

É o tipo de coisa que não da para simplificar.. só lendo o tutorial inteiro sobre herança para poder entender corretamente http://guru-sp.github.io/tutorial_ruby/heranca.html que

Parser

É o tipo de coisa que você acaba usando o dia inteiro. De forma simples, é o processo de conversão do tipo do objeto armazenado na variável.

Os métodos de parse já vem na biblioteca nativa do ruby, ou seja, está naquele link (http://www.ruby-doc.org/core-2.1.2/index.html#methods)

Screenshot from 2014-09-19 14:17:41.png

Olhando na saída do console 11 é um inteiro e "11" é uma String e o método Integer(paramêtro) faz o parser (transformação) do objeto String para Inteiro (mas se você tentar fazer parse de um boolean para inteiro, vai dar erro).

Os 2 métodos mais usados para fazer parser os tipos de dados para automação são esses 2

to_i() #retorna um inteiro. Paramêtro pode ser float,bigdecimal,inteiro,string,time,complex,et

to_s() #retorna uma string e o paramêtro pode ser quase qualquer coisa

Usando a função require

Você já deve saber que para utilizar uma GEM como do cucumber, capybara, selenium, etc você colocou no arquivo principal da sua automação uma linha chamada require 'capybara/cucumber' ok?

Para "importar" uma classe ou módulo que você escreveu, você também utiliza o método require porém com o caminho físico do seu arquivo.rb

Lembre que ele toma como base o diretório do seu projeto, ou de onde .rb está sendo executado.

Para chamar classes no mesmo diretório:

require './minhaClasse'

./ significa que você está buscando no diretório raiz do seu projeto

Descendo para subclasses:

require '/commons/minhaClasse'

Ou indo para pastas anteriores:

require '../minhaClasse'

a cada ../ você volta uma pasta.

depois é só chamar o método que você precisa!

IRB é seu amigo

Isso parece ser besta e idiota, mas a galera esquece do console do ruby para testar scripts.

Sempre que você estiver com dúvida sobre algum método ou seu loop não está ornando como deveria, abre o console do ruby e testa seu código lá :)

O que mais?

Bom.. quando for surgindo as perguntas na comunidade talvez eu extenda esse post :)


Sobre o Autor: Leonardo Galani é Agile Tester, dev, gamer, dj and etc. Mantém o fórum http://agiletesters.com.br | http://leonardobg.com.br (profile)| http://lazytester.com (blog em inglês)
http://br.linkedin.com/in/leonardogalani/

comments powered by Disqus