将结果的所有数据整理如下:
{'api_case_01':
[{'测试用例编号': 'api_case_01', '测试用例名称': '获取access_token接口测试', '用例执行': '是', '用例步骤': 'step_01', '接口名称': '获取access_token接口', '请求方式': 'get', '请求头部信息': '', '请求地址': '/cgi-bin/token', '请求参数(get)': '{"grant_type":"client_credential","appid":"wx55614004f367f8ca","secret":"65515b46dd758dfdb09420bb7db2c67f"}', '请求参数(post)': '', '取值方式': '无', '取值代码': '', '取值变量': '', '断言类型': 'body_regexp', '期望结果': '"access_token":"(.+?)"'
}],
'api_case_02':
[{'测试用例编号': 'api_case_02', '测试用例名称': '创建标签接口测试', '用例执行': '否', '用例步骤': 'step_01', '接口名称': '获取access_token接口', '请求方式': 'get', '请求头部信息': '', '请求地址': '/cgi-bin/token', '请求参数(get)': '{"grant_type":"client_credential","appid":"wx55614004f367f8ca","secret":"65515b46dd758dfdb09420bb7db2c67f"}', '请求参数(post)': '', '取值方式': '正则取值', '取值代码': '"access_token":"(.+?)"', '取值变量': 'token', '断言类型': 'json_key_value', '期望结果': '{"expires_in":7200}'},
{'测试用例编号': 'api_case_02', '测试用例名称': '创建标签接口测试', '用例执行': '否', '用例步骤': 'step_02', '接口名称': '创建标签接口', '请求方式': 'post', '请求头部信息': '', '请求地址': '/cgi-bin/tags/create', '请求参数(get)': '{"access_token":${token}}', '请求参数(post)': '{ "tag" : { "name" : "广东" } } ', '取值方式': '无', '取值代码': '', '取值变量': '', '断言类型': 'json_key', '期望结果': 'tag'
}],
'api_case_03':
[{'测试用例编号': 'api_case_03', '测试用例名称': '删除标签接口测试', '用例执行': '否', '用例步骤': 'step_01', '接口名称': '获取access_token接口', '请求方式': 'get', '请求头部信息': '', '请求地址': '/cgi-bin/token', '请求参数(get)': '{"grant_type":"client_credential","appid":"wx55614004f367f8ca","secret":"65515b46dd758dfdb09420bb7db2c67f"}', '请求参数(post)': '', '取值方式': 'jsonpath取值', '取值代码': '$.access_token', '取值变量': 'token', '断言类型': 'json_key', '期望结果': 'access_token'},
{'测试用例编号': 'api_case_03', '测试用例名称': '删除标签接口测试', '用例执行': '否', '用例步骤': 'step_02', '接口名称': '创建标签接口', '请求方式': 'post', '请求头部信息': '', '请求地址': '/cgi-bin/tags/create', '请求参数(get)': '{"access_token":${token}}', '请求参数(post)': '{ "tag" : { "name" : "p3p4testddd" } } ', '取值方式': '正则取值', '取值代码': '"id":(.+?),', '取值变量': 'tag_id', '断言类型': 'json_key', '期望结果': ''},
{'测试用例编号': 'api_case_03', '测试用例名称': '删除标签接口测试', '用例执行': '否', '用例步骤': 'step_03', '接口名称': '删除标签接口', '请求方式': 'post', '请求头部信息': '', '请求地址': '/cgi-bin/tags/delete', '请求参数(get)': '{"access_token":${token}}', '请求参数(post)': '{ "tag":{ "id" : ${tag_id} } }', '取值方式': '无', '取值代码': '', '取值变量': '', '断言类型': 'json_key_value', '期望结果': '{"errcode":0}'}
]
}
思路分析:转化为:
‘case_id':‘api_case_01','case_info':[{'测试用例编号': 'api_case_01', '测试用例名称': '获取access_token接口测试', '用例执行': '是', '用例步骤': 'step_01', '接口名称': '获取access_token接口', '请求方式': 'get', '请求头部信息': '', '请求地址': '/cgi-bin/token', '请求参数(get)': '{"grant_type":"client_credential","appid":"wx55614004f367f8ca","secret":"65515b46dd758dfdb09420bb7db2c67f"}', '请求参数(post)': '', '取值方式': '无', '取值代码': '', '取值变量': '', '断言类型': 'body_regexp', '期望结果': '"access_token":"(.+?)"'
}]
例:
data_convert_02.py
a_dict = {'小红':[{'book1':'朝花夕拾'},{'book2':'红楼梦'}],
'小黑':[{'book1':'呐喊'},{'book2':'红楼梦'}]}
data_list = []
for key,value in a_dict.items():#同时返回键和值,a_dict.key返回key,a_dict.value返回value
b_dict = {}
b_dict['name'] = key
b_dict['books'] = value
data_list.append(b_dict)
print( data_list )
转换封装:
# import os
# from utils.excel_utils import ExcelUtils
# excel_file_path = os.path.join( os.path.dirname(__file__),'..','data','testcase_infos.xlsx')
# excel_sheet_name = 'Sheet1'
#
# class TestcaseDataUtils:
# def __init__(self):
# self.excel_data = ExcelUtils(excel_file_path=excel_file_path,sheet_name=excel_sheet_name)
#
# def convert_testcase_data(self):
# ''' 把excel的所有原始数据转换成符合框架需要的测试用例业务数据 '''
# testcase_dict = {}
# for row_data in self.excel_data.get_all_data():
# testcase_dict.setdefault(row_data['测试用例编号'],[]).append(row_data)
# return testcase_dict
# if __name__ == '__main__': #测试
# testcaseDataUtils = TestcaseDataUtils()
# test_case_dicts = testcaseDataUtils.convert_testcase_data()
# # for testcase in test_case_dicts['api_case_01']:
# for testcase in test_case_dicts['api_case_02']:
# print(testcase)
# print(test_case_dicts) #打印所有的数据
⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️
import os
from utils.excel_utils import ExcelUtils
# from utils.mysql_utils import MysqlUtils
excel_file_path = os.path.join( os.path.dirname(__file__),'..','data','testcase_infos.xlsx')
excel_sheet_name = 'Sheet1'
class TestcaseDataUtils:
def __init__(self):
self.test_data_obj = ExcelUtils(excel_file_path=excel_file_path,sheet_name=excel_sheet_name)
#self.test_data_obj = MysqlUtils()
def convert_testcase_data_to_dict(self):
''' 把excel的所有原始数据转换成符合框架需要的测试用例业务数据 '''
testcase_dict = {}
for row_data in self.excel_data.get_all_data():
testcase_dict.setdefault(row_data['测试用例编号'],[]).append(row_data)
return testcase_dict
def convert_testcase_data_to_list(self):
''' 把convert_testcase_data_to_dict产生的数据转换成列表并在每个元素中增加key '''
all_casedata_list = []
for key,value in self.convert_testcase_data_to_dict().items():
case_info_dict = {}
case_info_dict['case_id'] = key
case_info_dict['case_step'] = value
all_casedata_list.append( case_info_dict )
return all_casedata_list
if __name__=='__main__':
testcaseDataUtils = TestcaseDataUtils()
test_case_lists = testcaseDataUtils.convert_testcase_data_to_list()
# for testcase in test_case_dicts['api_case_01']:
# print( testcase )
for t in test_case_lists:
print( t )
#print(test_case_lists[0]['case_step'][0]['请求参数(get)'])
数据源处理:
1、config读取的封装
2、excel存放测试数据转换到代码中的处理
合并单元格 == 》 封装excel_utils == 》把excel数据转换成测试用例业务数据
(setdefault() 为了把用例步骤整合到对应的测试编号中)==》封装testcase_data_utils
==》形态变化:
[{},{}] == {"":[],"":[]} == [{"case_id":'','case_step':[]},...]