python单元测试unittest

Python自动化测试框架之unittest使用详解 这篇文章主要介绍了Python接口自动化浅析unittest单元测试原理,文中描述了单元测试,unittest模块特性、大致流程、源码及实战例子这几个模块,有需要的朋友可以借鉴参考下 阅读详情
AI摘要

本文深入探讨了单元测试在Python编程中的重要性及其应用实践,包括单元测试的基本概念、加载方式、组织代码及执行流程。通过详细案例分析,展示了如何通过单元测试提高代码质量和开发效率,确保软件的稳定性和可靠性。

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。

单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情。虽然会很快熟悉内容,但是修改和调试将是一件痛苦的事情,如果你在修改了代码后出现问题的话,而单元测试可以帮助我们很快准确的定位到问题的位置,出现问题的模块和单元。所以这是一件很愉快的事情,因为我们知道其它修改或没有修改的地方仍然是正常工作的,而我们目前的唯一问题就是搞定眼前这个有点问题的“家伙”。所以工作会在轻松中开始,并且很快将会结束,因为你已经知道很多信息了。

 

单元测试自然是对程序中最小的可测试模块--函数来进行测试;因为单元测试的对象是函数,也就是说你得被测试对象一定要有输出结果,哪怕就是异常输出,也得有输出,以便单元测试模块能够捕获返回值,并且与预期值进行比较,从而得出测试通过与否。

 

单元测试的加载方式有2种:一种是通过unittest.main()来启动单元测试的测试模块;一种是添加到testsuite集合中再加载所有的被测试对象,而testsuit里存放的就是单元测试的用例,下面分别列出了2种方法的使用。

1.1 测试模块中的函数:

被测模块:

#!/usr/bin/env python
#encoding: utf-8
    
def sum( x, y):
        return x+y
    
    
def sub( x, y):
        return x-y 

单元测试模块:

#!/usr/bin/env python
#encoding: utf-8

import unittest
import myclass

class mytest(unittest.TestCase):
    
    ##初始化工作
    def setUp(self):
        pass
    
    #退出清理工作
    def tearDown(self):
        pass
    
    #具体的测试用例,一定要以test开头
    def testsum(self):
        self.assertEqual(myclass.sum(1, 2), 2, 'test sum fail')
        
        
    def testsub(self):
        self.assertEqual(myclass.sub(2, 1), 1, 'test sub fail')   
        
        
if __name__ =='__main__':
    unittest.main()

测试结果:【F表示一个fail, F前的点表示一个通过,有E的话表示程序自身异常】

.F
======================================================================
FAIL: testsum (__main__.mytest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\xiaowu\workspace\mypython\unitTest.py", line 19, in testsum
    self.assertEqual(myclass.sum(1, 2), 2, 'test sum fail')
AssertionError: test sum fail

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)

1.2 测试模块类中的函数:

被测模块:

#!/usr/bin/env python
#encoding: utf-8

class myclass:
    def __init__(self):
        pass
    
    
    def sum(self, x, y):
        return x+y
    
    
    def sub(self, x, y):
        return x-y 

单元测试模块:

#!/usr/bin/env python
#encoding: utf-8

import unittest
import myclass

class mytest(unittest.TestCase):
    
    ##初始化工作
    def setUp(self):
        self.tclass = myclass.myclass()   ##实例化了被测试模块中的类
    
    #退出清理工作
    def tearDown(self):
        pass
    
    #具体的测试用例,一定要以test开头
    def testsum(self):
        self.assertEqual(self.tclass.sum(1, 2), 3)
        
        
if __name__ =='__main__':
    unittest.main()

运行结果:

.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

这种方式执行单个测试文件时使用-v参数可以获得更多的测试结果信息。如:mytest.py -v 

 

2 加载测试套件

好吧,在运用测试套件进行单元测试之前,我想还是稍微研究一下unittest模块的内容有哪些,其大概的运行方式是什么样的。而后在给出根据各种情况如何制定单元测试套件。

首先,自然是查看unittest模块有哪些成员啦!

