Conhecendo a Ferramenta Cucumber

n giovanella
Brazilians in Tech
Published in
4 min readSep 24, 2021

cucumber n.
1. pepino.

Cucumber é uma ferramenta de descoberta, colaboração e documentação. Ele serve para alinhar os requisitos do sistema entre as diferentes partes envolvidas no ciclo de desenvolvimento de software, além de validar o funcionamento do sistema em si.

Por que usar Cucumber?

Cucumber ajuda a facilitar a descoberta e o uso de uma linguagem universal entre o time, unindo a nossa língua comum e a linguagem de programação. Os testes criados com Cucumber interagem diretamente com o código, mas são escritos em uma língua que permite o entendimento por parte dos stakeholders. Inclusive, a escrita coletiva desses testes auxilia num melhor desenvolvimento de software, garantindo que todas as pessoas envolvidas estejam na mesma página e entendam qual o comportamento esperado do sistema.

BDD

Cucumber segue a lógica de BDD — Behaviour Driver Development. O BDD, por sua vez, foi construído em cima do TDD — Test Driven Development. TDD é um processo onde o desenvolvimento do software é guiado pelos testes. Ou seja, primeiro escrevemos os cenários de teste e, então, desenvolvemos o software buscando fazer com que todos os testes passem. Já no BDD, estamos focando no comportamento do sistema. Descrevemos como esperamos que o sistema se comporte em diversas situações possíveis, transformamos esses cenários em testes, e validamos o software desenvolvido.

A Importância dos Cenários de Aceitação

“Testes unitários validam que o que você desenvolveu está certo, enquanto testes de aceitação validam que você desenvolveu a coisa certa”.
-
Matt Waynne e Aslak Hellesøy

Ao criarmos esses cenários no início do ciclo de desenvolvimento do software, podemos explorar e erradicar vários mal-entendidos o quanto antes. Além disso, os cenários criados auxiliam o time a focar, garantindo que o trabalho feito está de acordo com os requisitos e a funcionalidade entregue é algo que tem valor. O time ainda cometerá erros, mas bem menos.

Três potes de vidro com pepinos dentro deles. O pote do meio está sendo enchido de água.

gherkin n.
1. pepino em conserva, picles.

(A comunidade de software tem uma conexão muito forte com a culinária, ou muita imaginação na hora de pensar em nomes para ferramentas).

Gherkin

A linguagem de programação usada por trás do Cucumber é o Gherkin. Ela possui localização em diversas línguas, ou seja, podemos escrever todo o documento em português. Um documento escrito em Gherkin é mais ou menos assim:

Funcionalidade: Saque de Dinheiro
Essa funcionalidade descreve o sistema de saque de dinheiro nos nossos caixas eletrônicos.
Cenário: Saque em uma conta com crédito
Dado Um usuário que possui R$100 em sua conta
Quando Ele sacar R$20
Então O caixa eletrônico liberará R$20
E O seu novo saldo será R$80

Funcionalidade
A primeira palavra-chave do Gherkin é ‘Funcionalidade’. Ela que indica qual a característica do sistema que será validada nesse documento. Seguida da funcionalidade, normalmente escrevemos uma breve documentação sobre o que será testado nos cenários a seguir. A descrição pode ter múltiplas linhas. É uma ótima oportunidade para detalharmos como a funcionalidade será usada, por quem, adicionarmos links para documentações adicionais, pesquisas feitas com usuários, etc.

Cenário
Para descrevermos os comportamentos esperados, cada funcionalidade terá diversos cenários. Cada cenário é um exemplo concreto de como o sistema deve se comportar em uma determinada situação. Eles seguem o padrão:

  1. O sistema está em um estado.
  2. Alguma ação é tomada.
  3. O sistema está em um novo estado.

Para descrevermos esses cenários, seguimos a estrutura: dado, quando, então. Além dessas palavras-chaves, temos diversas outras que nos ajudam a detalhar os nossos cenários e evitar repetições.

Rodando os Testes

O documento de funcionalidades serve como uma ótima documentação e um guia para os testes de aceitação. A sua vantagem é que esses cenários podem ser facilmente automatizados. Cucumber está disponível em várias linguagens de programação, como Ruby, Python e Java. Basta escolher a sua linguagem preferida e desenvolver os seus testes.

Um exemplo de implementação do cenário acima seria:

Dado /^Um usuário que possui R\$(\d+) em sua conta$/ do |valor|
conta.depositar(valor)
conta.saldo.should eq(valor)
end
Quando /^Ele sacar R\$(\d+)$/ do |valor|
caixa = Caixa.new
caixa.sacar(conta, valor)
end
Então /^O caixa eletrônico liberará R\$(\d+)$/ do |valor|
caixa.dinheiro_entregue.should == valor
end
E /^O seu novo saldo será R\$(\d+)$/ do |valor|
conta.saldo.should eq(valor)
end

Essa foi uma breve introdução ao Cucumber. A ferramenta nos permite criar diversas outras coisas, como testes mais técnicos para a validação de funcionalidades específicas de uma API, por exemplo. Para saber mais sobre o Cucumber, recomendo acessar o site oficial, onde você encontra outras referências e a documentação da ferramenta.

Bons testes.

Fonte

‘The Cucumber Book’ por Matt Waynne e Aslak Hellesøy.

Para conhecer mais sobre a Brazilians in Tech, acesse nosso site neste link e junte-se a nos!

--

--