Python Unittest框架详解介绍

python之Unittest框架介绍

  • 一、Unittest框架介绍
  • 二、Unittest框架要素
  • 三、Unittest使用
  • 3.1 TestCase
  • 3.2 TestSuite
  • 3.3 TestRunner
  • 四、TestFixure
  • 4.1 setUp()和tearDown()方法
  • 4.2 setUpClass()和tearDownClass()方法
  • 一、Unittest框架介绍

    unittest是python自带的一个单元测试框架,不仅适用于单元测试,还可以用于web、appium、接口自动化测试用例的开发与执行。Unittest提供了许多用于编写测试用例的工具和功能,使得测试代码的编写和执行变得简单直接。

    二、Unittest框架要素

    Unittest中最核心的四个概念是:

  • TestCase:测试用例
  • TestSuite:测试套件
  • TestRunner:用来执行测试用例和测试套件,并返回测试用例的执行结果
  • TestFixure:测试夹具(测试固件),代表执行一个或者多个测试所需的环境准备,以及关联的清理动作
  • 备注:TestLoader:批量执行测试用例

    * 一个testcase实例就是一个测试用例
    //什么是测试用例?
    --就是一个完整的测试流程,包括测试前环境的搭建(setup),执行测试代码(run),测试后环境的还原(teardown)。
    
    * 而多个测试用例集合在一起,就是testsuite,testsuite可以嵌套testsuite。
    
    * testloader是用来加载testcase到testsuite中
    
    * testrunner是执行测试用例,测试结果保存在testrunner实例中,包括运行了多少测试用例,成功了多少,失败了多少,跳过了多少等。
    
    * testfixture是测试夹具,是对一个测试用例环境的搭建和销毁,如setup、teardown
    

    三、Unittest使用

    3.1 TestCase

    我们在写测试用例时,会继承unittest的TestCase的类和方法。一个TestCase就是一个测试用例,unittest中的测试用例都是以test开头,执行顺序是按照方法名的ASCLL值进行排序。

    # 导入unittest模块
    import unittest
    
    class TestDemo(unittest.TestCase):
        def test_01(self):
            print("test case 01")
            self.assertEqual('test'.upper(),"TEST")
        
        def test_02(self):
            print("test case 02")
            self.assertTrue("test".upper())
    
    if __name__ == "__main__":
        # 执行用例
        unittest.main() 
    

    说明

  • 每个测试用例的结果标识,成功是. ,失败是F,出错是E,跳过是S
  • 执行的顺序,跟方法的顺序没有关系
  • 每个用例都是test开头,否则不被识别
  • 3.2 TestSuite

    我们可以把多个测试用例集合在一起运行,就产生了TestSuite测试套件。

    import unittest
    
    #...省略
    suite = unittest.TestSuite() # 实例化一个对象suite
    
    # 添加测试用例
    suite.addTest(TestDemo("test_01"))
    suite.addTest(TestDemo("test_02"))
    

    备注:TestSuite需要配合TestRunner才会被执行

    3.3 TestRunner

    TestRunner测试运行器,用于执行测试用例的组件,自动运行测试用例并生成测试结果报告。负责加载测试用例,执行测试用例,并提供测试报告输出。

    unittest提供了多种测试运行器,如:TextTestRunner、HTMLTestRunner、XMLTestRunner等,可以根据不同的需求选择不同的运行器。

    import unittest
    
    #...省略
    suite = unittest.TestSuite() # 实例化一个对象suite
    
    # 添加测试用例
    suite.addTest(TestDemo("test_01"))
    suite.addTest(TestDemo("test_02"))
    
    # 实例化运行器
    runner = unittest.TextTestRunner()
    
    # 运行测试套件
    runner.run(suite)
    

    四、TestFixure

    TestFixure测试夹具,是一个用于设置和清理测试环境的方法。允许在每个测试方法前后运行特定的代码。例如:初始化测试所需的对象或数据,并在测试完成后对这些对象数据进行清理。

    4.1 setUp()和tearDown()方法

    这两个方法分别在每个测试方法之前和之后运行。

    import unittest
    
    class TestDemo(unittest.TestCase):
        def setUp(self):
            # 在这里初始化你的测试环境,例如创建对象或加载数据
            print("setUp: 准备测试环境")
            self.test_data = [1, 2, 3]
    
        def tearDown(self):
            # 在这里清理你的测试环境
            print("tearDown: 清理测试环境")
            del self.test_data
            
        def test_01(self):
            print("test case 01")
            self.assertEqual('test'.upper(),"TEST")
        
        def test_02(self):
            print("test case 02")
            self.assertTrue("test".upper())
    
    if __name__ == "__main__":
        unittest.main()
    

    4.2 setUpClass()和tearDownClass()方法

    setUpClass()和tearDownClass()是类级别的fixture,就是在所有测试方法之前和之后运行一次的代码,例如:数据库连接。

    import unittest
    
    class TestDemo(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            print("setUpClass: 准备测试环境")
            cls.class_data = [1, 2, 3]
     
        @classmethod
        def tearDownClass(cls):
            print("tearDownClass: 清理测试环境")
            del cls.class_data
    
        def test_01(self):
            print("test case 01")
            self.assertEqual('test'.upper(),"TEST")
        
        def test_02(self):
            print("test case 02")
            self.assertTrue("test".upper())
    
    if __name__ == "__main__":
        unittest.main()
    

    备注

  • 使用setUp()和tearDown()使用于每个测试方法的独立设置和清理
  • setUpClass()和tearDownClass()适用于类的所有测试方法的共享设置和清理
  • 作者:llm200909

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python Unittest框架详解介绍

    发表回复