1. 程式人生 > 實用技巧 >unittest框架系列三(跳過測試和預期失敗)

unittest框架系列三(跳過測試和預期失敗)

跳過測試和預期失敗

歡迎加入測試交流群:夜行者自動化測試(816489363)進行交流學習QAQ

–成都-阿木木

以下裝飾器和異常實現了測試方法及測試類的跳過和測試方法預期的失敗:

  • @unittest.skip原因

    無條件跳過裝飾測試。原因應說明為何跳過測試。

  • @unittest.skipIf條件原因

    如果條件為真,則跳過修飾的測試。

  • @unittest.skipUnless條件原因

    除非條件為真,否則跳過裝飾性測試。

  • @unittest.expectedFailure

    將測試標記為預期的失敗。如果測試失敗,則視為成功。如果測試通過,將被視為失敗。

  • 異常unittest.SkipTest原因

    引發此異常以跳過測試。通常,您可以使用TestCase.skipTest()或跳過裝飾器之一,而不是直接提高它。

#!/user/bin/env python
# -*- coding: utf-8 -*-

"""
------------------------------------
@Project : mysite
@Time    : 2020/8/28 11:32
@Auth    : chineseluo
@Email   : [email protected]
@File    : unittest_demo.py
@IDE     : PyCharm
------------------------------------
"""
import unittest
import sys
import pytest


class MyTestCase(unittest.TestCase):
    Conut = 0

    @unittest.skip("demonstrating skipping")
    def test_nothing(self):
        self.fail("shouldn't happen")

    @unittest.skipIf(pytest.__version__ in ("5.4.3", "5.4.4"),
                     "not supported in this library version")
    def test_format(self):
        # Tests that work for only a certain version of the library.
        print(pytest.__version__)
        print(type(pytest.__version__))
        pass

    @unittest.skipUnless(sys.platform.startswith("linux"), "requires Windows")
    def test_windows_support(self):
        print(sys.platform)
        # windows specific testing code 在windows平臺下進行測試
        pass

    def test_maybe_skipped(self):
        if self.Conut == 0:
            self.skipTest("external resource not available")
        # test code that depends on the external resource
        pass


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

測試類也可以像測試方法一樣跳過:

@unittest.skip("showing class skipping")
class MySkippedTestCase(unittest.TestCase):
    def test_not_run(self):
        pass

預期的失敗使用expectedFailure()裝飾器:

class ExpectedFailureTestCase(unittest.TestCase):
    @unittest.expectedFailure
    def test_fail(self):
        self.assertEqual(1, 0, "broken")

注意:

  • 跳過的測試方法,setUptearDown將不會執行,setUpClasstearDownClass仍會執行
  • 跳過的測試類,setUpClasstearDownClass將不會執行,setUptearDown將不會執行