unittest总结
2023-12-13 13:56:07 0 举报
AI智能生成
unittest总结
作者其他创作
大纲/内容
组成
TestCase(测试用例)
测试用例是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown))
Test fixture(测试固件)
测试代码的运行环境,指测试准备前和执行后要做的工作,包括setUp()和tearDown();
TestSuit(测试集)
多个测试用例集合在一起
TestLoader(加载用例)
用来加载Testcase到TestSuite中
TextTestRunner(执行用例)/HTMLTestRunnerNew(推荐使用,生成HTML网页版测试报告)
运行原理
TestSuite对多个TestCase的整合到一起,TestLoader: 加载TestCase实例(即测试用例)到TestSuite实例中,TextTestRunner:测试用例运行类,实例化出此类的一个对象,然后把TestSuite实例做为参与传进去,就可以运行测试了
测试用例
1.测试类继承unittest.TestCase
2.用例名称前必须用test_开头,否则不识别!
3.断言
需要判断用例是Pass还是Fail,可以用unittest.TestCase模块的:断言
如果测试失败则显示为F,测试通过为.
常用断言
assertEqual(a,b,msg="None") 判断a,b是否相等,不相等时,抛出msg;13;assertTure(x,msg="None") 判断x表达式是否为真,表达式为假时,抛出msg;13;assertIn(a,b,msg="None") 判断a是否在b里面,a不在b里面时,抛出msg;13;assertIsNone(x,msg="None") 判断x是否为空,x不为空时,抛出msg。13;
4.运行执行
unittest.main()
执行条件
:执行的时候会自动搜索模块中以“test”命名开头的测试方法。
执行默认顺序
根据ASCII码的顺序加载测试用例。
数字与字母的顺序为:0-9,A-Z,a-z。
所以A开头的测试用例方法会优先执行,以a开头会后执行。
if __name__ == '__main__':13; unittest.main(verbosity=2)
外部模块调用的时候不执行我们的调试代码
既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次
测试固件
前置和后置
setUp()
初始化环境,连接数据库、初始化浏览器等。
tearDown()
清洗环境(执行每条用例之后,都要执行tearDown函数下面的代码,每次都要执行)
setUpClass()
tearDownClass()
测试集(测试套件)
unittest.TestSuite()
使用场景
只想执行其中部分,可以使用TestSuit()来收集测试用例
使用
创建测试集
suite=unittest.TestSuit()
给测试集合添加测试用例
suite.addTest(测试用例的类("用例名称1"))
addTests([,,]):添加多个测试用例
案例
suite=unittest.TestSuit()13;suite.addTest(测试用例的类("用例名称1")) #用例名称用字符串的形式传入13;suite.addTest(测试用例的类("用例名称2"))
unittest.defaultTestLoader()
使用场景
想一次性加载某个模块下所有测试用例
使用
通过该类下面的discover()方法可根据测试目录匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover
discover = unittest.defaultTestLoader.discover(case_path, pattern='test_*.py')
discover
case_dir:这个是待执行用例的目录。
子主题 1
pattern:这个是匹配脚本名称的规则,test*.py意思是匹配test开头的所有脚本
top_level_dir:这个是顶层目录的名称,一般默认等于None就行了
案例
discover = unittest.defaultTestLoader.discover(case_path,13; pattern="test*.py",13; top_level_dir=None)13;
执行套件
TextTestRunner
unittest框架的TextTextRunner()类,配合TestSuite()、defaultTestLoader()类一起使用,通过TextTextRunner类下面的run()方法来运行套件所组装的测试用例,入参为suite测试套件。
runner = unittest.TextTestRunner()13; runner.run(discover)
测试报告
HTMLTestRunner
准备
1.需要下载包
http://tungwaiyip.info/software/HTMLTestRunner.html
2.目录
下载后手动拖到python安装文件的Lib目录下
参数
title:测试报告的主题
stream:测试报告写入文件的存储区域
description:测试报告的描述
案例
report_abspath = os.path.join(report_path, "result.html")13; fp = open(report_abspath, "wb")13; runner = HTMLTestRunner.HTMLTestRunner(stream=fp,13; title=u'自动化测试报告,测试结果如下:',13; description=u'用例执行情况:')13;13; # 调用add_case函数返回值13; runner.run(all_case())13;
装饰器
@unittest.skip()
跳过部分测试用例
分支主题
@skip(reason)装饰器:无条件跳过装饰的测试,并说明跳过测试的原因。13;13;@skipIf(condition,reason)装饰器:条件为真时,跳过装饰的测试,并说明跳过测试的原因。13;13;@skipUnless(condition,reason)装饰器:条件为假时,跳过装饰的测试,并说明跳过测试的原因。13;13;@ expectedFailure()测试标记为失败。
@classmethod
配置setUpClass(cls)和tearDownClass(cls): 一起使用
数据驱动(ddt)
使用场景
针对某些功能相同,但是输入的参数数据不同时,可以使用数据驱动设计的模式
安装
pip install ddt
使用
装饰类
@ddt.ddt
继承TestCase的类。
装饰方法
@ddt.data()
装饰测试方法,装饰器的参数就是测试数据:@ddt.data(*testData)
testData可以是数组或者元祖
@ddt.file_data
参数是文件名。文件可以是json或者yaml类型。
如果文件是以“.yml”或者".yaml"结尾,ddt会作为yaml类型处理,其他文件都会作为json文件处理。
@ddt.unpack
分解list或者tuple
分解tuple
@data((1,2),(4,5)) #元组13; @unpack #分解13; def test_one(self,value1,value2):13; print(f'the @data number is :{value1,value2}')
分解字典
@data({'value1':1,'value2':2},{'value1':3,'value2':4}) #字典13; @unpack13; def test_one(self,value1,value2):13; print(f'the @data number is :{value1,value2}')
0 条评论
下一页