>>import unittest
>>dir(unittest)
['FunctionTestCase', 'TestCase', 'TestLoader', 'TestProgram', 'TestResult', 'Tes
tSuite', 'TextTestRunner', '_CmpToKey', '_TextTestResult', '_WritelnDecorator',
'__all__', '__author__', '__builtins__', '__doc__', '__email__', '__file__', '__
metaclass__', '__name__', '__package__', '__unittest', '__version__', '_makeLoad
er', '_strclass', 'defaultTestLoader', 'findTestCases', 'getTestCaseNames', 'mai
n', 'makeSuite', 'os', 'sys', 'time', 'traceback', 'types']

可以看到其自身的成员也不是很多,大概包括有:
['FunctionTestCase', 'TestCase', 'TestLoader', 'TestProgram', 'TestResult',
 'TestSuite','TextTestRunner', '_CmpToKey', '_TextTestResult', '_WritelnDecorator',
 'defaultTestLoader','findTestCases', 'getTestCaseNames', 'main', 'makeSuite']
 
 好吧,我们大概看看具体都是干什么的

 >>memblist = ['FunctionTestCase', 'TestCase', 'TestLoader', 'TestProgram', 'TestResult',\
 'TestSuite','TextTestRunner', 'defaultTestLoader','findTestCases', 'getTestCaseNames', \
 'main', 'makeSuite']
 >>for memb in memblist:
 ..  cur = getattr(unittest, memb)
 ..  print help(cur)

 'FunctionTestCase':函数测试用例,即给一个函数作为参数,返回一个testcase实例,可选参数有set-up,tear-down方法
 'TestCase':所有测试用例的基本类,给一个测试方法的名字,返回一个测试用例实例
 'TestLoader':测试用例加载器,其包括多个加载测试用例的方法。返回一个测试套件
 loadTestsFromModule(self, module)--根据给定的模块实例来获取测试用例套件
 loadTestsFromName(self, name, module=None)
 --根据给定的字符串来获取测试用例套件,字符串可以是模块名,测试类名,测试类中的测试方法名,或者一个可调用的是实例对象
 这个实例对象返回一个测试用例或一个测试套件
 loadTestsFromNames(self, names, module=None) --和上面功能相同,只不过接受的是字符串列表
 loadTestsFromTestCase(self, testCaseClass)--根据给定的测试类,获取其中的所有测试方法,并返回一个测试套件
'TestProgram':命令行进行单元测试的调用方法,作用是执行一个测试用例。其实unittest.main()方法执行的就是这个命令,
而这个类实例时默认加载当前执行的作为测试对象,
原型为 __init__(self, module='__main__', defaultTest=None, argv=None, testRunner=xx, testLoader=xx)
其中module='__main__'就是默认加载自身
'TestResult':测试用例的结果保存实例,通常有测试框架调用
 'TestSuite':组织测试用例的实例,支持测试用例的添加和删除,最终将传递给testRunner进行测试执行
 'TextTestRunner':进行测试用例执行的实例,其中Text的意思是以文本形式显示测试结果。显示测试名称,即完成的测试结果,其过同执行单元测试脚本时添加-v参数
 'defaultTestLoader':其实就是TestLoader
 'findTestCases', 'getTestCaseNames':这个2个就不用解释了
 'main': 其实就是TestProgram
 'makeSuite':通常是由单元测试框架调用的,用于生产testsuite对象的实例
 
 至此,我们知道了。其实整个单元测试框架的逻辑出来了。分三步走:第一步testloader根据传入的参数获得相应的测试用例,即对应具体的测试方法,
 然后makesuite在把所有的测试用例组装成testsuite,最后把testsiute传给testrunner进行执行。
 而我们通常执行的unittest.main(),其实就是unittest.testprom方法,其执行的功能就是上面分析的三步,在第一步中其传入的参数是自身的模块__main__;
 在第二步中把自身模块中的所有测试类中中的测试方法提取出来,并生成测试套件;最后再把测试套件传递给testrunner进行具体的测试。
 
 最后给出一个完整的单元测试组织代码,把该代码放到单元测试用例文件的同一个目录后执行该脚本,即可执行所有的测试用例文件。
 【测试用例文件必须为test开头,如:testxxx.py, 当然这个文件本身是一个单元测试的文件】

#!/usr/bin/env python
#encoding: utf-8
#该代码源自深入python
import unittest
import myclass
import re
import os
import sys


def testAllinCurrent():
    path = os.path.abspath(os.path.dirname(sys.argv[0]))   
    files = os.listdir(path)                               
    test = re.compile("test\.py{1}quot;, re.IGNORECASE)          
    files = filter(test.search, files)                     
    filenameToModuleName = lambda f: os.path.splitext(f)[0]
    moduleNames = map(filenameToModuleName, files)         
    modules = map(__import__, moduleNames)   
                  
    load = unittest.defaultTestLoader.loadTestsFromModule  
    return unittest.TestSuite(map(load, modules))

if __name__ == "__main__":                   
    unittest.main(defaultTest="regressionTest")

 

python单元测试之UnitTest 本文介绍了Python测试框架基础知识,重点对比了unittest和pytest两大主流框架。主要内容包括: 常用测试框架列举(pytest、unittest等)及其优势 unittest框架特点:官方维护、xUnit家族、简单易学但扩展性不足 基本测试用例编写方法(继承TestCase、test_*方法、断言) 高级功能:数据驱动测试(DDT)和HTML报告生成 unittest与pytest的核心差异(用例规则、夹具、断言等) unittest的五大核心组件和多种运行方式(命令行、main函数等) 文章 阅读详情

相关推荐

Python单元测试unittest

1.单元测试 对功能/代码的最小单元进行测试。 对函数或者类当中的方法进行测试就是单元测试。 在python当中进行测试时,使用assert,而不是if... 语法:assert预期结果 ==实际结果 当使用assert进行断言时,如果测试通过,程序正常执行,测试不通过会报错AssertionError # if actual == expected: # print('ok') # else: # print('not ok') # assert 断言 assert a..

Ly_LittleStar的博客 1670

python中使用unittest创建测试用例以及报错处理

使用python对已编写的函数进行测试 一般格式为: import unittest from ModuleName import FunctionName class testcase(unittest.TestCase): def test_FunctionName(self): var=FunctionName(INPUT) self.assertEqual...

Hatake Kakashi's blog 2708

Frida提取Cocos游戏XXTEA密钥的实战方法论

XXTEA是一种轻量级分组加密算法,广泛用于移动端游戏通信保护;其128位密钥的安全性直接决定网络协议逆向成败。在Cocos引擎生态中,密钥常以静态常量、JNI动态传递或Native运行时派生三种形态存在,导致传统静态分析失效。Frida凭借跨Java/Native注入能力与内存实时观测优势,成为捕获密钥‘出生瞬间’的关键工具——尤其适用于hook xxtea_encrypt函数入口、监控JNI参数传递、设置内存断点追踪派生过程等场景。本文聚焦Cocos2d-x与Cocos Creator项目,覆盖从密钥识

weixin_33509600的博客 419

httprunner使用错误1.

1.定义类名要用testcase开头 2.必须有 3.头部 4.传参

qq_46074839的博客 301

新时代多目标优化【数学建模】领域的极致探索——数学规划模型

数学规划模型是数学建模中用于描述和解决优化问题的一类模型。它通过构建目标函数和约束条件,将实际问题转化为数学形式,旨在寻找满足约束条件的最优解。数学规划模型广泛应用于各个领域,包括资源分配、生产计划、物流管理和金融投资等,通过线性规划、非线性规划、整数规划等方法,帮助决策者在复杂环境中做出最优选择。

小李很执着的博客 5885

VSCode 远程开发:实现服务器图形化界面(GUI)的高效操作指南

本文详细介绍了如何通过VSCode远程开发实现服务器图形化界面(GUI)操作,包括X11转发原理、完整配置指南和实战测试。通过安装Xming、配置SSH连接和服务器端设置,开发者可以高效地在本地显示远程GUI应用,提升开发效率。

weixin_29245767的博客 294

python语法错误概述_一个愚蠢的python逻辑语法错误

这个事情再次佐证了一个莫名其妙的现象背后一定会有一个愚蠢到无以复加的错误的真理。写python单元测试的时候发现一个莫名其妙的问题:def xmlStandander(self,s):return xml.dom.minidom.parseString(s).toxml();def assertEqualXMLStruct(self,get,wanted):self.assertEqual(sel...

weixin_39886929的博客 366

【2021最新版】Dubbo面试题总结(40道题含答案解析)

文章目录1、为什么要用Dubbo?2、Dubbo的整体架构设计有哪些分层?3、默认使用的是什么通信框架,还有别的选择吗?4、服务调用是阻塞的吗?5、一般使用什么注册中心?还有别的选择吗?6、默认使用什么序列化框架,你知道的还有哪些?7、服务提供者能实现失效踢出是什么原理?8、服务上线怎么不影响旧版本?9、如何解决服务调用链过长的问题?10、说说核心的配置有哪些?11、Dubbo推荐用什么协议?12、同一个服务多个注册的情况下可以直连某一个服务吗?13、画一画服务注册与发现的流程图?14、Dubbo集群容错有

程序媛小琬的博客 1万+

unittest-ddt报错AttributeError: type object ‘forTestDDT‘ has no attribute ‘test_2‘

unittest 添加多个ddt数据驱动后,报错: FAILED (errors=1) Error Traceback (most recent call last): File "D:\Anaconda3\lib\unittest\case.py", line 60, in testPartExecutor yield File "D:\Anaconda3\lib\unittest\case.py", line 676, in run self._callTestMethod

weixin_38383877的博客 1140

睿尔曼超轻量仿人机械臂--医疗工作站运行Demo(Python)

开发环境系统:win10Python版本:python 3.11.2由于机械臂相关软件版本不定期更新,如果你使用的软件接口或协议与本文有出入,请联系官方技术人员及时更新。

realman_Rop的博客 1094

蛋白质组学进阶指南 | (八)差异蛋白筛选与功能解析实战

本文是蛋白质组学差异蛋白筛选与功能解析的实战指南。详细讲解了如何利用R语言的limma包进行差异表达分析,结合FDR校正和差异倍数设定筛选关键蛋白,并通过火山图可视化结果。进一步介绍了使用clusterProfiler进行GO与KEGG功能富集分析,以及利用STRING数据库和Cytoscape构建蛋白互作网络以识别枢纽分子,最终串联分析形成可验证的生物学假说。

weixin_29208077的博客 745

Python单元测试框架unittest入门

单元测试是一种软件测试方法,是测试最小的可测试单元,通常是一个函数或一个方法。在软件开发过程中,单元测试作为一项重要的测试方法被广泛应用。

2301_78276982的博客 1275

Android SystemUI——自定义状态栏和导航栏(十二)

通过前面的文章内容,我们了解了Android系统原生的状态栏StatusBar和车载系统状态栏CarStatusBar的启动流程以及视图构建流程,这里我们来简单的看一下自定义状态栏和导航栏视图的实现流程。

小旭的专栏 2012

详解Python单元测试unittest

我们在后续进行持续集成的时候,要让代码自动运行,就会用到Jenkins了,但是上面产生的测试报告都是html格式的,Jenkins不认识,就在Jenkins里面显示不出来。runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='all_tests',description='所有测试情况')TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息。

kk_lzvvkpj的博客 717

【异常】Claude Code 在 Windows CMD 中出现重影现象的排查与解决

Windows CMD运行Claude Code时出现文字重影、乱码等问题,原因是传统CMD对现代ANSI终端控制序列支持不足。解决方案包括:1)推荐安装Windows Terminal(完全支持ANSI标准);2)使用PowerShell 7;3)优化CMD设置(启用虚拟终端、UTF-8编码);4)关闭Claude Code视觉特效。建议优先使用Windows Terminal以获得最佳体验,这是最彻底的解决方案。其他方案仅能部分改善或缓解问题。

