Python自动化框架之unittest

发布时间 2023-04-12 17:26:25作者: 梁上尘

一、官方文档:

https://docs.python.org/zh-cn/3/library/unittest.html

二、unittest使用

  • unittest 使用规范

    需要导入unittest包
    测试类必须继承unittest.TestCase类
    测试方法必须要以test开头
    测试用例名称不能相同,相同的情况可能出现用例遗漏执行的情况
    ddt使用事项见下方
    
    • unittest中提供了前置、后置处理,及用例跳过功能,直接见下面代码【新建Mytest1.py】

      import unittest
      
      # 这个Mytest1 可以称为 test case(测试单元),包含测试前,测试,测试后的执行顺序
      class Mytest1(unittest.TestCase):
          def setUp(self) -> None:
              """
              当前类下,每条用例的前置
              """
              print("====setUp")
      
          def tearDown(self) -> None:
              """
              当前类下,每条用例的后置
              """
              print("====tearDown")
      
          @classmethod
          def setUpClass(cls) -> None:
              """
              当前类下,第一个执行,只执行一次
              """
              print("====setUpClass")
      
          @classmethod
          def tearDownClass(cls) -> None:
              """
              当前类下,最后一个执行,只执行一次
              """
              print("====tearDownClass")
      
          def test_one(self):
              """
              测试用例,需要以test开头
              """
              print("测试用例-test_one")
              self.assertEqual(1, 2)
      
          def testTwo(self):
              """
              测试用例,需要以test开头
              """
              print("测试用例-testTwo")
              self.assertEqual(1, 1)
      
          def tthree(self):
              """
              未以test开头,无法加载
              """
              print("测试用例-tthree")
      
          @unittest.skip("直接跳过")
          def test_four(self):
              """
              需要跳过的用例
              测试用例,需要以test开头
              """
              print("测试用例-test_one")
              self.assertEqual(1, 2)
      
          @unittest.skipIf(1 == 1, "条件为true跳过")
          def test_five(self):
              """
              需要跳过的用例
              测试用例,需要以test开头
              """
              print("需要跳过的用例")
              self.assertEqual(1, 2)
      
          @unittest.skipUnless(1 > 2, "条件为false跳过")
          def test_six(self):
              """
              需要跳过的用例
              测试用例,需要以test开头
              """
              print("需要跳过的用例")
              self.assertEqual(1, 2)
      
      
      if __name__ == '__main__':
          unittest.main(verbosity=2)
          """
          0 (静默模式): 你只能获得总的测试用例数和总的结果 比如 总共10个 失败2 成功8
          1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”
          2 (详细模式):测试结果会显示每个测试用例的所有相关的信息
          """
          # 命令行方式
          # python -m unittest Mytest1.py
      
      点击查看运行结果
      ====setUpClass
      ====setUp
      测试用例-testTwo
      ====tearDown
      ====setUp
      测试用例-test_one
      ====tearDown
      ====tearDownClass
      testTwo (__main__.Mytest1) ... ok
      test_five (__main__.Mytest1) ... skipped '条件为true跳过'
      test_four (__main__.Mytest1) ... skipped '直接跳过'
      test_one (__main__.Mytest1) ... FAIL
      test_six (__main__.Mytest1) ... skipped '条件为false跳过'
      
      ======================================================================
      FAIL: test_one (__main__.Mytest1)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
      File "D:/WorkSpace/PythonWorkSpace/test_unit/Mytest1.py", line 45, in test_one
          self.assertEqual(1, 2)
      AssertionError: 1 != 2
      
      ----------------------------------------------------------------------
      Ran 5 tests in 0.000s
      
      FAILED (failures=1, skipped=3)
      

    • 关于跳过及断言的方法可以参考顶部官方文档

    • 关于自动化代码运行有两种方式:编辑器 和 命令行(命令行更加详细的指令可以参考官方文档)
      • 注意:前两张图是通过编辑器运行的,操作方式不同展示效果不同,注意区分