首页 > 编程语言 >Python学习笔记28:进阶篇(十七)常见标准库使用之质量控制中的代码质量与风格第二部分

Python学习笔记28:进阶篇(十七)常见标准库使用之质量控制中的代码质量与风格第二部分

时间:2024-07-04 20:57:48浏览次数:20  
标签:代码 套件 Python unittest 28 进阶篇 测试用例 测试 self

前言

本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。

根据模块知识,一次讲解单个或者多个模块的内容。

教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html

质量控制

质量控制(Quality Control, QC),主要关注于提高代码质量、确保数据准确性和程序稳定性。

代码质量与风格

在软件开发中,代码质量与风格是维护项目长期健康发展的基石。
遵循良好的编程规范不仅能够提升代码的可读性和可维护性,还能促进团队成员之间的有效协作。

关于代码质量与风格的三部分,之前已经记录完了两部分,这里最后讲下单元测试的部分。

单元测试

单元测试是软件开发中的一种测试方法,主要用于验证代码的最小可测试单元(通常是函数或方法)是否按预期工作。在Python中,单元测试是保证代码质量、促进可持续开发的重要实践。

unittest

unittest是Python标准库中的单元测试框架,提供了编写测试用例、组织测试、运行测试和断言等基本功能。支持测试自动化和报告生成,是进行单元测试的首选工具之一

基本用法:

  • 编写测试用例: 通过继承unittest.TestCase类并定义测试方法(方法名以test_开头)。
  • 断言: 使用如assertEqual, assertTrue, assertFalse等方法来验证预期结果与实际结果是否相符。
  • 测试套件与运行: 可以将多个测试用例组织成测试套件(unittest.TestSuite),并通过unittest.main()或直接调unittest.TextTestRunner().run(suite)来执行测试。

优点

  • 标准库的一部分:无需安装额外包,开箱即用。
  • 丰富的断言方法:提供了多种断言方法来验证测试结果,如 assertEqual, assertTrue, assertRaises 等。
  • 测试组织结构:支持将测试用例组织成类和模块,便于管理和维护。
  • 测试固件:通过 setUp 和 tearDown 方法可以在每个测试前后执行初始化和清理操作,保持测试环境的一致性。
  • 测试套件:可以将多个测试用例组合成测试套件,一次性执行。
  • 文本和HTML报告:自动生成测试执行的文本或HTML报告,方便查看测试结果。
常用类及函数

TestCase 类

用途:unittest.TestCase 是 Python 标准库 unittest 框架中的基础类,所有自定义测试用例应继承于此。它提供了编写和组织测试的基本结构。

  • setUp():
    • 功能:在每个测试方法(test_XXX)运行之前被自动调用。
    • 用途:用于设置测试环境,如初始化对象、连接数据库等,确保每个测试用例开始时处于一个已知的状态。
  • tearDown():
    • 功能:在每个测试方法运行之后被自动调用。
    • 用途:用于清理测试过程中产生的副作用,如关闭文件、断开数据库连接等,以确保测试之间相互独立,不影响彼此的结果。

断言方法

  • assertEqual(a, b):
    • 功能:验证 a 和 b 是否相等,如果不等则测试失败。
  • assertTrue(x):
    • 功能:验证表达式 x 是否为 True,如果为 False 则测试失败。
  • assertFalse(x):
    • 功能:验证表达式 x 是否为 False,如果为 True 则测试失败。
  • assertRaises(exception, callable, *args, kwargs):
    • 功能:验证调用 callable(*args, **kwargs) 是否会抛出指定类型的 exception。如果未抛出异常或抛出的异常类型不匹配,则测试失败。

TestSuite 类

用途:用于组织和集合多个测试用例(TestCase实例)或测试类,使得可以一次性运行多个测试,便于管理和自动化测试流程。

TextTestRunner 类

用途:负责执行测试套件(TestSuite),并生成易于阅读的文本格式的测试结果报告。它是测试执行的驱动器,通常用于控制测试的运行,并将测试结果输出到控制台或其他文本流。

  • run(test):运行给定的测试用例或测试套件,并返回一个包含测试结果的 TestResult 对象。

通过组合 TestCase、setUp、tearDown、断言方法、TestSuite 以及 TextTestRunner,可以构建强大的自动化测试框架,有效提升软件的质量保证能力。

代码示例
import unittest


# 假设有一个 Calculator 类
class Calculator:
    def add(self, a, b):
        return a + b


# 测试类,继承自 unittest.TestCase
class ExampleTest(unittest.TestCase):

    # 初始化测试环境
    def setUp(self):
        self.calc = Calculator()

    # 清理测试环境
    def tearDown(self):
        del self.calc

    # 测试加法功能
    def test_add(self):
        result = self.calc.add(10, 5)
        self.assertEqual(result, 15, "加法计算错误,预期结果为15")

    # 测试加法功能,预期失败的例子
    def test_add_failure_example(self):
        result = self.calc.add(10, 5)
        self.assertEqual(result, 20, "此测试预期失败,因为预期结果设置错误")


if __name__ == '__main__':
    # 创建测试套件
    suite = unittest.TestLoader().loadTestsFromTestCase(ExampleTest)

    # 使用 TextTestRunner 运行测试
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)