奶爸的编程之路,也就一周冷个三天 1964

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python接口自动化浅析unittest单元测试原理

以下主要介绍unittest特性、运行流程及实际案例。

m0_70669463的博客 1128

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Python接口自动化之unittest单元测试

按照阶段来分,一般就是单元测试,

2301_78843735的博客 1084

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Python的单元测试框架 —— unittest

说到 Python 的单元测试框架,想必接触过 Python 的朋友脑袋里第一个想到的就是unittest。的确,作为 Python 的标准库,它很优秀,并被广泛用于各个项目。但你知道吗?其实在 Python 众多项目中,主流的单元测试框架远不止这一个。本系列文章将为大家介绍目前流行的 Python 的单元测试框架,讲讲它们的功能和特点并比较其异同,以让大家在面对不同场景、不同需求的时候,能够权衡利弊,选择最佳的单元测试框架。

2401_83396248的博客 1243

Python 如何使用 unittest 模块编写单元测试

单元测试是对软件中的最小可测试单元(通常是函数或方法)进行验证的过程。其主要目的是确保每个单元在独立运行时能够正确地执行预期的功能。提高代码质量:及时发现和修复潜在的错误。方便重构:在对代码进行修改时,运行测试确保现有功能没有受到影响。提高开发效率:自动化测试减少了手动测试的时间和精力。unittest是 Python 的内置模块,遵循 xUnit 测试框架的结构。它提供了一系列工具和类,使得编写、运行和组织测试变得简单和清晰。使用unittest创建测试用例组织测试套件运行测试。

