• Python Unittest测试框架



    活动地址:CSDN21天学习挑战赛

    Python Unittest 这篇文章将不断的持续更新和重构

    1. 单元测试概述

    。什么是单元测试?
    。单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很
    明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件
    (或者场景)下某个特定函数的行为。
    。单元测试什么时候测试?
    。单元测试由谁负责?

    单元测试需要注意

    。单元测试的时候一个大前提就是需要清楚的知道,自己要测试的程序块所预期
    的输入和输出,然后根据这个预期和程序逻辑来书写case。这里的预期结果一
    定要针对需求/设计的逻辑去写,而不是针对程序的实现去写,否则单测就失
    去了意义,照着错误的实现设计出的case也很可能是错的。

    2. 单元测试框架列举

    Unittest
    Python内置的标准类库。它的API跟Java的JUnit、.net的NUnit, C++CppUnit很相似
    Pytest
    丰富、灵活的测试框架,语法简单,可以结合allure生成一个炫酷的测试报告,现在比较主流
    Nose
    Nose是对unittest的扩展,使得python的测试更加简单。
    Mock
    unittest.mock是 用来测试python的库。这个是一一个标准库(出现python3.3版本以后)

    3. 单元测试覆盖率

    代码覆盖率也被用于自动化测试和手工测试来度量测试是否全面的指标之一,
    应用覆盖率的思想增强测试用例的设计
    单元测试覆盖类型:
    。语句覆盖
    。条件覆盖
    。判断覆盖
    。路径覆盖

    伪代码:
    def demo_ method(a, b, x):
        if (a > 1 andb= == 0):
            X = X / a
        if (a == 2 orx > 1):
            X = X + 1
    return X
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.1 语句覆盖

    语句覆盖
    1.语句覆盖定义
    ​通过设计一定量的测试用例,保证被测试的方法每一行代码都会被执行一遍.
    ​运行测试用例的时候被击中的代码行即称为被覆盖的语句
    
    2.测试用例
      仅需要一条case,即可实现行覆盖
    
    3.漏洞
       and-> or
    行覆盖是一个最基础的覆盖方式,但是也是最薄弱的,如果完全依赖行覆盖,会出现很严重的问题
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.2 判断覆盖

    判断覆盖
    1.判断覆盖定义
      运行测试用例的过程被击中的判定语句
    2.测试用例 
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    3.漏洞
    大部分的判定语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径
    a==2 Orx>1 ->a==2 or x<1
    
    • 1
    • 2
    • 3

    3.3 条件覆盖

    条件覆盖
    1.条件覆盖定义
      条件覆盖和判定覆盖类似,不过判定覆盖关注整个判定语句,而条件覆盖则关注某个判断条件
    2.测试用例:if(a>1 and b==0)
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    3.缺陷
      测试用例指数级增加(2**conditions)
    
    • 1
    • 2

    3.4 路径覆盖

    1.路径覆盖定义
      覆盖所有可能执行的路径
    2.测试用例
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    应用这些方法设计测试用例

    2 unittest编写与规范

    unitest官网

    https://docs.python.org/3/library/unittest.html#unittest.TextTestRunner

    unittest编写与规范

    Unittest提供了了test cases、 test suites、 test fixtures、 test runner相关的组件
    编写规范:
    测试模块首先import unittest
    测试类必须继承unittest.TestCase
    测试方法必须以"test_”开头

    import unittest
    
    
    class TestStringMethods(unittest.TestCase):
    
        def test_upper(self):
            self.assertEqual('foo'.upper(), 'FOO')
    
        def test_isupper(self):
            self.assertTrue('FOO'.isupper())
            self.assertFalse('Foo'.isupper())
    
        def test_split(self):
            s = 'hello world'
            self.assertEqual(s.split(), ['hello', 'world'])
            # check that s.split fails when the separator is not a string
            with self.assertRaises(TypeError):
                s.split(2)
    
    
    if __name__ == '__main__':
        unittest.main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    待补充代码

    总结:
    1.setUp用来为测试准备环境,tearDown用 来清理环境。
    2.如果想要在所有case执行之前准备一次环境,并在所有case执行结束之后再清理环境,我们可以用setUpClass()与tearDownClass();比如:数据库连接及销毁
    3.如果想有些方法不在本次执行使用@unittest.skip
    4.测试方法的命名:以test开头
    5.各种执行-单一用例,全部
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

  • 相关阅读:
    嵌入式学习笔记(42)SD卡的编程接口
    JAVA计算机毕业设计电影评分网站Mybatis+系统+数据库+调试部署
    《MetaGPT智能体开发入门》学习笔记 第五章 多智能体
    视图(view)
    剧院建筑三维可视化综合管控平台提高安全管理效率
    操作系统底层知识总结(面试)
    企业电子招投标采购系统——功能模块&功能描述+数字化采购管理 采购招投标
    【Dotnet 工具箱】DotNetCorePlugins- 动态加载和卸载 .NET 程序插件
    亚马逊API接口解析,实现按关键字搜索商品
    从零到一建设数据中台 - 关键技术汇总
  • 原文地址:https://blog.csdn.net/u014096024/article/details/126429345