【python】unittest 模块 _ 测试框架

unittest  


官方参考地址:

  https://docs.python.org/zh-cn/3/library/unittest.html?highlight=assertequal#module-unittest

1、安装及导入

#  unittest是python内置的用于测试代码的模块,无需安装直接导入使用即可
import unittest

 

2、使用

 注意事项:

  1、测试文件必须先导入模块 import unittest    2、测试类必须继承 unittest.TestCase    3、测试方法必须由test开头    4、测试类执行统一用unittest.main()
   5、setUpClass和tearDownClass 必须使用@classmethod装饰器
   6、unittest执行测试用例,默认是根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。
# coding:utf-8
import unittest #模块导入
import requests

'''
    unittest特点:
        1、测试文件必须先导入模块 import unittest
        2、测试类必须继承 unittest.TestCase
        3、测试方法必须由test开头 
        4、测试类执行统一用unittest.main()
        5、setUpClass和tearDownClass 必须使用@classmethod装饰器
'''
class TestDemo(unittest.TestCase):
    @classmethod    # 所有test运行前运行一次
    def setUpClass(cls):
        print("setUpClass 开始执行测试方法")

    @classmethod    # 所有test运行完运行一次
    def tearDownClass(cls):
        print("tearDownClass 测试方法全部执行完成")

    # 设置每个test测试开始前需要执行的指令,准备测试环境
    def setUp(self):
        print("setUp 准备环境")

    # 设置每个test测试完成后需要执行的指令,清理测试环境
    def tearDown(self):
        print("tearDown 环境复原")

    # 测试方法
    def test_step_one(self):
        self.assertEqual(6, 6, msg="不通过")

    def test_step_two(self):
        # 检查两个值的相等性;
        self.assertEqual([1, 2, 3], [1, 2, 3], "断言比对不一致") # 断言1和1是否相等

    def test_step_three(self):
        # 比较测试值与true
        self.assertTrue(True, msg="失败原因:比对不一致")

    # def test_step_four(self):
    #     self.assertEquals([1, 2, 3], [3, 2, 1], msg="比对不一致")

if __name__=="__main__":
    # 提供了一个测试脚本的命令行接口,用来测试继承unittest.TestCase的类中以 test 开头的测试用例
    unittest.main()
TestDemo

  执行结果

  

 

unittest.main(verbosity=0)  简洁,只能获得总的测试用例数和总的结果
unittest.main(verbosity=1)  默认,每个成功的用例前面有个“.” ,每个失败的用例前面有个 “E”
unittest.main(verbosity=2)  详情,会显示每个测试用例的所有相关的信息

            

  

3、装饰器

  @ 是修饰符

跳过测试用例  [不会执行被修饰器修饰的方法,类,setup等]

@unittest.skip(reason)
跳过被此装饰器装饰的测试。 reason 为测试被跳过的原因。

@unittest.skipIf(condition, reason)
当 condition 为真时,跳过被装饰的测试。

@unittest.skipUnless(condition, reason)
跳过被装饰的测试,除非 condition 为真。

@unittest.expectedFailure
将测试标记为预期的失败或错误。 如果测试失败或在测试函数自身(而非在某个 test fixture 方法)中出现错误则将认为是测试成功。 如果测试通过,则将认为是测试失败。

exception unittest.SkipTest(reason)
引发此异常以跳过一个测试。

示例:

# coding:utf-8
import unittest #模块导入
import requests

'''
    unittest特点:
        1、测试文件必须先导入模块 import unittest
        2、测试类必须继承 unittest.TestCase
        3、测试方法必须由test开头 
        4、测试类执行统一用unittest.main()
        5、setUpClass和tearDownClass 必须使用@classmethod装饰器
'''
class TestDemo(unittest.TestCase):
    # 测试方法
    @unittest.skip("无条件跳过被此装饰器装饰的测试: test_step_one")
    def test_step_one(self):
        self.assertEqual(1, 2, "断言比对不一致")  # 断言1和1是否相等

    @unittest.skipIf(True, "当 condition 为真时,跳过被装饰的测试:test_step_two")
    def test_step_two(self):
        # 比较测试值与true
        self.assertEqual(1, 1, "断言比对不一致")  # 断言1和1是否相等

    @unittest.skipUnless(False, "跳过被装饰的测试,除非 condition 为真:test_step_three")
    def test_step_three(self):
        self.assertEqual(1, 2, "断言比对不一致")  # 断言1和1是否相等

    @unittest.expectedFailure   # 预期失败的情况
    def test_step_four(self):
        # 检查两个值的相等性;
        self.assertEqual(1, 2, "断言比对不一致") # 断言1和1是否相等



if __name__=="__main__":
    # 提供了一个测试脚本的命令行接口,用来测试继承unittest.TestCase的类中以 test 开头的测试用例
    unittest.main()
TestDemo

  执行结果

  

 

 4、断言

    

 

    

 

 

 

 

拓展


 单元测试

  定义:是指检查代码的实现和逻辑,针对的是模块、函数、类等

  核心概念:

     test case(测试用例):一个testcase的实例就是一个测试用例。测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)

    TestSuite(测试套件):多个测试用例集合在一起。

    TestLoader(测试运行器):用来加载Testcase到TestSuite中。

    test fixture(测试环境数据准备和数据清理或者测试脚手架):测试用例环境的搭建和销毁

    TextTestRunner:用来执行测试用例,其中run(test)会执行TestSuite/TestCase中的run(result)方法。

 

测试目录结构

  Log:日志记录和管理功能,针对不同的情况,设置不同的日志级别,方便定位问题;

  Report:测试报告生成和管理以及即时通知,测试结果快速响应;

  Source:配置文件、静态资源的管理,遵循高内聚低耦合原则;

  Common:公共函数、方法以及通用操作的管理,遵循高内聚低耦合原则;

  TestCase:测试用例管理功能,一个功能点对应一个或者多个case,尽可能的提高覆盖率;

  TestData:测试数据管理功能,数据与脚本分离,降低维护成本,提高可移植性;

  TestSuite:测试组件管理功能,针对不同场景不同需求,组装构建不同的测试框架,遵循框架的灵活性和扩展性;

  Statistics:测试结果统计管理功能,每次执行测试的结果统计、分析、对比以及反馈,数据驱动,为软件优化和流程改进,提供参考;

  Continuous:持续集成环境,即CI环境,包括测试文件提交、扫描编译、执行测试、生成报告及时通知等功能,持续集成是自动化测试的核心

 

posted @ 2022-04-14 09:33  Phoenixy  阅读(85)  评论(0编辑  收藏  举报