• Python的unittest框架


    unittest框架

     

      unittest介绍和使用

     【 官方文档:https://docs.python.org/3/library/unittest.html 】

      1)  简介

    • unittest是python自带的一个单元测试框架 ;              
    • unittest中包含了一些对常规的测试用例体系的支持,包括:test fixture   test case    test suite      test runner;
    •  fixture中包含两种 ,分别为setup()   teardown()     setUpClass()     testDownClass() ,是一个脚手架;
    • 如果setUp() 成功运行,无论测试方法是否成功,都会运行 tearDown() ,若setup发生异常,框架认为测试发生异常,case不会被运行;

    【例子】

    复制代码
    import unittest
    
    def sum(a, b):
        return a + b
    
    class MyTestCase(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            print("setupclass")
    
        # 每个case开始前运行
        def setUp(self):
            print("setup")
    
        def test_int(self):
            self.assertEqual(sum(1, 2), 3)
    
        def test_number(self):
            self.assertEqual(sum(100, 200), 300)
    
        # 每个case结束后运行
        def tearDown(self):
            print("teardown")
    
        @classmethod
        def tearDownClass(cls):
            print("teatdownclass")
    
    if __name__ == '__main__':
        unittest.main()
    #  unittest.main() 提供了一个测试脚本的命令行接口。当在命令行运行该测试脚本,脚本按照特定格式输出 # 输出 setupclass setup teardown setup teardown teatdownclass2) pytest   
    复制代码

     

    2)测试套件 [将测试用例集合在一起]

    复制代码
    import unittest
    
    def sum(a, b):
        return a + b
    
    class MyTestCase(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            print("setupclass")
    
        # 每个case开始前运行
        def setUp(self):
            print("setup")
    
        def test_int(self):
            print("test_int")
            self.assertEqual(sum(1, 2), 3)
    
        def test_number(self):
            print("test_number")
            self.assertEqual(sum(100, 200), 300)
    
        # 每个case结束后运行
        def tearDown(self):
            print("teardown")
    
        @classmethod
        def tearDownClass(cls):
            print("teatdownclass")
    
    if __name__ == '__main__':
        # unittest.main()
    
      suit = unittest.TestSuite()
      suit.addTest(MyTestCase("test_int"))
      suit.addTest(MyTestCase("test_number"))
      # 执行测试
      runner = unittest.TextTestRunner(verbosity=2)
      runner.run(suit)
    复制代码

     

    3)不将测试函数转化为testcase的子类,打包测试函数运行:

    复制代码
    import unittest
    
    def test_Something(self):
        self.assertEqual(sum(1,2),3)
    
    unittest.FunctionTestCase(test_Something)
    复制代码

     

    4)跳过测试(Unittest支持跳过单个测试方法甚至整个测试类)

    复制代码
    @unittest.skip("reason")
    def test_int(self):
       print("test_int")
       self.assertEqual(sum(1, 2), 3)
    
    # 当condition为真时,跳过; @unittest.skipIf(condition='a',reason='b')
    # 跳过,除非条件为真; @unittest.skipUnless(condition='a',reason='b')
    复制代码

    5)假设预计失败

    # 把测试标记为预计失败。如果测试不通过,会被认为测试成功;如果测试通过了,则被认为是测试失败。
    @unittest.expectedFailure
    def test_number(self): print("test_number") self.assertEqual(sum(100, 200), 300)

    * 被跳过的测试的 setUp() 和 tearDown() 不会被运行。

    * 被跳过的类的 setUpClass() 和 tearDownClass() 不会被运行。

    * 被跳过的模组的 setUpModule() 和 tearDownModule() 不会被运行。

    6)断言常用方法

    7)按顺序执行case

      unittest框架默认根据ASCII码的顺序加载测试用例的,数字与字母的顺序为:“0-9”,“A-Z”,“a-z”。而想要用例按顺序执行,需要通过TestSuite类的addTest()方法按照一定的顺序来加载

    8) 运行:python -m unittest test_demo.py     或是   python -m unittest -v test_demo.py    (加上-v可以打印更详细的信息)

    【导出报告】

    *** 若有疑问,欢迎讨论,QQ群号:744419090 ***

  • 相关阅读:
    Simpo
    Numpy技巧
    流程图
    注册免费试用12个月的亚马逊AWS云计算服务
    java-Collection
    CoreGraphic
    吴裕雄--天生自然python学习笔记:python 用pygame模块开发俄罗斯方块游戏
    吴裕雄--天生自然python学习笔记:python 用pygame模块检测键盘事件和鼠标事件
    吴裕雄--天生自然python学习笔记:python 用pygame模块角色类(Sprite)移动与碰撞
    吴裕雄--天生自然python学习笔记:python 用pygame模块动画一让图片动起来
  • 原文地址:https://www.cnblogs.com/hd-test/p/12189091.html
Copyright © 2020-2023  润新知