chusheng1840的博客 1080

Python3 unittest单元测试

单元测试老生常谈了,但是测试要会单元测试还是近几年在国内流行起来的,测试开发岗位那是必备技能了,所以这个单元测试还是要接触下,就算以后的岗位中用不上,但万一面试时问到单元测试,也不至于太狼狈,或者学到这个技能不是不可以往测试开发岗位发展下。我们看下python怎么实现单元测试。  python的优点想必大家已经很了解了,现在想到要单元测试,那么肯定有牛人已经探好路子,并研发了这个模块,我们用就好了...

奋力的小白的博客 2562

Python 单元测试、unittest断言

Python 单元测试 原文来自https://www.freecodecamp.org/news/an-introduction-to-testing-in-python/ An Introduction to Unit Testing in Python Goran Aviani Python 标准库中有一个名为 unittest 的模块,其中包含用于测试代码的工具。单元测试检查函数行为的所有特定部分是否正确,这将使它们与其他部分的集成更容易。 测试用例是单元测试的集合,它们共同证明.

野猫炫的博客 724

python unittest单元测试

python单元测试框架 unittest官方文档 https://docs.python.org/2.7/library/unittest.html unittest不仅适用于单元测试,还可以适用于Web自动化测试用例的开发和执行 unittest核心要素 TestCase TestCase实例是一个测试用例,就是一个完整的测试流程,包括测试前的准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearTown)。 一个测试用例就是一个完整的测试单元 TestSuite 多个测

