Shared Steps e Hooks com Pytest-BDD


Índice

  1. Introdução
    1.1 Shared Steps
    1.2 Hooks
  1. Conftest
  1. Setup Inicial
  1. Implementação
    4.1 Implementando Shared Steps
    4.2 Implementando Hooks
  1. Executando Testes
  1. Repositório
  1. Agradecimentos
  1. Bibliografia


1. Introdução


1.1 Shared Steps

Os “shared steps” são “steps” comuns que podem ser utilizados por qualquer arquivo “.feature” independente de onde estejam localizados na hierarquia do projeto.


1.2 Hooks

Os “hooks” são lógicas adicionais que podem ser inseridas em qualquer lugar durante a execução de um arquivo “.feature”.
Seja antes e depois de um cenário ou antes e depois de um “step”.

Tipos de “hooks” disponíveis no pytest-bdd.


2. Conftest

Os “shared steps” e “hooks” ficam localizados no arquivo “conftest.py”.

O “conftest.py” fica localizado junto aos módulos de testes que ficam no diretório “/tests”.


3. Setup Inicial

Continuaremos a partir de um projeto de automação anterior “Adicionando Tags em Cenários Gherkin”.
Certifique-se de clonar a “branch” correta para que possamos começar: “tutorial/gherkin-tags”.

Depois de cloná-lo, verifique no VSCode se você clonou a branch correta.


4. Implementação


4.1 Implementando Shared Steps

Nesse projeto que você acabou de clonar, no arquivo “web.feature” já está implementado uma “shared step” que é executada antes de cada cenário.

web.feature”:

    Background:
        Given the DuckDuckGo home page is displayed

A implementação da funcionalidade está no arquivo de “step definition” chamado “test_web_steps.py” que você pode ver no trecho de código abaixo.
Você precisa apenas de mover o trecho de código abaixo de “test_web_steps.py” para “conftest.py” onde os “shared steps” deveriam ficar.

test_web_steps.py” -> “conftest.py”:

# Shared given steps
from pytest_bdd import given
from pages.search import DuckDuckGoSearchPage
 
@given('the DuckDuckGo home page is displayed', target_fixture="duckduckgo_home")
def duckduckgo_home(browser):
    DuckDuckGoSearchPage(browser).load()
    pass

É isso, agora você possui uma “shared step” dentro do seu arquivo conftest que é acessível pelos arquivos “.feature”.


4.2 Implementando Hooks

Você pode ver abaixo o exemplo de um “hook” que irá exibir uma mensagem sempre que houver um erro de execução.

conftest.py”:

# Hooks
import pytest
def pytest_bdd_step_error(request, feature, scenario, step, step_func, step_func_args, exception):
    print(f'Step failed: {step}')


5. Executando Testes

  • Antes de executar os testes, altere o resultado esperado em um deles para que falhe e você veja o “hook” funcionando.
  • No exemplo abaixo eu alterei o resultado esperado do cenário “Lengthy DuckDuckGo Search” de “Declaration of Independence” para “Declaration of Happiness”.

Execute o teste e a mensagem do “hook” será exibida.

pipenv run python -m pytest


6. Repositório

Criei uma branch nova para esse tutorial chamada “tutorial/sharedsteps-and-hooks”, clique no link abaixo para visualizar:
https://github.com/LuizGustavoR/intro-selenium-py/tree/tutorial/sharedsteps-and-hooks

Fim.


7. Agradecimentos


8. Bibliografia

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *