#实例化: #suite:TestSuite实例化的名称
suite = unittest.TestSuite()
#添加用例:#ClassName:类名,methodName:方法名
suite.addTest(ClassName(“methodName”))
suite.addTest([ClassName1(“methodName1”),ClassName2(“methodName2”)])
#添加扩展:#搜索指定Class内test开头的方法并添加到测试套件中
suite.addTest(unittest.makeSuite(ClassName))
#TestSuite需要配合TestRunner才能被执行
TestLoader与TestSuite区别
- TestSuite需手动添加测试用例,可以添加测试类,也可以添加测试类中某个方法
- TestLoader搜索指定目录下指定开头的.py文件,并添加测试类中的所有测试方法,不能指定添加测试方法
Test Fixture:
执行一个或多个测试所需的环境准备,以及关联的清理动作
eg. 创建临时或代理数据库、目录,或启动服务器进程
Fixture的控制级别
1.方法级别 def setUp() / def tearDown()
#常用
特性:几个测试函数,执行几次,每个测试函数执行之前都会执行setUp,执行之后都会执行setDown
2.类级别 def setUpClass() / def tearDownClass()
#常用
特性:测试类运行之前运行一次setUpClass类运行之后运行一次tearDownClass
注意:类方法必须使用@classmethod修饰
3.模块级别 def setUpModule() / def tearDownModule()
#不常用
特性:模块运行之前执行一次setUpModule,运行之后运行一次tearDownModule
(1)导包import unittest
(2)新建测试类并继承unittest.TestCase
(3)测试方法必须以test字母开头
1.导包 import unittest
2.获取测试套件对象suite = unittest.TestSuite()**
3.调用addTest()方法,添加测试用例
suite.addTest(类名(“方法 suite.addTest(unittest.makeSuite(类名))
suite=unittest.TestLoader().discover(’…/cases’,pattern=’test*.py’)
defaultTestLoader
runner = unittest.TextTestRunner().runner.run(suite)
初始化和结束执行
1.方法级别 def setUp() / def tearDown()
2.类级别 def setUpClass() / def tearDownClass()
3.模块级别 def setUpModule() / def tearDownModule()
. :一条运行**通过**的测试用例
F:一条运行失败的测试用例
s:一条运行跳过的测试用例
unittest默认根据ASCII码值顺序加载测试用例
(数字与字母的顺序为09,AZ,a~z)
不是按照测试用例的创建顺序从上到下执行
断言方法
self.assertEqual(a,b) #判断a==b
self.assertIn(a,b) #b是否包含a 注意:包含不能跳字符
self.assertTrue(a) #判断a是否为True
python 自带断言
assert a==b
assert a in b
assert True
通过参数的方式来传递数据,从而实现数据和脚本的分离,并且可以实现用例的重复执行。
unittest框架,本身不支持参数化,但是可以通过安装unittest扩展插件parameterized实现
导包:from parameterized import parameterized
修饰测试函数 @parameterized.expend
(列表型数据)
跳过:对于未完成的或者不满足测试条件的测试函数的测试类,可以跳过执行
使用方式:(可以修饰方法,也可以修饰类)
#直接将测试函数标记为跳过
@unittest.skip("代码未完成")
#根据条件判断测试函数是否跳过
@unittest.skipIf(condition,reason)
将HTMLTestRunner.py文件放到当前项目文件venv/Lib/site-packages中
HTML报告:根据TextTestRunner改编而来
操作:
1. 导包
from HTMLTestRunner import HTMLTestRunner
2. 定义测试套件
suite=unittest.TestLoader().discover(’../cases’,pattern=’test*.py’)
3.实例化HTMLTestRunner类,并调用run****方法执行测试套件
with open(报告存放路径,’wb’) as f:
注意生成html报告,必须使用wb,以二进制形式写入
实例化HTMLTestRunner类
HTMLTestRunner(stream=f).run(测试套件)
stream:文件流,打开写入报告的名称及写入编码格式)