ToB企服应用市场:ToB评测及商务社交产业平台

标题: Python unittest数据处理ddt [打印本页]

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




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4