Neste artigo, quero mostrar como implementar o processo de captura de evidência em um projeto de automação de testes construído com RSpec, Capybara e Allure Reports. Vamos começar?

Do que adianta automatizar o testes se eu não consigo provar o que ocorreu durante a execução? Meus reports de testes estão todos verdes (passando) mas será que o cliente está mesmo confiando que as coisas estão funcionando? E quando meu teste automatizado falhar? vai ficar até vermelho no Report. Mas e a evidência?
Configurando o Allure Reports
Crie a seguinte estrutura
mkdir c:\qaninja
mkdir c:\qaninja\xote-dos-milagres
cd c:\qaninja\xote-dos-milagres
Abra a pasta “xote-dos-milagres” no Visual Studio Code ou na IDE de sua preferência. Em seguida crie o arquivo Gemfile e coloque o conteúdo abaixo:
source "http://rubygems.org"
gem "allure-rspec"
gem "capybara"
gem "rspec"
gem "selenium-webdriver"
Em seguinda, execute:
bundler install
rspec --init
Abra o arquivo spec_helper.rb e adicione o código abaixo para configurar o Capybara e Allure Report
require "allure-rspec"
require "capybara"
require "capybara/rspec"
require "selenium-webdriver"
require "logger"
RSpec.configure do |config|
config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
config.shared_context_metadata_behavior = :apply_to_host_groups
config.include AllureRspec::Adaptor # => adiciona o adaptador do report
config.include Capybara::DSL # => adiciona os recursos do capybara
end
AllureRSpec.configure do |c|
c.output_dir = "allure-results" # => onde serão gerados os resultados
c.clean_dir = true # => limpa a pasta de resultados
c.logging_level = Logger::WARN # => log somente para avisos
end
Capybara.configure do |config|
config.default_driver = :selenium_chrome
config.app_host = "https://training-wheels-protocol.herokuapp.com"
config.default_max_wait_time = 10
end
Implementando os Testes
Dentro da pasta spec, crie um arquivo com o nome login_spec.rb. Em seguida, escreva dois exemplos de testes conforme o código abaixo:
def do_login(uname, pass)
find("input[name=username]").set uname
find("input[name=password]").set pass
click_on "Login"
end
describe("Login") do
before(:each) do
page.current_window.resize_to(1378, 768)
visit "/login"
end
context ("quando a senha é inválida") do
before do
do_login("stark", "ultron123")
end
it("deve exibir senha incorreta") do
expect(page).to have_text "Senha é invalida!"
end
end
context ("quando o cara não existe") do
before do
do_login("adam_warlock", "magnus")
end
it("deve exibir usuário não cadastrado") do
expect(page).to have_text "O usuário informado não está cadastrado!"
end
end
end
Agora execute o rspec com saída no terminal e em formato de documentação:
rspec -fd

Já temos um projeto de testes automatizados funcionando. Além disso perceba que dentro da pasta allure-results, temos o relatório em XML que foi gerado pelo Allure.
Obtendo e anexando as evidências
Para anexar as evidências, iremos Hookar nossos cenários. Usaremos o After each do RSpec.
Vamos implementar o seguinte código dentro do bloco RSpec.configure do arquivo spec_helper.rb:
require "allure-rspec"
require "capybara"
require "capybara/rspec"
require "selenium-webdriver"
require "logger"
RSpec.configure do |config|
config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
config.shared_context_metadata_behavior = :apply_to_host_groups
config.include AllureRSpec::Adaptor # => adiciona o adaptador do report
config.include Capybara::DSL # => adiciona os recursos do capybara
config.after(:each) do |e|
# screenshot temporário com parse para o tipo file do ruby
temp_xote = File.join(Dir.pwd, "allure-results/temp_xote.png")
# incova o método do capybara que tira screenshot e converte a saída para o tipo file
final_xote = File.new(page.save_screenshot(temp_xote))
# anexa a evidência no Report do Allure (1 para cada cenário)
e.attach_file("ScreenXote", final_xote)
end
end
AllureRSpec.configure do |c|
c.output_dir = "allure-results" # => onde serão gerados os resultados
c.clean_dir = true # => limpa a pasta de resultados
c.logging_level = Logger::WARN # => log somente para avisos
end
Capybara.configure do |config|
config.default_driver = :selenium_chrome
config.app_host = "https://training-wheels-protocol.herokuapp.com"
config.default_max_wait_time = 10
end
Execute rspec -fd novamente. Veja agora que além das saídas em XML, temos as evidências no formato PNG dentro de allure-results.
Estado da arte. Gerando o Report em HTML
Até o momento, temos um projeto de automação, reports do Allure no formato XML e as evidências Hookadas para cada cenário.
Vamos usar o Allure Command Line. Uma ferramenta para gerar o relatório Allure no formato HTML. Você pode instalá-lo facilmente com NPM.
Pré-requisitos:
1- Instale o Nodejs (no blog temos o guia de instalação)
2- Java 8 ou superior. Sim, ele precisa do Java 🙂
Instalação do Allure Command Line via NPM:
npm install -g allure-commandline
Lembre-se que no Windows, será necessário abrir o terminal como Admin e no Linux ou Mac executar o NPM com sudo.
Para subir o servidor de relatórios, na pasta raiz do projeto, execute o seguinte comando:
allure serve
O Allure deve inicializar o servidor de relatórios e abrir o endereço no seu navegador padrão conforme a imagem abaixo:

Agora temos um relatório com as evidências. Chique neh?

Projeto final no meu Github: https://github.com/papitoio/xote-dos-milagres
Quer saber mais sobre testes automatizados? Veja área de cursos.
Fim 🙂
Comentários