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.

no-cucumbers-allowed


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.


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!

11 comentários em “Usando Dado/Quando/Então sem Cucumber com Cypress

  1. 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

  2. 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:

      1. 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 😀

      2. Opa, não ficou formatado como eu gostaria e atralha um pouco a visualização, então criei um Gist, caso queira olhar.

        Scenario Outline: Login
        Dado que acesso a página de login
        Quando digito o usuário "<user>" e senha "<pwd>"
        E clico no botão LOGIN
        Então devo ver a mensagem "<msg>"
        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! |

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s