unittest(20)- 自动更新表格中的测试数据(1)
# 直接给出第一个手机号,而不是从excel中取数据
from openpyxl import load_workbook
from tools.read_config import ReadConfig
from tools import project_path
class DoExcel:
def get_data(self, file):
wb = load_workbook(file)
# 读出来的配置项是字符串格式,需要转换成字典格式
mode = eval(ReadConfig.get_config(project_path.case_config_path_auto_incre, "MODE", "mode"))
tel = 15546355882 # 假设是从excel中拿到的手机号
test_data = []
for key in mode:
sheet = wb[key] # 表单名
if mode[key] == "all":
for i in range(2, sheet.max_row+1):
row_data = {}
# 数值类型读出来还是数值,不用使用函数eval转换
row_data["case_id"] = sheet.cell(i, 1).value
row_data["url"] = sheet.cell(i, 2).value
row_data["method"] = sheet.cell(i, 3).value
# row_data["data"] = eval(sheet.cell(i, 4).value)
if sheet.cell(i, 4).value.find("${tel_1}") != -1: # 表示在这个单元格的值中如果找到了${tel_1}字符串
row_data["data"] = sheet.cell(i, 4).value.replace("${tel_1}", str(tel))
elif sheet.cell(i, 4).value.find("${tel}") != -1: # 如果找到${tel}
row_data["data"] = sheet.cell(i, 4).value.replace("${tel}", str(tel+1)) # 加1是因为要使用不同的手机号
else: # 如果没有找到匹配的字符串
row_data["data"] = sheet.cell(i, 4).value
row_data["title"] = sheet.cell(i, 5).value
row_data["expected"] = sheet.cell(i, 6).value
row_data["sheet_name"] = key # 为了写回测试结果时定位表单
test_data.append(row_data)
else:
for case_id in mode[key]:
row_data = {}
row_data["case_id"] = sheet.cell(case_id+1, 1).value # 注意行号和case_id的关系
row_data["url"] = sheet.cell(case_id+1, 2).value
row_data["method"] = sheet.cell(case_id+1, 3).value
row_data["data"] = eval(sheet.cell(case_id+1, 4).value)
row_data["title"] = sheet.cell(case_id+1, 5).value
row_data["expected"] = sheet.cell(case_id+1, 6).value
row_data["sheet_name"] = key # 为了写回测试结果时定位表单
test_data.append(row_data)
return test_data
def write_back(self, file, sheet, i, response, test_result):
wb = load_workbook(file)
sheet = wb[sheet]
# 写入测试结果, value必须是数据或者字符串类型才能被写回,写入数据前必须关闭工作簿
sheet.cell(i, 7).value = response
sheet.cell(i, 8).value = test_result
# 保存工作簿
wb.save(file)
if __name__ == ‘__main__‘:
test_data = DoExcel().get_data(project_path.test_case_path)
print(test_data)
print(len(test_data)) # 获取列表元素个数配置文件如图:

用例数据如图:
