Desenvolvimento baseado em comportamento - Gherkin

Gherkin é uma linguagem usada para escrever Features, Scenarios, and Steps. O objetivo do Gherkin é nos ajudar a escrever requisitos concretos.

Para entender o que queremos dizer com requisitos concretos, considere o seguinte exemplo -

Os clientes devem ser impedidos de inserir dados inválidos de cartão de crédito.

Versus

Se um cliente inserir um número de cartão de crédito que não tenha exatamente 16 dígitos, ao tentar enviar o formulário, ele deverá ser exibido novamente com uma mensagem de erro avisando sobre o número correto de dígitos.

Este último não tem ambigüidades e evita erros e é muito mais testável.

O Gherkin foi projetado para criar requisitos mais concretos. No Gherkin, o exemplo acima se parece com -

Feature

Feedback ao inserir detalhes de cartão de crédito inválido Feature Definition

Em testes de usuário, vimos muitas pessoas que cometem erros. Documentação

Background True for all Scenarios Below

Given Eu escolhi um item para comprar,

And Estou prestes a inserir o número do meu cartão de crédito

Scenario - Número do cartão de crédito muito curtoScenario Definition

When Eu insiro um número de cartão com menos de 16 dígitos

And todos os outros detalhes estão corretos

And Eu envio o formulárioSteps

Then o formulário deve ser mostrado novamente

And Devo ver uma mensagem informando sobre o número correto de dígitos

Formato e sintaxe do Gherkin

Os arquivos Gherkin são arquivos de texto simples e têm a extensão .feature. Cada linha que não estiver em branco deve começar com uma palavra-chave Gherkin, seguida de qualquer texto que você desejar. As palavras-chave são -

  • Feature

  • Scenario

  • Dado, quando, então e, mas (etapas)

  • Background

  • Esboço do cenário

  • Examples

  • "" "(Strings Doc)

  • | (Tabelas de dados)

  • @ (Tag)

  • # (Comentários)

  • *

Característica

o FeatureA palavra-chave é usada para descrever um recurso de software e para agrupar os cenários relacionados. Um recurso tem três elementos básicos -

  • A palavra-chave - recurso.

  • O nome do recurso, fornecido na mesma linha da palavra-chave do recurso.

  • Uma descrição opcional (mas altamente recomendada) que pode abranger várias linhas, ou seja, todo o texto entre a linha que contém a palavra-chave Característica e uma linha que começa com Cenário, Plano de Fundo ou Contorno do Cenário.

Além de um nome e uma descrição, os recursos contêm uma lista de cenários ou contornos de cenários e um plano de fundo opcional.

É convencional nomear um .featurearquivo pegando o nome do elemento, convertendo-o em minúsculas e substituindo os espaços por sublinhados. Por exemplo,

feedback_when_entering_invalid_credit_card_details.feature

Para identificar recursos em seu sistema, você pode usar o que é conhecido como “modelo de injeção de recursos”.

A fim de <atingir algum objetivo> como um <tipo de usuário>, eu quero <a recurso>

Descrições

Algumas partes dos documentos Gherkin não precisam começar com uma palavra-chave.

Nas linhas que seguem um recurso, cenário, esboço de cenário ou exemplos, você pode escrever o que quiser, desde que nenhuma linha comece com uma palavra-chave. Esta é a maneira de incluir Descrições.

Cenário

Para expressar o comportamento do seu sistema, você anexa um ou mais cenários a cada recurso. É comum ver 5 a 20 cenários por recurso para especificar completamente todos os comportamentos em torno desse recurso.

Os cenários seguem o seguinte padrão -

  • Descreva um contexto inicial

  • Descreva um evento

  • Descreva um resultado esperado

Começamos com um contexto, descrevemos uma ação e verificamos o resultado. Isso é feito com etapas. Gherkin fornece três palavras-chave para descrever cada um dos contextos, ações e resultados como etapas.

  • Given - Estabelecer contexto

  • When - Executar ação

  • Then - Verifique o resultado

Essas palavras-chave fornecem legibilidade do cenário.

Example

Scenario - Retire dinheiro da conta.

  • Given Tenho $ 100 em minha conta.

  • When Eu solicito $ 20.

  • Then $ 20 devem ser dispensados.

Se houver vários Given ou When etapas abaixo umas das outras, você pode usar And ou But. Eles permitem que você especifique cenários em detalhes.

Example

Scenario - Tentativa de retirada com cartão roubado.

  • Given Tenho $ 100 em minha conta.

  • But meu cartão é inválido.

  • When Eu solicito $ 50.

  • Then meu cartão não deve ser devolvido.

  • And Eu deveria ser informado para entrar em contato com o banco.

Ao criar cenários, lembre-se de que 'cada cenário deve fazer sentido e pode ser executado independentemente de qualquer outro cenário' '. Isso significa -

  • Você não pode ter a condição de sucesso de um cenário dependendo do fato de que algum outro cenário foi executado antes dele.

  • Cada cenário cria seu contexto particular, executa uma coisa e testa o resultado.

Esses cenários fornecem os seguintes benefícios -

  • Os testes serão mais simples e fáceis de entender.

  • Você pode executar apenas um subconjunto de seus cenários e não precisa se preocupar com a quebra de seu conjunto de teste.

  • Dependendo do seu sistema, você pode executar os testes em paralelo, reduzindo o tempo necessário para executar todos os seus testes.

Esboço do cenário

Se você tiver que escrever cenários com várias entradas ou saídas, pode acabar criando vários cenários que diferem apenas por seus valores. A solução é usar o esboço do cenário. Para escrever um esboço do cenário,

  • As variáveis ​​nas etapas do esboço do cenário são marcadas com <e>.

  • Os vários valores para as variáveis ​​são fornecidos como exemplos em uma tabela.

Example

Suponha que você esteja escrevendo um recurso para adicionar dois números em uma calculadora.

Feature - Adicionar.

Scenario Outline: Add two numbers.
Given the input "<input>"
When the calculator is run
Then the output should be <output>"
Examples
| input    | output |
| 2+2      | 4      | 
| 98+1     | 99     |
| 255+390  | 645    |

Uma seção de esboço de cenário é sempre seguida por uma ou mais seções de exemplos, que são um contêiner para uma tabela. A tabela deve ter uma linha de cabeçalho correspondente às variáveis ​​nas etapas de esboço do cenário. Cada uma das linhas abaixo criará um novo cenário, preenchendo os valores das variáveis