1

Buscando opinião da comunidade sobre BDD em Python puro

Olá, sou professor de automação de testes da PUC e estou explorando uma nova abordagem em BDD que chamo de narrativa executável. Uso está abordagem para ensinar automação de testes aos meus alunos e estou buscando opiniões sinceras de programadores para refinar e melhorar a abordagem de ensino e o framework Python desenvolvido. O framework que uso nas minhas aulas se chama Guará, é open source e tem contribuição da comunidade de desenvolvimento. Ele usa o padrão de projetos Page Transactions onde o foco da automação sai da UI e se volta para a jornada do usuário. O projeto Guará tem alguns objetivos ambiciosos:

  • resolver o problema de acoplamento que o Page Objects tem com a UI
  • ser simples de explicar e usar
  • eliminar abstrações desnecessárias que vemos no Cucumber como os arquivos .feature e steps
  • manter o cenário de negócio vivo nos testes ou no próprio código fonte
  • e demonstrar a capacidade criativa dos desenvolvedores brasileiros e estimular mais pesquisas nacionais na área de qualidade de software, BDD e DDD

Porém, além de automação de testes, aí que gostaria da opinião da comunidade, o padrão e o framework podem ser usados em código produtivo diretamente. Ficaria algo como (bem simplificado):

def buy_product(user, product):
    app.given(TheUserIsLoggedIn, with_name=user) \
    .when(TheUserBuysAProduct, with_name='cellphone') \
    .then(TheSystemShouldReturn, 'done')

rodando numa CLI:

python main.py buy-product --user john.doe --product cellphone

A ideia é manter a narrativa/intenção do negócio viva no código fonte, manter o código como fonte de verdade e criar uma metalinguagem baseada em um contrato.
Gostaria da opnião da comunidade sobre essa nova abordagem BDD e sobre o framework.
Notas:

  • Eu pesquisei outras ferramentas BDD onde se escreve o código puro, como JGiven (Java), mas ele ainda é focado no teste em si.
  • A camada extra não elimina a necessidade de services, repositories, models... mas deixa o código fonte mais orientado à intenção do negócio. Ele também vira a própria documentação e fonte da verdade.
  • Cada classe é escrita em Python puro também. Exemplo enxuto:
class TheUserIsLoggedIn(...):
    def do(self, with_name):
        assert DATABASE.session(with_name)

Perguntas:

  1. Acham que a abordagem faz sentido?
  2. A intenção do código fica mais clara com a camada extra?
  3. Deixem comentários livres, por favor

Agradeço imensamente a colaboração de vocês.

Abraços!

Carregando publicação patrocinada...