Índice
- Introdução
1.1 Shared Steps
1.2 Hooks
- Implementação
4.1 Implementando Shared Steps
4.2 Implementando Hooks
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
- Esse guia foi feito com base no curso “Behavior Driven Python with pytest-bdd” por Andrew Knight.
- Curso disponível na “Testing Automation University”.