Python unittest数据处理ddt
1.装饰器#装饰器的官方定义:
装饰器本质上是一个Python函数(其实就是闭包),它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。装饰器用于有以下场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。2.ddt
import unittest
#引入ddt库
from ddt import ddt,data,unpack
test_data = [{"name":"张三"},2]
@ddt#装饰测试类
class DemoCase(unittest.TestCase):
@data(test_data)#装饰函数
def test_jia(self,item):
print(item)
def test_jian(self):
pass
if __name__ == '__main__':
unittest.main()<br>运行结果:plugins: html-3.2.0, metadata-2.0.4collected 2 items demo.py .[{'name': '张三'}, 2] . ============================== 2 passed in 0.04s ============================== Process finished with exit code 03.ddt脱外套
import unittest
#引入ddt库
from ddt import ddt,data,unpack
test_data = [{"name":"张三"},2]
@ddt#装饰测试类
class DemoCase(unittest.TestCase):
@data(*test_data)#装饰函数,*test_data脱外套,根据脱外套后的数据执行次数
def test_jia(self,item):
print(item)
if __name__ == '__main__':
unittest.main()<br>运行结果:<br>plugins: html-3.2.0, metadata-2.0.4collected 2 items
demo.py .{'name': '张三'}
.2
============================== 2 passed in 0.04s ==============================
Process finished with exit code 04.ddt中的@unpack
import unittest
#引入ddt库
from ddt import ddt,data,unpack
test_data = [,]
@ddt#装饰测试类
class DemoCase(unittest.TestCase):
@data(*test_data)#装饰函数,*test_data脱外套,根据脱外套后的数据执行次数
@unpack
def test_jia(self,a,b):
print("a: ",a)
print("b: ",b)
if __name__ == '__main__':
unittest.main()<br>运行结果:
plugins: html-3.2.0, metadata-2.0.4collected 2 items
demo.py <br>.a:2
b:6
.a:9
b:1000
============================== 2 passed in 0.04s ==============================
5.ddt+openpyxl参数化实现
import unittest
#引入ddt库
from ddt import ddt,data,unpack
from test01.doexcel import DoExcelhttps://images.cnblogs.com/OutliningIndicators/ContractedBlock.gifhttps://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif#引入仓库
from openpyxl import load_workbook
class DoExcel():
def __init__(self,file,sheet):
self.file=file
self.sheet=sheet
def return_excel_value(self):
wb = load_workbook(self.file)#打开excel
sheet_content = wb#定位sheet工作博
data_list = []#列表用于存储测试数据
for n in range(2,sheet_content.max_row+1):#行,第一行是标题,所以从第二行开始
data_dict = {}#字典用于存储每组测试数据
for m in range(2,sheet_content.max_column+1):
data_dict["method"]=sheet_content.cell(n,2).value
data_dict["url"] = sheet_content.cell(n, 3).value
data_dict["data"] = eval(sheet_content.cell(n, 4).value)#eval()将数据类型还原
data_dict["expect"] = sheet_content.cell(n, 5).value
data_list.append(data_dict)#将字典存储到list
return data_listDoExcel类代码test_data = DoExcel("C:\\Users\\Administrator\\Desktop\\testdemo.xlsx","s1").return_excel_value()#[{},{},{}]
@ddt#装饰测试类
class DemoCase(unittest.TestCase):
@data(*test_data)#装饰函数,*test_data脱外套,根据脱外套后的数据执行次数
def test_jia(self,item):
print(item["method"],item["url"],item["data"],item["expect"])
if __name__ == '__main__':
unittest.main()<br>执行结果:
plugins: html-3.2.0, metadata-2.0.4collected 2 items
demo.py .post http://www.qabujiaban.com/user/login {'username': 'uuuu222都44', 'password': 'WJHasb124*1'} 0000
.get http://www.qabujiaban.com/user/login {'username': 'uuuu222都44', 'password': 'WJHasb124*1'} 0000
============================== 2 passed in 0.31s ==============================
Process finished with exit code 0
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]