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:
- Acham que a abordagem faz sentido?
- A intenção do código fica mais clara com a camada extra?
- Deixem comentários livres, por favor
Agradeço imensamente a colaboração de vocês.
Abraços!