Olá pessoal. Já neste mês , o curso de engenheiro de controle de qualidade do Python começa na OTUS. Antecipando o início deste curso, estamos compartilhando com você a tradução de material interessante.

Quase todas as principais linguagens de programação possuem estruturas para teste de BDD , e o Python não é exceção. E, de fato, ele tem vários deles! Então, como você os compara e qual é o melhor? Vamos tentar descobrir.
comportar-se
O comportamento é uma das estruturas python BDD mais populares. Apesar de não fazer parte oficialmente do projeto Cucumber , sua funcionalidade é bastante semelhante à estrutura do Cucumber.
Fontes:
Logomarca

Prós:
- Suporta totalmente a linguagem Gherkin;
- A funcionalidade do ambiente e acessórios facilita a instalação e remoção;
- Existe integração com o Django e o Flask;
- Popular entre os pythonists de BDD;
- Boa documentação e manuais;
- Há suporte para o PyCharm Professional Edition .
Contras:
- Não há suporte para execução paralela, isso requer uma estrutura separada de comportamento paralelo ;
- comportar-se é uma estrutura autônoma;
- Compartilhar etapas entre arquivos de recursos pode ser problemático.
pytest-bdd
pytest-bdd é um plugin pytest que permite aos usuários escrever testes como arquivos de recursos Gherkin em vez de funções de teste. Como é integrado ao pytest, ele pode funcionar com outros plugins do pytest, como pytest-html para criar belos relatórios e pytest-xdist para testes paralelos. Ele também usa acessórios pytest para injetar dependências.
Fontes:
Logomarca

Prós:
- Totalmente compatível com pytest e seus principais plugins;
- Você pode aproveitar todos os benefícios da comunidade pytest;
- As luminárias são uma ótima maneira de gerenciar o contexto entre as etapas;
- Os testes podem ser filtrados e executados juntamente com outros testes pytest;
- As definições de etapa e gancho podem ser facilmente compartilhadas usando conftest.py;
- Os dados tabulares podem ser melhor processados para testes orientados a dados ;
- Excelente documentação online e tutoriais;
- Há suporte para o PyCharm Professional Edition .
Contras:
- Os módulos de definição de etapas devem ter declarações explícitas para arquivos de recursos (via "@scenario" ou a função "scenarios");
- O plano do cenário deve ser tratado de maneira diferente.
rabanete
rabanete é uma estrutura destacada do BDD: adiciona nova sintaxe à linguagem Gherkin. Recursos de linguagem, como loops de script, pré-requisitos de script e constantes, tornam o rabanete de Gherkin mais programático para os casos de teste.
Fontes:
Logomarca

Prós:
- As extensões de linguagem Gherkin permitem que os testadores escrevam melhor os testes;
- Site, documentação e logotipo - tudo está no lugar;
- Arquivos de recursos e definições de etapas são muito claros.
Contras:
- É uma estrutura autônoma com um número limitado de extensões;
- Os puristas do BDD podem não gostar da adição da sintaxe Gherkin.
alface
alface é outra estrutura “vegetal” do BDD Python, conhecida há vários anos. No entanto, seu site e código não são atualizados há muito tempo.
Fontes:
Logo:

Prós:
- Código simples
- Verificado e bom.
Contras:
- Funcionalidade não tão rica quanto em outras estruturas;
- Ele parece não ter nenhum apoio ativo contínuo.
refrescar
freshen é uma das primeiras estruturas para teste de BDD em Python. Ele era um plugin para o nariz . No entanto, freshen e nose não são mais suportados e sua página de documentação indica claramente o uso de outras estruturas.
Recomendações
Nenhuma das estruturas acima é perfeita, mas muitas têm vantagens significativas. Em geral, eu recomendaria o uso do pytest-bdd, pois possui todas as vantagens dos pontos fortes do pytest. Acredito que o pytest é uma das melhores estruturas para testes em qualquer idioma, devido à sua concisão, acessórios, afirmações e plugins. O Python Developers Survey 2018 revelou que o pytest é a estrutura de teste mais popular para o Python. Apesar do fato de o pytest-bdd não parecer tão sofisticado quanto o comportamento, acredito que alguns TLCs da comunidade de código aberto possam corrigir isso.
E mais algumas recomendações:
- Use o comportamento se precisar de uma experiência de desenvolvimento limpa e confiável e de uma grande comunidade.
- Use pytest-bdd se precisar de integração com outros plug-ins que já contenham vários testes de pytest ou se precisar executar testes em paralelo.
- Use rabanete se quiser mais controle do software sobre os testes no nível Gherkin.
- Não use alface e refresque.
Qual é a sua estrutura BDD favorita? Por favor, compartilhe nos comentários!