Índice
- Setup Inicial
1.1 Clone o Projeto
- Executando Testes
4.1 Executando Testes pela Tag
4.2 Executando mais de uma Tag
1. Setup Inicial
1.1 Clone o Projeto
Continuaremos a partir de um projeto de automação anterior “Gherkin com Python e Pytest-Bdd”.
Certifique-se de clonar a “branch” correta para que possamos começar: “tutorial/gherkin-pytest-bdd”.
Depois de cloná-lo, verifique no VSCode se você clonou a branch correta.
2. Filtrando Testes com Tags
As tags deveriam ser aplicadas nos arquivos gherkin, elas podem ser aplicadas em:
- Features.
- Scenarios.
- Scenario Outlines.
2.1 Exemplo de Implementação de Tags
Uma “feature” ou “scenario” podem ter um número ilimitado de tags.
@web @basic-search
Feature: DuckDuckGo Web Browsing
A mesma tag também pode ser utilizada por mais de uma “feature” ou “scenario”.
@web
Feature: DuckDuckGo Web Browsing
@web
Scenario: Basic DuckDuckGo Result Title
Tags adicionadas em “features” afetam os “scenarios” dentro das “features”.
@web
Feature: DuckDuckGo Web Browsing
As a web surfer,
I want to find information online,
So I can learn new things and get tasks done.
Background:
Given the DuckDuckGo home page is displayed
Scenario: Basic DuckDuckGo Result Title
When the user searches for "panda"
Then results title contains "panda"
3. Implementação
“web.feature”:
@web
Feature: DuckDuckGo Web Browsing
As a web surfer,
I want to find information online,
So I can learn new things and get tasks done.
Background:
Given the DuckDuckGo home page is displayed
@basic-search
Scenario: Basic DuckDuckGo Result Title
When the user searches for "panda"
Then results title contains "panda"
@scenario-outline
Scenario Outline: Basic DuckDuckGo Search
When the user searches for <name>
Then results are shown for <found_animal>
Examples: Animals
| name | found_animal |
| panda | panda |
| python | python |
| polar bear | polar bear |
@basic-search @independence-search
Scenario: Lengthy DuckDuckGo Search
When the user searches for the phrase:
"""
When in the Course of human events, it becomes necessary for one people
to dissolve the political bands which have connected them with another,
and to assume among the powers of the earth, the separate and equal
station to which the Laws of Nature and of Nature's God entitle them,
a decent respect to the opinions of mankind requires that they should
declare the causes which impel them to the separation.
"""
Then one of the results contains "Declaration of Independence"
4. Executando Testes
4.1 Executando Testes pela Tag
Abra o “Prompt de Comando” na raiz do seu projeto e escreva o comando abaixo.
Lembre-se de remover o símbolo do arroba (@) que vem antes do nome da tag, também lembre-se de colocar o nome da tag entre aspas duplas.
pipenv run python -m pytest -k "web"
Após executá-lo, o teste talvez lance um aviso.
PytestUnknownMarkWarning: Unknown pytest.mark.xxx - is this a typo?
Caso o aviso acima seja exibido crie o arquivo “pytest.ini” dentro da raiz do seu projeto e escreva as tags nele.
“pytest.ini”:
[pytest]
markers =
web: marks tests as web tests
basic-search
scenario-outline
independence-search
Execute os testes novamente e todos os cenários sob a tag @web serão executados.
4.2 Executando mais de uma Tag
Você pode utilizar operadores lógicos python (and, or, not) para especificar qual tag deveria ser chamada.
- And (E).
Executa todos os testes que possuem ambas as tags “basic-search” e “independence-search”.
pipenv run python -m pytest -k "basic-search and independence-search"
- Or (Ou).
Executa todos os testes que possuem uma tag ou outra: “scenario-outline” ou “independence-search”.
pipenv run python -m pytest -k "scenario-outline or independence-search"
- Not (Não).
Executa os testes que possuem a tag “basic-search” e não executa os testes tagueados com “scenario-outline”.
pipenv run python -m pytest -k "basic-search and not scenario-outline"
5. Repositório
Criei uma branch nova para esse tutorial chamada “tutorial/gherkin-tags”, clique no link abaixo para visualizar:
https://github.com/LuizGustavoR/intro-selenium-py/tree/tutorial/gherkin-tags
Fim.
6. 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”.