nariz x teste - quais são as diferenças (subjetivas) que devem me fazer escolher? [fechadas]

85

Comecei a trabalhar em um projeto Python bastante grande (multithread), com muitos testes (de unidade). O problema mais importante é que a execução do aplicativo requer um ambiente predefinido, que é implementado por um gerenciador de contexto. Até agora, usamos uma versão corrigida do executor de teste de unidade que executaria os testes dentro deste gerenciador, mas que não permite alternar o contexto entre os diferentes módulos de teste.

Tanto o nariz quanto o pytest suportam tal coisa porque eles suportam luminárias em muitas granularidades, então estamos planejando mudar para o nariz ou pytest. Ambas as bibliotecas também suportam testes de 'marcação' e executam apenas esses subconjuntos marcados, o que também gostaríamos de fazer.

Estive examinando a documentação do nariz e do pytest um pouco e, pelo que posso ver, a maior parte dessas bibliotecas suporta essencialmente a mesma funcionalidade, exceto que pode ter um nome diferente ou exigir uma sintaxe ligeiramente diferente. Além disso, notei algumas pequenas diferenças nos plug-ins disponíveis (o nariz tem suporte a multiprocessos, o pytest não parece, por exemplo)

Ao que parece, o diabo está nos detalhes, o que significa (muitas vezes pelo menos) no gosto pessoal e é melhor irmos com a biblioteca que melhor se adapta ao nosso gosto pessoal.

Então, eu gostaria de pedir uma argumentação subjetiva por que eu deveria ir com o nariz ou pytest a fim de escolher a combinação biblioteca / comunidade que melhor se adapta às nossas necessidades.

Jakob van Bethlehem
fonte
Apenas observei que mais ou menos a mesma pergunta foi feita também aqui - mas isso foi há cinco anos, então ainda acho que fazer a pergunta faz sentido
Jakob van Bethlehem
9
pytestoferece suporte a multiprocessos através do plugin pytest-xdist .
Bruno Oliveira
2
Como um aparte, gerenciadores de contexto são apenas objetos Python simples, e você pode chamar manager.__enter__()em seu TestCase.setUp()e manager.__exit__()em seu tearDown().
rescdsk
3
O nariz não está mais sendo mantido .
toasted_flakes,

Respostas:

80

Eu costumava usar o Nose porque era o padrão no Pylons. Eu não gostei nada disso. Ele tinha gavinhas de configuração em vários lugares, praticamente tudo parecia ser feito com um plugin subdocumentado o que tornava tudo ainda mais indireto e confuso, e porque fazia testes de unidade por padrão, ele regularmente quebrava com tracebacks Unicode, escondendo as fontes de erros.

Tenho estado muito feliz com o py.test nos últimos dois anos. Ser capaz de apenas escrever um teste pronto assertpara uso me faz odiar muito menos escrever testes , e hackear o que eu preciso no núcleo tem sido bem fácil. Em vez de uma interface fixa de plug-in, ele apenas tem pilhas de ganchos e um código-fonte bastante compreensível caso você precise cavar mais fundo. Eu até escrevi um adaptador para executar testes Testify em py.test, e tive mais problemas com Testify do que com py.test.

Dito isso, ouvi dizer que o nariz tem plug-ins para testes sem classes e afirma a introspecção hoje em dia, então provavelmente você se sairá bem com qualquer um deles. Ainda sinto que posso chegar ao chão correndo com o py.test, porém, e posso entender o que está acontecendo quando ele quebra.

Eevee
fonte
2
Alguns problemas com ocultação de rastros foram corrigidos por volta do nariz 0,11, muitos anos atrás. Desde a porta Python 3, espero que qualquer rastreamento de unicode seja menos frequente (embora pessoalmente eu ache que só tive um problema de unicode com o nariz uma vez, que surgiu ao combiná-lo com alguma classe base de caso de teste que fez algum "truque" que não realmente faz sentido - então isso acabou não sendo culpa do nariz). Eu suspeito que na verdade ambas as ferramentas tiveram suas arestas removidas ao longo dos anos, então talvez você goste do que você usou mais recentemente ;-)
Croad Langshan
e a parte de documentação recente. também estou confuso se devo usar nosetests ou py.test. ambos parecem ser igualmente bons, mas pelo que li, a maioria das pessoas está usando testes de nariz atualmente. Qual poderia ser a razão quando py.tests tem um conjunto melhor de bibliotecas de multiprocessamento disponíveis?
proprius
1
@proprius pode ser que nosetests viessem primeiro. alguns frameworks adicionaram suporte para ele, projetos usando esses frameworks o usaram por padrão e ele se espalhou. Além disso, embora py.test possa executar testes de nariz e de teste de unidade, seu estilo usual não é organizado em torno de classes, então portar para py.test pode parecer assustador.
Eevee
4
Comecei a ler a parte da documentação do pytest e percebi que para fins de multiprocessamento, bem como em termos de aprendizagem para um newbee, o pytest é uma escolha melhor.
proprius