Índice
- Introdução
1.1 Imperativo
1.2 Declarativo
- Ferramentas
2.1 Imperative
2.2 Declarative
1. Introdução
1.1 Imperativo
Imperativo é quando você especifica o cenário utilizando etapas bastante descritivas, procurando por “response codes”, campos diferentes, valores do cabeçalho e parâmetros.
Exemplo de gherkin escrito no estilo imperativo:
Given I visit "/login"
When I enter "Bob" in the "user name" field
And I enter "tester" in the "password" field
And I press the "login" button
Then I should see the "welcome" page
1.2 Declarativo
Declarativo é focado em um comportamento mais “end-to-end”, chamar serviços e esperar o que está no sistema e o que está no banco de dados.
Descrevendo em uma linguagem natural, em outras palavras, descrever o que fazer e não como fazer.
Exemplo de gherkin escrito no estilo declarativo:
When "Bob" logs in
2. Ferramentas
2.1 Imperativo
Para um estilo imperativo um framework BDD não seria a melhor opção, nesse caso seria melhor utilizar os frameworks de teste de api abaixo:
- Tavern (Utiliza pytest debaixo do capô).
- Karate (Pode misturar automação de testes de api e UI).
- Rest-Assured (Testa e valida serviços rest).
2.2 Declarativo
É preferível ser declarativo com as ferramentas abaixo:
- Behave (Similar ao cucumber).
- Radish (Mais amigável para testagem programática).
- Lettuce (Similar ao cucumber, mas a comunidade não é mais tão ativa).
- Pytest-bdd (Plugin para o pytest).
3. Conclusão
Qual deles é o melhor?
Depende.
Caso você queira fazer simples “requests” e “responses” individuais validando se os dados foram salvos no banco de dados em um teste mais “data-driven”, ser imperativo é melhor porque ele costuma ser muito programático e de baixo nível.
Caso você queira fazer testes de api em um estilo declarativo você deveria escrever os cenários em um comportamento mais “end-to-end”.
4. 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”.
5. Bibliografia
- https://testautomationu.applitools.com/behavior-driven-python-with-pytest-bdd/
- https://community.saucelabs.com/forum-45/best-practice-imperative-v-declarative-testing-scenarios-160
- https://cucumber.io/docs/bdd/better-gherkin/
- https://tavern.readthedocs.io/en/latest/
- https://github.com/karatelabs/karate
- https://rest-assured.io/
- https://luizdeaguiar.com.br/pt/2022/06/21/bdd-vs-gherkin/