zoukankan      html  css  js  c++  java
  • python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures

    1.用例执行顺序

    unittest默认会按照ascii码的顺序,依次执行。类名——方法名排序,使用discover也是默认排序。如果不想使用默认排序,就使用testsuite测试集的方式。

    import unittest
    class TestB(unittest.TestCase):
        def setUp(self):
            print("class B start")
        def testC(self):
            print("func c")
        def testA(self):
            print("func a ")
        def tearDown(self):
            print("class B end")
    class TestA(unittest.TestCase):
        def setUp(self):
            print("class A start")
        def testB(self):
            print("func b")
        def tearDown(self):
            print("class A end")
    if __name__=="__main__":
        unittest.main()
    

    discover,新建runtest.py文件

    import unittest
    test_dir="./"
    discover=unittest.defaultTestLoader.discover(test_dir,pattern="testorder.py")
    if __name__=="__main__":
        runner=unittest.TextTestRunner()
        runner.run(discover)
    

    suite

    if __name__=="__main__":
        suite=unittest.TestSuite()
        suite.addTest(TestB("testA"))
        suite.addTest(TestA("testB"))
        suite.addTest(TestB("testC"))
    
        runner = unittest.TextTestRunner()
        runner.run(suite)
    

    2.多级目录

    执行多级目录,只需要在每个子目录下面添加__init__文件即可

    test_a.py

    import unittest
    class TestA(unittest.TestCase):
        def setUp(self):
            pass
        def test(self):
            print("A")
        def tearDown(self):
            pass
    

    test_b,test_c,test_d只是将test中输出更改为B C D
    runtest.py

    import unittest
    test_dir="./"
    discover=unittest.defaultTestLoader.discover(test_dir,pattern="test*.py")
    if __name__=="__main__":
        runner=unittest.TextTestRunner()
        runner.run(discover)
    

    3.装饰器:跳过测试和执行失败

    运行测试时,需要跳过某些测试用例,或预期失败,此时unittest提供了装饰器来实现这些需求。
    装饰器同样适用于类

    装饰器 说明
    unittest.skip(原因) 无条件的跳过测试
    unittest.skipIf(条件, 原因) 如果条件为真,就跳过测试;否则执行测试
    unittest.skipUnless(条件, 原因) 如果条件为真,就执行测试;否则跳过测试
    unittest.expectedFailure 预期失败。执行结果失败,pass;执行结果成功,fail
    import unittest
    class MyTest(unittest.TestCase):
        @unittest.skip("直接跳过test_skip")
        def test_aaa(self):
            print("直接跳过test_aaa
    ")
        @unittest.skipIf(3>2,"条件为true时,跳过test_skipIf")
        def test_bbb(self):
            print("跳过test_bbb
    ")
        @unittest.skipUnless(3>2,"条件为true时,执行测试test_skipUnless")
        def test_ccc(self):
            print("执行测试test_ccc
    ")
        @unittest.expectedFailure
        def test_ddd(self):
            print("test_ddd执行完毕
    ")
        @unittest.expectedFailure
        def test_eee(self):
            self.assertEqual(2,3)
    if __name__=="__main__":
        unittest.main()
    

    4.fixtures

    除了用例的fixtures,unittest还提供了更大范围的fixtures,如针对模块和类的

    • setUpModule/tearDownModule:在整个模块的开始于结束是被执行
    • setUpClass/earDownClass:在测试类的开始与结束时被执行
    • setUp/tearDown:在测试用例的开始与结束时被执行
    import unittest
    def setUpModule():
        print("模块:初始化")
    def tearDownModule():
        print("模块:销毁")
    class Test(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            print("类:初始化")
        @classmethod
        def tearDownClass(cls):
            print("类:销毁")
        def setUp(self):
            print("用例:初始化")
        def tearDown(self):
            print("用例:销毁")
        def test_case1(self):
            print("用例1执行")
        def test_case2(self):
            print("用例2执行")
    if __name__=="__main__":
        unittest.main()
    
  • 相关阅读:
    关于cmake、make、make install
    windows开启ip_forwarding功能
    最新devstack安装(ussuri)
    【rabbitmq】之业务封装
    【rabbitmq】之过期和死信队列
    【rabbitmq】之confirm和return机制
    【rabbitmq】之消费端手动ack
    java短网址服务
    详解druid打印SQL日志
    logback配置文件拆分,抽取公共配置
  • 原文地址:https://www.cnblogs.com/csj2018/p/10024004.html
Copyright © 2011-2022 走看看