Skip to content

Latest commit

 

History

History
125 lines (95 loc) · 5.3 KB

mao_na_massa_faker.md

File metadata and controls

125 lines (95 loc) · 5.3 KB

Mão na massa. Agora vamos colocar em prática o Faker \o/

Primeiro (e de novo) vamos criar um projeto novo no com o comando:

cucumber --init

Agora vamos criar a mesma estrutura de pastas que criamos na Parte I:

cucumber
cucumber/features
cucumber/features/specifications
cucumber/features/step_definitions
cucumber/features/support
cucumber/features/support/env.rb

Agora vamos criar o arquivo register.feature dentro da pasta specifications da seguinte forma:

Feature: Register

Scenario: Register on Wal Mart

  Given I access the Walmart site
  When I click on Register
  And fill in the fields
  And click Cadastar
  Then my registration will be successfully made

Agora .. vamos navegar até a pasta cucumber do nosso projeto e executar o próprio comando cucumber para que ele pegar meu arquivo de feature e estruturar para eu definir os steps. Relembrando, o resultado vai ficar assim:

Given(/^I access the Walmart site$/) do
  pending # Write code here that turns the phrase above into concrete actions
end

When(/^I click on Register$/) do
  pending # Write code here that turns the phrase above into concrete actions
end

And(/^fill in the fields$/) do
  pending # Write code here that turns the phrase above into concrete actions
end

And(/^click Cadastar$/) do
  pending # Write code here that turns the phrase above into concrete actions
end

Then(/^my registration will be successfully made$/) do
  pending # Write code here that turns the phrase above into concrete actions

Agora vamos criar o nosso arquivo "register.rb" dentro da pasta features/step_definitions e colar o conteúdo acima dentro dele.

E o código nesse caso vai ficar assim:

# encoding: utf-8
Given(/^I access the Walmart site$/) do
  visit "https://www.walmart.com.br/"
end

When(/^I click on Register$/) do
  find(:css, '#topbar-signup-link').click
end

And(/^fill in the fields$/) do
  within_frame 'iframeLogin' do
    @password = Faker::Base.numerify('Capybara####').to_s
    @name = Faker::Name.name
    fill_in 'notifymeClientName', with: @name
    fill_in 'email', with: Faker::Internet.email('capybaraforall')
    fill_in 'cpfcnpj', with: Faker::CPF.numeric
    fill_in 'phone', with: Faker::Base.numerify('112419####').to_s
    fill_in 'password', with: @password
    fill_in 'signupClientPwdCheck', with: @password
    find(:css, '#signupButtonSend').click
  end
end

And(/^click Cadastar$/) do
  within_frame 'iframeLogin' do
    find(:css, '#signupButtonSend').click
  end
end

Then(/^my registration will be successfully made$/) do
  find(:css, '.profile-img').click
  page.has_css?('.sh-value.ng-binding', :text => @name, :visible => true)
end

Antes de alguém se perguntar "Que porra é essa de @password" eu respondo... Como os dados são aleatórios, se eu colocar em dois lugares o mesmo Faker, eles vão gerar valores diferentes, então no caso do password, que eu tenho que colocar a mesma informação tanto no password como na confirmação do password, os valores tem que ser iguais e ai eu peguei, defini uma variável (@password) e armazenei o Faker dentro dela, e toda vez que eu colocar o @password em algum lugar, ele vai me jogar o conteúdo de dentro dele (no caso um nome). O mesmo se aplica para a variável @name que eu armazenei um Faker dentro dela para conseguir ver se o usuário que eu realmente cadastrei foi cadastrado com sucesso. Alguns não gostam dessa prática, mas para quem ta começando, fazer isso é uma forma de prestar atenção em tudo que é desenvolvido =). Um outro tópico (capybaraforall_diversos) eu vou falar um pouco de boas práticas, macetes, etc.

Quando executar o teste, o resultado será esse:

Feature: Register

  Scenario: Register on Wal Mart                   # features/specifications/register.feature:3
    Given I access the Walmart site                # features/step_definitions/register.rb:2
    When I click on Register                       # features/step_definitions/register.rb:6
    And fill in the fields                         # features/step_definitions/register.rb:10
    And click Cadastar                             # features/step_definitions/register.rb:23
    Then my registration will be successfully made # features/step_definitions/register.rb:29

1 scenario (1 passed)
5 steps (5 passed)
0m22.022s

Executado em 22 segundos e toda vez que você executar esse teste, serão gerados dados aleatórios e você nunca vai repetir dados no seus teste.

Obs.: No caso do Walmart, quando você executa várias vezes o mesmo teste, ele coloca captcha. No próximo episódio vou tentar outro site pra brincarmos =). Não compensa eu falar de captcha agora se não conseguimos andar com as próprias pernas.

O princípio é esse galera. Usar dados aleatórios, usar os comandos básicos, salvar a cada sucesso, tentar e tentar e tentar até conseguir.

O repositório está ai para consulta. Mas tentem aplicar essas técnicas iniciais em algum outro site.

No próximo bloco (rsrs) vamos falar um pouco sobre como utilizar Page Objects e ai as coisas vão começar a ficar legais. Não vai sair do dia pra noite esse porque quero achar a melhor forma de explicar esse conceito de uma maneira tranquilinha sem gerar bloqueios.

Qualquer dúvida meu email é thiagomarquessp@gmail.com e para críticas também.

Home.