Hooks Cucumber

Pra você ligado no Medium, hoje vamos aprender a usar o famoso hooks, e de cara vamos criar um hooks para tirar screenshot dos nossos cenários de testes, seja ele de sucesso ou de falha, pois o importante é ter todas evidências registrada e documentada, seja ela para comprovar o teste ou para reportar algum problema.

Mas antes de tudo, o que é hooks ?

Hooks nada mais é do que um “gatilho” que vai ser executado antes ou depois de cada cenário. E para configurar esses hooks, basta utilizar duas palavras chaves que são elas “Before”, “After” e ainda existem os “AfterSteps” e “BeforeSteps” que não estão na documentação do cucumber se não me engano.

Before

O Before é executado antes de cada cenário de teste.

After

O After é executado no final de cada cenário de teste.

BeforerSteps

O BeforeSteps é executado antes de cada passo do cenário de teste.

AfterSteps

O AfterSteps é executado após cada passo do cenário de teste.

Pra que serve os hooks ?

Existem testes que necessitam de configurações, onde são atribuídos trechos de código que podem ser executado antes ou depois de iniciar a execução de um cenário. Outro ponto importante de falar, é que os hooks não serve para fazer seus testes, apenas para realizar configurações, lembre-se disso.

Como já dizia a canção, Quem ficar, ficou…Quem foi, vai, vai, vai…

Então vamos lá…

Para facilitar a vida de todos, deixei pronto um projeto base de realizar pesquisa no google no github através do link: https://github.com/pedrohjmartins/base.

Com o projeto em mãos… “bora” codar.

Antes de criarmos a configuração de tirar print depois de todos os cenários, primeiro precisamos criar a função de tirar screenshot.

Dentro da pasta support do nosso projeto, vamos criar um novo arquivo chamado helper.rb e inserir o seguinte código:

class Helper   def take_screenshot(name_file, folder =     'screenshots/test_screens')     file = "#{folder}/#{name_file}.png"     FileUtils.mkdir_p(folder) unless File.exist?(folder)     Capybara.page.driver.browser.save_screenshot(file)   endend

Nada mais é do que uma função que vai criar uma pasta e tirar os screenshots.

Com nossa função criada, podemos configurar nosso hooks.

Vamos criar outro arquivo dentro da pasta support, esse com o nome de hooks.rb e implementar o seguinte código:

require_relative 'helper.rb'   After do |scenario|    @helper = Helper.new    @nome = scenario.name.gsub(/([_@#!%()\-=;><,{}\~\[\]\.\/\?\"\*\^\$\+\-]+)/, '')    @helper.take_screenshot(@nome, 'screenshots/test_failed') if   scenario.failed?    unless @helper.take_screenshot(@nome, 'screenshots/test_passed')   endend

Onde informamos que é necessário o uso do arquivo helper.rb através do require_relative, pois é la que está nossa função.

Criamos um hooks After, ou seja, que vai ser executado depois de algum teste, e passamos a condição em que esse hooks vai ser executado, que no caso é o scenario, ou seja, vai ser executada no final de cada cenário de teste. Mas poderiamos configurar para ser executado apenas em cenários que possui a tag @necessitadeprint, basta alterar a condição e ficaria da seguinte maneira: After do |@necessitadeprint|, simples assim.

Após isso informamos que os prints vão receber o nome dos cenários através da sintaxe: @nome = scenario.name e configuramos uma condição, onde verifica se o cenário passou ou falhou apenas para salvar os prints em pastas diferentes, no caso de test_passed se passou ou test_falied se falhou.

Após ter feito isso, podemos rodar nosso projeto através do comando “cucumber” e ao finalizar o teste, basta reparar que foi criado uma pasta “screenshots” e dentro dela a pasta test_passed com o print da execução do cenário de teste.

Nesse exemplo foi configurado apenas o hooks after, para testar seus conhecimentos, tente implementar os outros três tipos existentes.

E por hoje é só…

Vou deixar o projeto final também no github através do link:

Tchau, brigadu e até o próximo artigo!

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade