https://blog.csdn.net/weixin_45912307/article/details/109069927
1. ddt+unittest :进行数据处理,第三方库
2. 实质:装饰器,装饰测试类,在函数运行之前执行
import unittest
from ddt import ddt,data,unpack
test_data = [[1,2],[3,4,5]]
@ddt # 脱掉最外层
@unpack # 根据‘,’进行拆分 ,如果unpack后的参数少于5个,推荐用unpack,
class TestMath(unittest.TestCase):
@data(*test_data) # 测试用例
def test_print_data((self,a,b,c): # 三个参数接收,unpack把[3,4,5]拆分为3,4,5
pass
import unittest
from ddt import ddt,data,unpack
test_data = [[1,2],[3,4,5]]
@ddt # 脱掉最外层
class TestMath(unittest.TestCase):
@data(*test_data) # 测试用例
def test_print_data((self,a,b): # 两个参数接收
pass
3. 应用:
unittest+ddt+excel
:对handle_excel从test_data.xlsx读取出的数据进行再次处理
handle_baseexcel.py文件
from openpyxl import load_workbook
from common.file_dir import test_data_path
class HandleExcel:
def __init__(self,file_name,sheet_name):
self.file_name = file_name
self.sheet_name = sheet_name
def get_data(self):
wb = load_workbook(self.file_name)
sheet = wb[self.sheet_name]
test_data = []
for i in range(2,sheet.max_row+1):
sub_data = {}
sub_data['test_id'] = sheet.cell(i,1).value
sub_data['url'] = sheet.cell(i,2).value
sub_data['title'] = sheet.cell(i,3).value
sub_data['http_method'] =sheet.cell(i,4).value
sub_data['expected'] = sheet.cell(i,5).value
sub_data['result'] = sheet.cell(i,6).value
sub_data['TestResult'] = sheet.cell(i,7).value
test_data.append(sub_data)
return test_data # 返回获取到的数据
@staticmethod
def write_back(file_name,sheet_name,row,rol,result):
wb = load_workbook(file_name)
sheet = wb[sheet_name]
sheet.chell(row,rol).value = result
wb.save(file_name) # 保存结果
@staticmethod
def update_tel(file_name,sheet_name,tel):
wb = load_workbook(file_name)
sheet = wb[sheet_name]
sheet.chell(2,1).value = tel
wb.save(file_name)
if __name__ == '__main__':
print(HandleExcel(test_data_path,'login').get_data())
test_login.py文件
import unittest
from common.handle_baseexcel import HandleExcel
from common.get_data import GetData
from common.http_requests import HttpRequest
from common.file_dir import *
from ddt import ddt, data # 列表嵌套列表:索引方式读取;列表嵌套字典:关键字方式读取
test_data = HandleExcel.get_data(test_data_path,'login') # 执行登录用例
@ddt
class TestLogin(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
@data(*test_data)
def test_login(self, item):
# 登录
global TestResult
login_url = 'http://path'
login_data = '{"mobilephone": "xxxxxx", "pwd": "123456"}'
res = HttpRequest.http_request(item['url'], eval(item['data']), item['http_method'],
getattr(GetData, 'Cookie'))
try:
self.assertEqual(item['excepted'], res.json()['code'])
TestResult = 'PASS' # 成功的
except Exception as e:
TestResult = 'failed' # 失败的
print("执行用例出错:{0}".format(e))
finally:
HandleExcel.write_back(test_data_path,item['sheet_name'], item['test_id']+1, str(res.json()),TestResult)
print("获取到的结果为:{0}".format(res.json()))