大家看代码,这是比较简单的一个测试用例的例子。测试了一个加法的函数,分别用两个断言,一个是正确答案一个是错误答案,然后是用测试套件将两个测试方法一起执行返回结果。

重点在创建测试套件的那行代码,那行代码做了什么呢?

  1. 创建一个TestLoader对象,该对象负责加载测试用例。
  2. 使用loadTestsFromTestCase方法将ExampleTest测试用例加载到测试套件中。
  3. 将加载的测试用例返回给suite变量。
    简单点说,就是unittest.TestLoader().loadTestsFromTestCase()这个函数,会自动找到ExampleTest这个类里面所有test开头的函数作为测试用例返回给变量suite,这个变量的值,实际是一个测试套件。
    最后就是执行测试套件跑测试用例就好了。

执行结果如下:
在这里插入图片描述
通过执行结果很清楚的能看到,执行了两个测试用例,最终失败了一个并打印了开始设定的提示语。

在这里插入图片描述
在这张图片所代表的代码中,我们将估计设定失败的测试用例的函数名去掉了test,同样执行测试套件,发现执行了一个测试用例,同时是成功的,也就是第一个测试用例。

结尾

代码质量和风格就先学到这里,后面学习数据质量,包括数据清洗,验证,检测等。

标签:代码,套件,Python,unittest,28,进阶篇,测试用例,测试,self
From: https://blog.csdn.net/weixin_48668564/article/details/140188041

相关文章

  • 【python爬虫实战】进阶天气虫虫(过程复盘 & 心得分享)
    程序设计过程里的一些心得:0.规模较大的程序,往往都是以更小的功能块搭建起来的。如此,为了提升总体程序的构建效率,笔者发现分“两步走”会比较高效:    A.遇到需要反复调试的功能块,可先在另一程序中逐一单独测试某一功能块(这有助于突出模块本身的细节问题)   ......
  • 2024 年第十四届 APMCM 亚太杯 数学建模 A题 飞行器外形的优化问题 详细代码+思路+mat
     比赛期间24小时内半价,思路会结合chatgpt-4,都是个人比赛思路,可能不是很好,但是24年所有数学建模思路都会发布到这一个专栏内,只需订阅一次,感谢大家的一直支持!!!A题飞行器外形的优化问题飞行器是在大气层内或大气层外空间飞行的器械。飞行器可以分为:航空器、航天器、火箭和导......
  • 2024年亚太杯数学建模竞赛 APMCM C题 基于量子计算的物流配送问 详细思路+matlab代码+
     比赛期间24小时内半价,思路会结合chatgpt-4,都是个人比赛思路,可能不是很好,但是24年所有数学建模思路都会发布到这一个专栏内,只需订阅一次,感谢大家的一直支持!!!        随着电子商务的迅猛发展,电商平台对物流配送的需求日益增长。为了确保货物能够按时、高效地送达消费......
  • Python分支
    一、顺序结构    顺序结构是计算机程序中的一种基本的控制结构,它指示计算机按照代码的顺序依次执行每一条语句。这种结构下,程序从第一条语句开始执行,然后按照顺序依次执行下一条语句,直到执行完所有语句或遇到其他控制结构为止。    顺序结构的特点是简单直观......
  • Python基于PyQt5和卷积神经网络分类模型(ResNet50分类算法)实现生活垃圾分类系统GUI界
    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。1.项目背景在当今社会,随着人们对环境保护意识的增强以及科技的快速发展,智能化的垃圾分类系统成为了一个热门的研究方向。结合深度学习技术,尤其是先进的图像识......
  • python中如何写ssh登录
    python实现ssh远程登录# 测试过程中,比较常用的操作就是将DUT(待测物)接入网络中,然后远程操控对DUT,# 使用SSH远程登陆到主机,然后执行相应的command即可# python 代码如下:# paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的......
  • python怎么样将一段程序无效掉
    1、python中可以用注释屏蔽一段语句,具体方法如下,首先打开一段python的示例程序:2、然后单行注释的方法是在语句前面加上#,程序运行后添加注释的地方的语句会被自动跳过,这里可以看到将打印变量a的语句添加注释就没有打印出结果:3、最后如果有一列连续的语句需要注释,可以不......
  • 【python】Tkinter 图形用户界面
    #导入Tkinter模块,它是Python的标准GUI库importtkinter#创建一个Tkinter的根窗口对象,这是所有其他GUI元素的容器top=tkinter.Tk()#设置窗口的标题top.title('单线程')#设置窗口的初始大小和位置。这里指定了宽度为200像素,高度为150像素top.g......
  • Python性能测试框架:Locust实战教程
    01认识Locust  Locust是一个比较容易上手的分布式用户负载测试工具。它旨在对网站(或其他系统)进行负载测试,并确定系统可以处理多少个并发用户,Locust在英文中是蝗虫的意思:作者的想法是在测试期间,放一大群蝗虫攻击您的网站。当然事先是可以用Locust定义每个蝗虫(或测试用......
  • python爬虫3-多进程多线程协程
    多进程和多线程frommultiprocessingimportProcessimportthreadingdefprocess_worker():foriinrange(200):print(f"Processworker{i}")defthread_worker():foriinrange(200):print(f"Threadworker{i}")if__......