diff --git a/httprunner/step_request.py b/httprunner/step_request.py index 14b31034..f08bc636 100644 --- a/httprunner/step_request.py +++ b/httprunner/step_request.py @@ -1,3 +1,4 @@ +import copy import time from typing import Any, Dict, List, Text, Union @@ -73,23 +74,23 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: ) start_time = time.time() - step.variables = runner.merge_step_variables(step.variables) - # parse functions = runner.parser.functions_mapping prepare_upload_step(step, functions) + # step_variables should be defined after prepare_upload_step + step_variables = runner.merge_step_variables(step.variables) request_dict = step.request.dict() request_dict.pop("upload", None) - parsed_request_dict = runner.parser.parse_data(request_dict, step.variables) + parsed_request_dict = runner.parser.parse_data(request_dict, step_variables) parsed_request_dict["headers"].setdefault( "HRUN-Request-ID", f"HRUN-{runner.case_id}-{str(int(time.time() * 1000))[-6:]}", ) - step.variables["request"] = parsed_request_dict + step_variables["request"] = parsed_request_dict # setup hooks if step.setup_hooks: - call_hooks(runner, step.setup_hooks, step.variables, "setup request") + call_hooks(runner, step.setup_hooks, step_variables, "setup request") # prepare arguments config = runner.get_config() @@ -126,11 +127,11 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: import allure allure.attach(response_print, name="response details", attachment_type=allure.attachment_type.TEXT) resp_obj = ResponseObject(resp, runner.parser) - step.variables["response"] = resp_obj + step_variables["response"] = resp_obj # teardown hooks if step.teardown_hooks: - call_hooks(runner, step.teardown_hooks, step.variables, "teardown request") + call_hooks(runner, step.teardown_hooks, step_variables, "teardown request") def log_req_resp_details(): err_msg = "\n{} DETAILED REQUEST & RESPONSE {}\n".format("*" * 32, "*" * 32) @@ -139,10 +140,10 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: # extract extractors = step.extract - extract_mapping = resp_obj.extract(extractors, step.variables) + extract_mapping = resp_obj.extract(extractors, step_variables) step_result.export_vars = extract_mapping - variables_mapping = step.variables + variables_mapping = step_variables variables_mapping.update(extract_mapping) # validate diff --git a/httprunner/step_sql_request.py b/httprunner/step_sql_request.py index 6b396720..ac90af58 100644 --- a/httprunner/step_sql_request.py +++ b/httprunner/step_sql_request.py @@ -50,10 +50,10 @@ def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult: name=step.name, success=False, ) - step.variables = runner.merge_step_variables(step.variables) + step_variables = runner.merge_step_variables(step.variables) # parse request_dict = step.sql_request.dict() - parsed_request_dict = runner.parser.parse_data(request_dict, step.variables) + parsed_request_dict = runner.parser.parse_data(request_dict, step_variables) config = runner.get_config() parsed_request_dict["db_config"]["psm"] = ( parsed_request_dict["db_config"]["psm"] or config.db.psm @@ -92,7 +92,7 @@ def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult: # setup hooks if step.setup_hooks: - call_hooks(runner, step.setup_hooks, step.variables, "setup request") + call_hooks(runner, step.setup_hooks, step_variables, "setup request") # log request sql_request_print = "====== sql request details ======\n" @@ -136,11 +136,11 @@ def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult: allure.attach(sql_request_print, name="sql response details", attachment_type=allure.attachment_type.TEXT) resp_obj = SqlResponseObject(sql_resp, parser=runner.parser) - step.variables["sql_response"] = resp_obj + step_variables["sql_response"] = resp_obj # teardown hooks if step.teardown_hooks: - call_hooks(runner, step.teardown_hooks, step.variables, "teardown request") + call_hooks(runner, step.teardown_hooks, step_variables, "teardown request") def log_sql_req_resp_details(): err_msg = "\n{} SQL DETAILED REQUEST & RESPONSE {}\n".format("*" * 32, "*" * 32) @@ -152,7 +152,7 @@ def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult: extract_mapping = resp_obj.extract(extractors) step_result.export_vars = extract_mapping - variables_mapping = step.variables + variables_mapping = step_variables variables_mapping.update(extract_mapping) # validate @@ -167,6 +167,7 @@ def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult: session_data = runner.session.data session_data.success = step_result.success session_data.validators = resp_obj.validation_results + # save step data step_result.data = session_data step_result.elapsed = time.time() - start_time diff --git a/httprunner/step_thrift_request.py b/httprunner/step_thrift_request.py index 5ba44681..b77e3c3c 100644 --- a/httprunner/step_thrift_request.py +++ b/httprunner/step_thrift_request.py @@ -57,10 +57,10 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult: name=step.name, success=False, ) - step.variables = runner.merge_step_variables(step.variables) + step_variables = runner.merge_step_variables(step.variables) # parse request_dict = step.thrift_request.dict() - parsed_request_dict = runner.parser.parse_data(request_dict, step.variables) + parsed_request_dict = runner.parser.parse_data(request_dict, step_variables) config = runner.get_config() parsed_request_dict["psm"] = parsed_request_dict["psm"] or config.thrift.psm parsed_request_dict["env"] = parsed_request_dict["env"] or config.thrift.env @@ -96,7 +96,7 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult: # "HRUN-Request-ID", # f"HRUN-{self.__case_id}-{str(int(time.time() * 1000))[-6:]}", # ) - step.variables["thrift_request"] = parsed_request_dict + step_variables["thrift_request"] = parsed_request_dict psm = parsed_request_dict["psm"] if not runner.thrift_client: @@ -118,7 +118,7 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult: # setup hooks if step.setup_hooks: - call_hooks(runner, step.setup_hooks, step.variables, "setup request") + call_hooks(runner, step.setup_hooks, step_variables, "setup request") # log request thrift_request_print = "====== thrift request details ======\n" @@ -136,7 +136,7 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult: parsed_request_dict["params"], parsed_request_dict["method"] ) resp_obj = ThriftResponseObject(resp, parser=runner.parser) - step.variables["thrift_response"] = resp_obj + step_variables["thrift_response"] = resp_obj # log response thrift_response_print = "====== thrift response details ======\n" @@ -149,7 +149,7 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult: # teardown hooks if step.teardown_hooks: - call_hooks(runner, step.teardown_hooks, step.variables, "teardown request") + call_hooks(runner, step.teardown_hooks, step_variables, "teardown request") def log_thrift_req_resp_details(): err_msg = "\n{} THRIFT DETAILED REQUEST & RESPONSE {}\n".format( @@ -163,7 +163,7 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult: extract_mapping = resp_obj.extract(extractors) step_result.export_vars = extract_mapping - variables_mapping = step.variables + variables_mapping = step_variables variables_mapping.update(extract_mapping) # validate @@ -178,6 +178,7 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult: session_data = runner.session.data session_data.success = step_result.success session_data.validators = resp_obj.validation_results + # save step data step_result.data = session_data step_result.elapsed = time.time() - start_time