Não se prenda ao uso do Cucumber para fazer uso das palavras-chave Dado/Quando/Então
Muita gente ainda acha que usar Cucumber é a solução para pessoas não técnicas começarem a escrever testes automatizados, visto que você escreve a especificação de como o software deve se comportar em uma linguagem natural e tal especificação pode ser executada para testar o sistema.
Porém, para tal linguagem natural funcionar como script de teste automatizado, precisamos de código que interprete tal linguagem (Dado/Quanto/Então). Ou seja, a camada de linguagem natural é um nível de abstração de alto nível, enquanto que o código que a interpreta é o “baixo nível”.
Com frequência em grupos de discussão sobre Cypress vejo pessoas pedindo ajuda com a integração do plugin do Cucumber, erros e outros problemas, os quais poderiam ser completamente evitados se o Cucumber não estivesse sendo usado em primeiro plano.
Daí você me diz: “Mas o teste fica tão legível quando uso as palavras-chave Dado/Quando/Então.”
E eu te respondo: “Nada te impede de continuar usando estas palavras-chave sem usar Cucumber.”
Vamos ver como?
Imaginemos um exemplo de um buscador web.
Em BDD (behaviour-driven development) teríamos o seguinte requisito:
Feature: Buscador web
Como um usuário da world-wide web
Quero realizar buscas por assuntos do meu interesse
Para aprofundar meus conhecimentos
Em Gherkin, poderíamos pensar nos seguintes cenários:
Cenário 1: Busca digitando um termo e clicando na lupa
Dado que acesso a página do buscador
Quando digito um termo e clico na lupa
Então vejo uma lista de resultados sobre o termo que procurei
Cenário 2: Busca digitando um termo e pressionando ENTER
Dado que acesso a página do buscador
Quando digito um termo e pressiono ENTER
Então vejo uma lista de resultados sobre o termo que procurei
Vejamos agora um exemplo onde cobri tais cenários com Cypress sem utilizar Cucumber, porém ao mesmo tempo, sem perder o uso das palavras-chave Dado/Quando/Então.
/* busca.spec.js
*
* Como um usuário da world-wide web
* Quero realizar buscas por assuntos do meu interesse
* Para aprofundar meus conhecimentos
*/
describe('Buscador web', () => {
context('Dado que acesso a página do buscador', () => {
beforeEach(() => {
cy.visit('https://duckduckgo.com')
})
context('Quando digito um termo e clico na lupa', () => {
beforeEach(() => {
cy.get('#search_form_input_homepage')
.type('cypress')
cy.get('#search_button_homepage')
.click()
})
it('Então vejo uma lista de resultados sobre o termo que procurei', () => {
cy.get('.results .result')
.should('have.length', 11)
})
})
context('Quando digito um termo e pressiono ENTER', () => {
beforeEach(() => {
cy.get('#search_form_input_homepage')
.type('cypress{enter}')
})
it('Então vejo uma lista de resultados sobre o termo que procurei', () => {
cy.get('.results .result')
.should('have.length', 11)
})
})
})
})
E esse é o resultado dos testes após executá-los em modo headless.
Buscador web
Dado que acesso a página do buscador
Quando digito um termo e clico na lupa
✓ Então vejo uma lista de resultados sobre o termo que procurei (4173ms)
Quando digito um termo e pressiono ENTER
✓ Então vejo uma lista de resultados sobre o termo que procurei (1973ms)
Ou seja, ainda tenho as palavras Dado/Quando/Então, meus testes continuam legíveis e não perdi um minuto sequer integrando o Cypress ao Cucumber. Fácil assim!
O código completo do exemplo acima pode ser encontrado em meu perfil no GitHub.
Aproveito pra te convidar para assistir uma live onde falei sobre o motivo por eu não usar mais Cucumber para a escrita de testes automatizados e como sou mais feliz com isso.
E uma talk que fiz (em Inglês), sobre como escrever testes com Cypress sem Cucumber, onde fui além do usa das palavras-chave Dado/Quando/Então, mostrando também como executar um mesmo teste com base em uma lista de dados pré-definida (tais como as tabelas que o Cucumber permite usar) e como rodar testes utilizando tags, porém, tudo sem Cucumber. Confira no YouTube.
Ficou curioso e quer aprender mais sobre automação de testes com Cypress? Conheça meus cursos no Udemy e na Escola Talking About Testing.
👋 Até a próxima e bons testes!
Este conteúdo foi traduzido para inglês e pode ser encontrado no DEV Community.
interessante essa abordagem, não conhecia o termo ‘context’.
uma dúvida, sobre as boas práticas de escrita de gherkin:
‘Quando digito um termo e clico na lupa’
não seria ideal?
‘Quando busco pelo termo’
obrigada por compartilhar o conhecimento e contribuir com a comunidade de QAs
Patricia, fiz dessa forma para demonstrar os dois tipos de busca que o usuário pode fazer.
Em meu curso avançado de Cypress fazemos bastante uso do context.
Legal, eu simplesmente coloco a descrição do cenário inteira no it mesmo. E quando necessário complemento com cy.log no script mesmo.
it(`Cenário 1:
DADO
Que estou na página de contas
QUANDO
Edito uma conta
E altero seu nome
ENTÃO
Devo ver a conta com o nome atualizado na lista`,
fica assim:

Interessante! Obrigado pela contribuição.
Fala Walmyr, gostei bastante da ideia. O que eu mais vejo como vantagem do Cucumber é o uso de Scenario Outlines, nesses casos você conhece uma forma trabalha sem utilizar Cucumber?
Oi Nicholas, como não uso cucumber faz bastante tempo, não lembro o que são scenario outlines, pode dar um exemplo, por favor?
Claro, Scenario Outline serve para você explorar outros cenários de um caso de teste, mudando as variáveis dele através de uma tabela, onde cada linha seria um cenário diferente.
Por exemplo:
Dado que acesso a página de login
Quando digito o usuário”” e senha “”
E clico no botão LOGIN
Então devo ver a mensagem “”
Examples:
| user | pwd | msg |
| user01 | | O campo de senha deve ser preenchido |
| | 1234 | O campo usuário deve ser preenchido |
| user01 | 123 | Senha inválida |
| user01 | 12345 | Login efetuado com sucesso! |
Perceba que cada linha se torna um cenário diferente e o teste é reexecutado automaticamente para uma, substituindo as variáveis pelos respectivos valores, cobrindo uma variedade maior de cenários sem ter que reescrever o caso.
Essa é a maior vantagem que, hoje, vejo o Cucumber trazendo para a automação, o reuso de casos de teste. Ainda não encontrei uma forma, organizada e eficaz de replicar essa feature sem usar Cucumber, mas estou buscando, se souber de algo, seria de muita ajuda 😀
Opa, não ficou formatado como eu gostaria e atralha um pouco a visualização, então criei um Gist, caso queira olhar.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Scenario Outline Sample.feature
hosted with ❤ by GitHub
Claro. Publiquei um vídeo no canal Talking About Testing demonstrando isso https://youtu.be/oYnma0rmA4E
Excelente abordagem, sem necessidade de instalar plugins de terceiros, fantástico Walmyr, sempre que surge uma duvida venho me consultar no seu Blog.
Fico feliz que gostou e que o blog TAT é uma fonte de consulta pra você Cleberson! #TamoJunto