文件路径:项目目录/common/data_handler.py
EnvData:存放用例中需要使用的数据 clear_EnvData_attrs:清理 EnvData里设置的属性 replace_case_by_regular:替换测试用例中的“##”标记的变量,替换数据在config.ini-[data]中优先查找,再在EnvData中查找,变量名需一致。 excel中需要的变量用#变量名#标记。例"access_token": "#access_token#"
data_handler.py
import re
from common.config_handler import conf
from common.my_logger import logger
class EnvData:
"""
存储用例要使用到的数据。
"""
pass
def clear_EnvData_attrs():
# 清理 EnvData里设置的属性
values = dict(EnvData.__dict__.items())
for key, value in values.items():
if key.startswith("__"):
pass
else:
delattr(EnvData, key)
def replace_case_by_regular(case):
"""
对excel当中,读取出来的整条测试用例,做全部替换。
包括url,request_data,expected,check_sql
"""
for key,value in case.items():
if value is not None and isinstance(value, str): # 确保是个字符串
case[key] = replace_by_regular(value)
logger.info("正则表达式替换完成之后的请求数据:\n{}".format(case))
return case
def replace_by_regular(data):
"""
将字符串当中,匹配#(.*?)#部分,替换换对应的真实数据。
真实数据只从2个地方去获取:1个是配置文件当中的data区域 。另1个是,EvnData的类属性。
data: 字符串
return: 返回的是替换之后的字符串
ps: 1个是配置文件当中的data区域 。另1个是,EvnData的类属性。必须都是字符串类型。
"""
res = re.findall("#(.*?)#", data) # 如果没有找到,返回的是空列表。
# 标识符对应的值,来自于:1、环境变量 2、配置文件
if res:
for item in res:
# 得到标识符对应的值。
try:
value = conf.get("data", item)
except:
try:
value = getattr(EnvData, item)
except AttributeError:
# value = "#{}#".format(item)
continue
print(value)
# 再去替换原字符串
data = data.replace("#{}#".format(item), value)
return data