Python Unittest Discover即使失败也返回退出代码0

Posted

技术标签:

【中文标题】Python Unittest Discover即使失败也返回退出代码0【英文标题】:Python Unittest Discover return exit code 0 even if fails 【发布时间】:2018-11-05 09:36:55 【问题描述】:

我读过几篇文章说,如果你用 unittest.main() 调用你的单元测试,如果它们失败,它们应该以失败代码退出。我用命令调用我的单元测试:python -m unittest discover -v。我正在使用 Python 3.6.6。一个示例单元测试可能如下所示:

from server import app
import unittest

class ServerTestCase(unittest.TestCase):
    """
    Unittesting for the server application.
    """


    def setUp(self):
        """
        Create a test client
        """
        self.app = app.test_client()
        self.app.testing = True 

    def tearDown(self):
        pass

    def test_root_endpoint(self):
        """
        Testing the root endpoint
        """

        result = self.app.get('/') 
        self.assertEqual(result.status_code, 200) 

    def test_health_endpoint(self):
        """
        Testing the health endpoint
        """

        result = self.app.get('/health')
        assert b'UP' in result.data

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

即使我的一项测试失败,我在检查退出代码时也会得到这个:

$ echo $?
0

我做错了什么?

【问题讨论】:

Unit test script returns exit code = 0 even if tests fail的可能重复 @bjmc 该帖子的最佳答案是说他没有使用unittest.main,因此他需要使用解决方法。我正在使用unittest.main 并遇到同样的问题,所以不同的情况 【参考方案1】:

您是否将单元测试文件命名为 test_*.py 之类的名称?因为这就是发现正在寻找的东西。否则无论你的测试如何,结果都是:

Ran 0 tests in 0.000s
OK

(顺便说一句,使用-m unittest discover 时您不必if __name__ ... unittest.main()

【讨论】:

测试正在运行。我可以找回7/8成功,1失败,但仍然退出代码0。 好吧,这很奇怪。我无法重现这种行为;对我来说,退出代码是您所期望的(0=测试成功,1=测试失败)。对不起,我完全没有想法。你能提供确切的命令行和输出吗?

以上是关于Python Unittest Discover即使失败也返回退出代码0的主要内容,如果未能解决你的问题,请参考以下文章

Python Unittest Discover即使失败也返回退出代码0

利用Python的unittest单元测试框架的discover方法批量执行脚本用例

如何从“python setup.py test”运行 unittest discover?

python:discover()方法批量执行用例

python接口自动化(二十六)--批量执行用例 discover(详解)

unittest测试框架_3_discover