py.test将IndexError / KeyError报告为失败而不是错误

时间:2016-12-21 21:39:37

标签: python python-3.x pytest python-unittest

 import unittest
 import logging

 FORMAT = '%(asctime)-15s %(message)s'
 logging.basicConfig(format=FORMAT)


 log = logging.getLogger(__name__)
 log.root.setLevel(logging.DEBUG)

 class FixturesTest(unittest.TestCase):

     def setUp(self):
         log.info('starting setup')
         self.fixture = range(1, 10)
         log.warn('Hello world')

     def tearDown(self):
         log.info('starting teardown')
         del self.fixture
         log.info('Goodbye world')

     def test_pass(self):
         log.info('in test pass')
         self.assertEqual(self.fixture, range(1, 10))
         log.error('Test world')

     def test_fail(self):
         log.info('in test fail')
         log.error("let's fail a test")
         assert(1==0)

     def test_error(self):
         log.info('in test error')
         log.info("let's error a test")
         d = []
         d[1]

     if __name__ == '__main__':
         unittest.main()

使用py.test运行上面的代码,它将test_error测试方法报告为测试失败而不是测试错误。而使用unittest运行它会将test_error显示为错误而不是失败,您能否对此分享任何想法?

更新:相同的代码,鼻子也认为它是错误而不是test_error的失败,这是py.test中的一个问题吗?

更新:如果您不确定我所指的是什么,如果您运行py.test test_filename.py,如果您运行python -m unittest test_filename.py或nosetest test_filename.py,则会获得1次传递,2次失败,它的1次通过,1次失败,1次错误。

1 个答案:

答案 0 :(得分:2)

pytest不区分测试失败(由于AssertionError)和测试错误(任何其他异常),例如unittest 。这不是错误,而是设计。

this thread中进行了一些讨论,以增加对此类分离的支持,并产生了pytest-finer-verdicts插件。