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
    )
posted @ 2021-07-21 18:33  qxll  阅读(93)  评论(0)    收藏  举报