• Unittest入门


    unittest

    1. python的单元测试框架,类似于java的Junit
    2. 核心:TestFixure、TestSuit、TestCase、TestRunner

    入门

    • import语句引入unittest模块

    • 测试的类都继承与TestCase类

    • setUp()测试前的初始化工作

    • tearDown()测试后的清除工作

    • setUpClass()类初始化工作

    • tearDownClass()类清理工作

    • @unittest.skip跳过某个测试用例

      setUp和tearDown 每次用例执行前都会执行初始化条件和结束条件
      执行所有用例只运行一次初始化和清理条件,用setupclass、teardownclass
      verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告、2 是详细报告 默认1 会在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”
      
      # -*- coding:UTF-8 -*-
      import unittest
      class UserTestCase2(unittest.TestCase):
          @classmethod
          def setUpClass(cls):
              print("UserTestCase2 setUpClass初始化")
          @classmethod
          def tearDownClass(cls):
              print("serTestCase2 tearDownClass 资源清理")
      
          def setUp(self):
              print("serTestCase2 set up 开始")
          def tearDown(self):
              print("serTestCase2 tear down 结束")
          def testCase1(self):
              print("serTestCase2 test case1")
          def testCase2(self):
              print("serTestCase2 test case2")
              self.assertEqual(1,2)
      
          @unittest.skip("跳过这个")
          def testCase3(self):
              print("test case3")
      
      if __name__ == '__main__':
          # verbosity 默认是1,为0的话最简洁,不输出每个用例执行结果,2 输出用例的详细执行结果
          unittest.main(verbosity=2)
      

      运行结果

    TestSuit

    • 确定测试用例的执行顺序

    • testsuite方法,调用addTest来加载测试用例:类名('方法名')的集合,addTest添加一个测试用例

    • addTests([,,])添加多个测试用例

    • # -*- coding:UFT-8 -*-
      import unittest
      from UserTestCase import UserTestCase
      from UserTestCase2 import UserTestCase2
      
      class UserTestCase3(unittest.TestCase):
      
          @classmethod
          def setUpClass(cls):
              print("setUpClass")
      
          @classmethod
          def tearDownClass(cls):
              print("tearDownClass")
      
          def testCaseA(self):
              print("tesr caseA")
          def testCaseB(self):
              print("tear caseB")
      
      if __name__ == '__main__':
          # 构造一个测试套件
          suite = unittest.TestSuite()
          # 类名('方法名')的集合
          # suite.addTest(UserTestCase("testCase1"))
          # suite.addTest(UserTestCase2("testCase2"))
          # suite.addTest(UserTestCase3("testCaseB"))
          # 批量添加
          suite.addTests([UserTestCase("testCase1"),UserTestCase2("testCase2"),UserTestCase3("testCaseB")])
          # 执行测试 TextTestRunner() 文本测试用例运行器,通过该类下面的run()方法来运行suite所组装的测试用例,入参为suite测试套件。
          runner = unittest.TextTestRunner(verbosity=2)
          # run()方法是运行测试套件的测试用例,入参为suite测试套件
          runner.run(suite)
      

      运行结果

    TestLoader

    • TestSuit手工添加

    • TestLoader() 用例加载器,把用例都存放在这里,然后通过Suite进行批量执行,但无法对case进行排序

    • # -*- coding:UFT-8 -*-
      import unittest
      from UserTestCase import UserTestCase
      from UserTestCase2 import UserTestCase2
      
      class LoaderTestCase(unittest.TestCase):
      
          @classmethod
          def setUpClass(cls):
              print("setUpClass")
      
          @classmethod
          def tearDownClass(cls):
              print("tearDownClass")
      
          def testCaseA(self):
              print("tesr caseA")
          def testCaseB(self):
              print("tear caseB")
      
      if __name__ == '__main__':
          # 构造测试套件
          suite = unittest.TestSuite()
          # 实例化loader
          loader = unittest.TestLoader()
          # 加载 UserTestCase 下的全部用例
          suite.addTests(loader.loadTestsFromTestCase(UserTestCase))
          suite.addTests(loader.loadTestsFromTestCase(UserTestCase2))
          runner = unittest.TextTestRunner(verbosity=1)
          runner.run(suite)
      

    运行结果

    Discover

    • discover批量加载文件夹用例

      1. 参数:case_dir:待执行用例的目录
      2. 参数:pattern:匹配脚本名称的规则
      3. top_level_dir:顶层目录的名称,一般默认为None
      # -*- coding;UTF-8 -*-
      import unittest
      import os
      
      def load_all_case():
          '''加载指定路径的全部测试用例'''
          # print(os.getcwd())
          # 用例路径,case是文件名称
          case_path = os.path.join(os.getcwd(),"case")
          # print(case_path)
          discover = unittest.defaultTestLoader.discover(case_path,pattern="*Case.py",top_level_dir=None)
          print(discover)
          return discover
      
      if __name__ == '__main__':
          runner = unittest.TextTestRunner(verbosity=2)
          runner.run(load_all_case())
      
  • 相关阅读:
    23种设计模式之单例模式
    6大设计原则之里氏替换原则
    6大设计原则之依赖倒置原则
    6大设计原则之接口隔离原则
    6大设计原则之迪米特法则
    Java日志第14天 2020.7.19
    Java日志第15天 2020.7.20
    Java日志第13天 2020.7.18
    Python 语音识别字幕生成器
    python list,tuple,str有序问题
  • 原文地址:https://www.cnblogs.com/wennyjane/p/14244036.html
Copyright © 2020-2023  润新知