httprunner参数化问题
htprunner3.1.5版本的参数化传参无法解析参数问题
比如以下用例在运行是会报错
class Test_add(HttpRunner):
@pytest.mark.parametrize('param',Parameters({'age':['$myage']}))
def test_start(self, param):
super().test_start(param)
上例中参数化时用到teststeps中step1提取的返回结果,动态入参到参数化$myage,运行会报错myage未定义,实际上日志也确实打印出了提取成功,
因为在参数解析时源码有bug
需要对源码做如下2个修改:
1.修改parser.py文件钟的parse_string函数,对应部分修改如下
# search variable like ${var} or $var
var_match = variable_regex_compile.match(raw_string, match_start_position)
if var_match:
var_name = var_match.group(1) or var_match.group(2)
var_value = get_mapping_variable(var_name, variables_mapping)
#增加代码解析参数化时上一个接口返回的参数
try:
#如果解析出的值仍然为变量形式$xxx,则需要继续调用
match_start_position = var_value.index("$", 0)
# var_value = parse_string(var_value, variables_mapping, functions_mapping) 该代码不能卸载此处,因为parse里面有抛出处理,写在try里,错误就抛不出来了
except:
#如果解析出的值已经不包含变量了,则判断是否只包含变量部分,排除xx$xx这种格式
if f"${var_name}" == raw_string or "${" + var_name + "}" == raw_string:
# # raw_string is a variable, $var or ${var}, return its value directly
return var_value
var_value = parse_string(var_value, variables_mapping, functions_mapping)
2.修改runner.py文件下的__parse_config方法
注释掉variables的解析部分,不然会报错参数未定义,因为这个时候传入的参数是个变量,而变量的值需要在前置步骤运行后才会有值,此时还未运行任何步骤,只是解析config部分
# 修改该方法注释掉varaible的解析
def __parse_config(self, config: TConfig) -> NoReturn:
config.variables.update(self.__session_variables)
# config.variables = parse_variables_mapping(
# config.variables, self.__project_meta.functions
# )
config.name = parse_data(
config.name, config.variables, self.__project_meta.functions
)
本文来自博客园,作者:qxll,转载请注明原文链接:https://www.cnblogs.com/qxll/p/15040909.html

浙公网安备 33010602011771号