当前位置:网站首页>unittest框架
unittest框架
2022-08-02 14:15:00 【keer丶】
unittest 基本使用
unittest框架
是python自带的一个单元测试框架,不需要单独安装。
使用的原因
1.能够组织多个用例去执行 2.提供丰富的断言方法 3.能够生成测试报告
核心要素
1.TestCase--测试用例,是unittest的组成部分,是用来书写真正的用例代码 2.TestSuite--测试套件,是用来组装TestCase的,可以将多个用例脚本文件组装到一起 3.TestRunner--测试执行,是用来执行TestSuite的 4.TestLoader--测试加载,是对TestSuite功能的补充 5.Fixture--测试夹具,是一种代码结构,书写前置方法和后置方法的代码
TestCase测试用例
步骤
1.导包 unittest 2.定义测试类 3.书写测试方法 4.执行:鼠标放在类名后边右键运行,运行该类所有的测试用例,放在类下的方法名后边,只运行该方法。
注意事项
1.代码文件名字要满足标识符的规则 2.代码文件名不要使用中文
实例
import unittest # 2.定义测试类 class TestDemo(unittest.TestCase): # 3.书写测试方法 def test001_demo(self): print('测试方法1') def test002_demo(self): print('测试方法2') # 4.执行 # 4.1在类名或方法名后边运行,鼠标放在类名后边右键运行,运行该类所有的测试用例,放在类下的方法名后边,只运行该方法。 # 4.2使用unittest.main运行 if __name__ == '__main__': unittest.main()常见错误
1.py文件名字带中文,需要将文件名改为英文下划线等。 2.右键没有unittest for 运行
####
TestSuite和TestRunner
testsuite(测试套件)
将多条用例脚本集合在一起,就是套件,即用来组装用例的
1.导包 unittest 2.实例化套件对象 unittest.TestSuite() 3.添加用例方法
TestRunner
用来执行套件对象的
1.导包 unittest 2.实例化执行对象 unittest.textTestRunner() 3.执行对象去执行套件对象
整体步骤
1.导包 unittest 2.实例化套件对象 suite = unittest.TestSuite() 3.添加用例方法 3.1 suite.addTest(用例类名('用例方法名')) --一次性只能添加一个方法 3.2 suite.addTest(unittest.makeSuite(用例类名)) ----一次性只能添加一个类 4.实例化执行对象 runner = unittest.textTestRunner() 5.执行对象去执行套件对象 runner.run(suite)
代码案例
# 1.导包 unittest import unittest # 2.定义测试类 class TestDemo1(unittest.TestCase): # 3.书写测试方法 def test001_demo(self): print('测试方法1-1') def test002_demo(self): print('测试方法1-2')# 1.导包 unittest import unittest from test_unittest.test_testcase1 import TestDemo1 #另外一个测试用例文件中的类 from test_unittest.test_testcase2 import TestDemo2 #另外一个测试用例文件中的类 # 2.实例化套件对象 unittest.TestSuite() suite = unittest.TestSuite() # 3.添加用例方法 #3.1 #suite.addTest(TestDemo1('test001_demo')) #此种方式为单个添加,格式:类名('方法名') #suite.addTest(TestDemo1('test002_demo')) #suite.addTest(TestDemo2('test001_demo')) #suite.addTest(TestDemo2('test002_demo')) # 3.2添加整个测试类 suite.addTest(unittest.makeSuite(TestDemo1)) suite.addTest(unittest.makeSuite(TestDemo2)) # 4.实例化执行对象 unittest.textTestRunner() runner = unittest.TextTestRunner() # 5.执行对象去执行套件对象 runner.run(suite)
####
TestLoader测试加载
作用和TestSuite一样,组装用例代码,同样也需要TestRunner()去执行
1.导包 unittest 2.实例化加载对象并加载用例 --->得到的是 套件对象 3.实例化执行对象并执行
代码示例
# 1.导包 unittest import unittest # 2.实例化加载对象并加载用例 --->得到的是 套件对象 suite = unittest.TestLoader().discover(r'./','test_testcase*.py') #3.实例化执行对象并执行 runner = unittest.TextTestRunner() runner.run(suite)
Fixture
是一种在用例执行前后会自动执行的代码结构
方法级别的fixture
在每个用例执行前后都会自动调用,方法名是固定的
def setUp(self): #前置,每个用例执行前都会自动调用 方法体 def tearDown(self): #后置,每个用例执行后都会自动调用 方法体
类级别的fixture
在类中所有的测试方法执行前后,自动执行一次
@classmethod def setUpClass(cls): #前置 方法体 def tearDownClass(cls): #后置 方法体
模块级别的fixture(了解)
模块就是整个代码文件 模块级别,在这个代码文件执行前后执行一次
#在类外部定义 def setUpModule(): pass def tearDownModule(): pass
断言
让程序代替认为判断测试程序执行结果是否符合预期结果的过程
| 序号 | 断言方法 | 断言描述 |
|---|---|---|
| 1 | assertEqual(expected,actual,msg=None) | 验证expected==actual,不等则fail |
| 2 | assertIn(member,container,msg=None) | 验证是否member in container |
参数化
安装parameterized :pip install parameterized
--通过参数的方式来传递数据,从而实现数据和脚本分离,可以实现用例的重复执行,unittest本身不知处参数化,需要通过安装扩展插件parameterized来实现。
1.导包:from parameterized import parameterized 2.定义测试方法,将测试方法中的测试数据使用变量表示 3.组织测试数据格式,[(),(),()],一个元组就是一组数据 4.参数化,在测试方法上使用装饰器@parameterized.expend(测试数据) 5.运行代码
from parameterized import parameterized import unittest from test_unittest.util import add #导入add方法,就是简单的加法 data=[(1,1,2),(1,2,3),(2,3,5),(1,1,3)] #数据在一个文件内 class TestAdd(unittest.TestCase): @parameterized.expand(data) def test_add(self,a,b,expect): self.assertEqual(expect,add(a,b)) suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestAdd)) runner = unittest.TextTestRunner() runner.run(suite)
数据在json文件内
# json文件 testdata.json [ {"a":1,"b":2,"expect":3}, {"a":1,"b":3,"expect":4}, {"a":1,"b":2,"expect":3}, {"a":1,"b":2,"expect":5}, {"a":2,"b":2,"expect":4} ]#工具文件 util.py import json #加法方法 def add(a,b): return a+b #读取json文件,转换成[(1,1,2),(),()]格式 def load_data(): with open(r'testdata.json','r',encoding='utf-8') as f: data_list = json.load(f) #读取文件并转成[{"k":"v"},{"k":"v"}] test_data = [] for item in data_list: a = item.get('a') b = item.get('b') expect = item.get('expect') test_data.append((a,b,expect)) #(a,b,expect)=====>(1,2,3) return test_data
from parameterized import parameterized #导入parameterized import unittest #导入unittest from test_unittest.util import add, load_data #导入util中的方法 class TestAdd(unittest.TestCase): @parameterized.expand(load_data()) def test_add(self,a,b,expect): self.assertEqual(expect,add(a,b)) suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestAdd)) runner = unittest.TextTestRunner() runner.run(suite)
测试报告
HTML测试报告:就是执行完测试用例后,以HTML方式将执行结果生成报告,本质是TestRunner
使用HTMLTestReport --安装 pip install HTMLTestReport
1.导包 unittest HTMLTestReport --- from htmltestreport import HTMLTestReport 2.组装用例(套件or TestLoader) 3.使用HTMLTestReport 中的runner执行套件 4.查看报告
from parameterized import parameterized import unittest from test_unittest.util import add, load_data from htmltestreport import HTMLTestReport class TestAdd(unittest.TestCase): @parameterized.expand(load_data()) def test_add(self,a,b,expect): self.assertEqual(expect,add(a,b)) suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestAdd)) runner = HTMLTestReport(r'./report.html','测试用例报告','这里是一个描述') runner.run(suite)
边栏推荐
- Litestar 4D – WebCatalog 7:全自动数据管理
- tcp transparent proxy (IP_TRANSPARENT)
- "Array" look-up table method (leap year)
- HCIE学习记录——数据封装与常用协议(TCP/UDP)
- implement tcp copa on ns3
- Class template/assignment operations and add operations
- Three-way joint interface data security issues
- Unity插件-FairyGUI
- Apache ShardingSphere 5.1.1 正式发布
- idea同时修改相同单词
猜你喜欢
![The relationship between base classes and derived classes [inheritance] / polymorphism and virtual functions / [inheritance and polymorphism] abstract classes and simple factories](/img/c1/c695006706ce91233d9ac8ecb95c50.png)
The relationship between base classes and derived classes [inheritance] / polymorphism and virtual functions / [inheritance and polymorphism] abstract classes and simple factories

Server-Sent Events 一种轻量级的Push方式

char array/string array|array pointer/pointer array/

理解:野指针,空指针,失效指针。

TCP的三次握手和四次挥手

光学好书推荐

【网络安全】学习笔记 --02 安全通信协议

许多代码……

【线程】 理解线程(并行)线程同步的处理(信号量,互斥锁,读写锁,条件变量)

排序方法汇总(C语言)
随机推荐
锥形相位掩模的Talbot图像
golang的内存相关内容
分布式一致性协议-Paxos
【线程】线程创建 | 理解线程并发 (1)
泰伯效应.
SkyWalking Agent数据采集和上报原理浅析
shader入门精要2
UnityAPI-Ray-Physics
理解:野指针,空指针,失效指针。
关于推荐系统的随想
OpenPose run command ([email protected])
mininet multihomed topology
嵌入式学习硬件篇------初识ARM
unity Domain Reload & scene Reload 静态变量重置
Oauth2.0 authentication server construction
【软件测试】项目中关于测试人员的简单介绍
Unity中事件的3种实现方法
使用1D-1D EPE的光波导布局设计工具
Qt | 实现一个简单的可以转动的仪表盘
Unity-Post Processing