Skip to content

Commit

Permalink
更新全局变量替换逻辑
Browse files Browse the repository at this point in the history
  • Loading branch information
wu-clan committed Mar 12, 2024
1 parent 0e6b019 commit 334f831
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 12 deletions.
9 changes: 6 additions & 3 deletions httpfpt/common/send_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,17 +139,17 @@ def send_request(
raise SendRequestError('请求发起失败,请使用合法的请求引擎')

# 获取解析后的请求数据
log.info('开始解析请求数据...' if not relate_log else '开始解析关联请求数据...')
log.info('开始解析用例数据...' if not relate_log else '开始解析关联用例数据...')
try:
request_data_parse = RequestDataParse(request_data, request_engin)
parsed_data = request_data_parse.get_request_data_parsed(relate_log)
except Skipped as e:
raise e
except Exception as e:
if not relate_log:
log.error(f'请求数据解析失败: {e}')
log.error(f'用例数据解析失败: {e}')
raise e
log.info('请求数据解析完成' if not relate_log else '关联请求数据解析完成')
log.info('用例数据解析完成' if not relate_log else '关联用例数据解析完成')

# 记录请求前置数据; 此处数据中如果包含关联用例变量, 不会被替换为结果记录, 因为替换动作还未发生
setup = parsed_data['setup']
Expand Down Expand Up @@ -180,6 +180,9 @@ def send_request(
raise e
log.info('请求前置处理完成')

# 确保用例数据变量已全部替换
var_extractor.vars_replace(parsed_data)

# 日志记录请求数据
if log_data:
self.log_request_up(parsed_data)
Expand Down
5 changes: 4 additions & 1 deletion httpfpt/utils/request/request_data_parse.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,10 @@ def _error_msg(info: str) -> str:

class RequestDataParse:
def __init__(self, request_data: dict, request_engin: str):
self.request_data = var_extractor.vars_replace(hook_executor.hook_func_value_replace(request_data))
self.request_data = var_extractor.vars_replace(
hook_executor.hook_func_value_replace(request_data),
exception=False,
)
self.request_engin = request_engin
self._is_run() # put bottom

Expand Down
18 changes: 10 additions & 8 deletions httpfpt/utils/request/vars_extractor.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,13 @@ def __init__(self) -> None:
# SQL 变量语法: :{var} 或 :var
self.sql_vars_re = re.compile(r':{([a-zA-Z_]\w*)}|(?<!\S):([a-zA-Z_]\w*)(?!\S)')

def vars_replace(self, target: dict, env_filename: str | None = None) -> dict:
def vars_replace(self, target: dict, env: str | None = None, exception: bool = True) -> dict:
"""
变量替换
:param target:
:param env_filename:
:param env:
:param exception:
:return:
"""
str_target = json.dumps(target, ensure_ascii=False)
Expand All @@ -44,11 +45,11 @@ def vars_replace(self, target: dict, env_filename: str | None = None) -> dict:
return target

# 获取环境名称
env = env_filename or target.get('config', {}).get('request', {}).get('env')
if not env or not isinstance(env, str):
_env = env or target.get('config', {}).get('request', {}).get('env')
if not _env or not isinstance(_env, str):
raise RequestDataParseError('运行环境获取失败, 测试用例数据缺少 config:request:env 参数')
try:
env_file = os.path.join(RUN_ENV_PATH, env)
env_file = os.path.join(RUN_ENV_PATH, _env)
env_vars = get_env_dict(env_file)
except OSError:
raise RequestDataParseError('运行环境获取失败, 请检查测试用例环境配置')
Expand All @@ -57,7 +58,7 @@ def vars_replace(self, target: dict, env_filename: str | None = None) -> dict:
global_vars = read_yaml(TEST_DATA_PATH, filename='global_vars.yaml')

# 获取 re 规则字符串
var_re = self.sql_vars_re if env_filename else self.vars_re
var_re = self.sql_vars_re if env else self.vars_re
for match in var_re.finditer(str_target):
var_key = match.group(1) or match.group(2)
if var_key is not None:
Expand All @@ -70,7 +71,7 @@ def vars_replace(self, target: dict, env_filename: str | None = None) -> dict:
if cache_value == default:
var_value = env_vars.get(var_key.upper(), global_vars.get(var_key, default))
if var_value != default:
if env_filename is not None:
if env is not None:
log_type = 'SQL '
str_target = var_re.sub(str(var_value), str_target, 1)
log.info(f'{log_type}变量 {var_key} 替换完成')
Expand All @@ -80,7 +81,8 @@ def vars_replace(self, target: dict, env_filename: str | None = None) -> dict:
str_target = var_re.sub(str(cache_value), str_target, 1)
log.info(f'{log_type}变量 {var_key} 替换完成')
except Exception as e:
raise VariableError(f'{log_type}变量 {var_key} 替换失败: {e}')
if exception:
raise VariableError(f'{log_type}变量 {var_key} 替换失败: {e}')

dict_target = json.loads(str_target)

Expand Down

0 comments on commit 334f831

Please sign in to comment.