Come_on_csdn的博客 267

Python单元测试-unittest

一、单元测试、集成测试、功能测试 1.单元测试:颗粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”;是指对软件中的最小可测试单元进行检查和验证 2.集成测试:介于单元测试和系统测试之间,一般由开发小组采用白盒+黑盒的方法来测试,既验证“设计”又验证“需求”。主要用来测试模板与模板之间的接口,同时还要测试一些主要的业务功能。 3.功能测试:颗粒度最大,一般由独立的测试小组采用黑盒的方式来测试,主要测试系统是否符合需求规格说明书 4.白盒测试和黑盒测试 ①白盒:主要应用于单元测

weixin_45583894的博客 711

python单元测试之unittest

单元测试,集成测试,功能测试 单元测试 颗粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”;是指对软件中的最小可测试单元进行检查和验证 集成测试 介于单元测试和系统测试之间,一般由开发小组采用白盒+黑盒的方法来测试,即验证“设计”又验证“需求”。主要用来测试模板与模板之间的接口,同时还要测试一些主要的业务功能。 功能测试 颗粒度最大,一般由独立的测试小组采用黑盒的方式来测试,主要测试系统是否符合“需求规格说明书 什么是白盒测试,什么是黑盒测试 白盒:主要

weixin_66336481的博客 1327
上一篇: 【转载】C语言头文件的使用
下一篇: C语言交换两个变量值不利用额外变量
上帝De助手
上帝De助手 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄19年 1494粉丝 215原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上帝De助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值