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.
pytest
oferece suporte a multiprocessos através do plugin pytest-xdist .manager.__enter__()
em seuTestCase.setUp()
emanager.__exit__()
em seutearDown()
.Respostas:
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
assert
para 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.
fonte