From 0f0a047e5b491c645168c8ae617154031c861503 Mon Sep 17 00:00:00 2001 From: "duanchao.bill" Date: Fri, 10 Jun 2022 20:41:41 +0800 Subject: [PATCH 1/6] fix:clear step variables after step end --- httprunner/step_request.py | 1 + httprunner/step_sql_request.py | 2 ++ httprunner/step_thrift_request.py | 2 ++ 3 files changed, 5 insertions(+) diff --git a/httprunner/step_request.py b/httprunner/step_request.py index 9299cba2..9354c9fd 100644 --- a/httprunner/step_request.py +++ b/httprunner/step_request.py @@ -150,6 +150,7 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: session_data = runner.session.data session_data.success = step_result.success session_data.validators = resp_obj.validation_results + step.variables.clear() # save step data step_result.data = session_data diff --git a/httprunner/step_sql_request.py b/httprunner/step_sql_request.py index 4b6fedc0..55bf3179 100644 --- a/httprunner/step_sql_request.py +++ b/httprunner/step_sql_request.py @@ -159,6 +159,8 @@ 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 + step.variables.clear() + # 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 ea7aadf7..b2327ba7 100644 --- a/httprunner/step_thrift_request.py +++ b/httprunner/step_thrift_request.py @@ -173,6 +173,8 @@ 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 + step.variables.clear() + # save step data step_result.data = session_data step_result.elapsed = time.time() - start_time From da28cd0734869fed02a4d76b043dadf5357a07c3 Mon Sep 17 00:00:00 2001 From: "duanchao.bill" Date: Fri, 10 Jun 2022 21:23:16 +0800 Subject: [PATCH 2/6] =?UTF-8?q?fix:with=5Fvariables=E5=92=8Cextract?= =?UTF-8?q?=E8=A6=81=E4=BF=9D=E7=95=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- httprunner/step_request.py | 5 +++++ httprunner/step_sql_request.py | 2 ++ httprunner/step_thrift_request.py | 2 ++ 3 files changed, 9 insertions(+) diff --git a/httprunner/step_request.py b/httprunner/step_request.py index 9354c9fd..68b6573b 100644 --- a/httprunner/step_request.py +++ b/httprunner/step_request.py @@ -67,6 +67,8 @@ def call_hooks( def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: """run teststep: request""" + logger.info("-->step start %s" % step.variables) + step_start_variables = step.variables step_result = StepResult( name=step.name, success=False, @@ -137,6 +139,7 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: variables_mapping = step.variables variables_mapping.update(extract_mapping) + step_start_variables.update(extract_mapping) # validate validators = step.validators @@ -150,7 +153,9 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: session_data = runner.session.data session_data.success = step_result.success session_data.validators = resp_obj.validation_results + logger.info("-->step end %s" % step.variables) step.variables.clear() + step.variables = step_start_variables # save step data step_result.data = session_data diff --git a/httprunner/step_sql_request.py b/httprunner/step_sql_request.py index 55bf3179..d26d6fa6 100644 --- a/httprunner/step_sql_request.py +++ b/httprunner/step_sql_request.py @@ -44,6 +44,7 @@ def ensure_sql_ready(): def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult: """run teststep:sql request""" + step_start_variables = step.variables start_time = time.time() step_result = StepResult( @@ -160,6 +161,7 @@ def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult: session_data.success = step_result.success session_data.validators = resp_obj.validation_results step.variables.clear() + step.variables = step_start_variables # save step data step_result.data = session_data diff --git a/httprunner/step_thrift_request.py b/httprunner/step_thrift_request.py index b2327ba7..9425dfab 100644 --- a/httprunner/step_thrift_request.py +++ b/httprunner/step_thrift_request.py @@ -52,6 +52,7 @@ def ensure_thrift_ready(): def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult: """run teststep:thrift request""" + step_start_variables = step.variables start_time = time.time() step_result = StepResult( @@ -174,6 +175,7 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult: session_data.success = step_result.success session_data.validators = resp_obj.validation_results step.variables.clear() + step.variables = step_start_variables # save step data step_result.data = session_data From 30cb991aacc9236d7b51b207a695d97fdbe8dd6b Mon Sep 17 00:00:00 2001 From: "duanchao.bill" Date: Fri, 10 Jun 2022 21:33:19 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- httprunner/step_request.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/httprunner/step_request.py b/httprunner/step_request.py index 68b6573b..a30b8946 100644 --- a/httprunner/step_request.py +++ b/httprunner/step_request.py @@ -67,7 +67,8 @@ def call_hooks( def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: """run teststep: request""" - logger.info("-->step start %s" % step.variables) + step.variables = runner.merge_step_variables(step.variables) + step_start_variables = step.variables step_result = StepResult( name=step.name, @@ -75,7 +76,6 @@ 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 @@ -153,7 +153,6 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: session_data = runner.session.data session_data.success = step_result.success session_data.validators = resp_obj.validation_results - logger.info("-->step end %s" % step.variables) step.variables.clear() step.variables = step_start_variables From 6f3d8325b4adeda80e648e4b3621d0e03f795e90 Mon Sep 17 00:00:00 2001 From: "duanchao.bill" Date: Fri, 10 Jun 2022 21:36:39 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=8B=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- httprunner/step_request.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/httprunner/step_request.py b/httprunner/step_request.py index a30b8946..f872470e 100644 --- a/httprunner/step_request.py +++ b/httprunner/step_request.py @@ -67,13 +67,13 @@ def call_hooks( def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: """run teststep: request""" - step.variables = runner.merge_step_variables(step.variables) - step_start_variables = step.variables + step_result = StepResult( name=step.name, success=False, ) + step.variables = runner.merge_step_variables(step.variables) start_time = time.time() From b22f1f826af8b7087e535a3a487bbb83cdd6aae5 Mon Sep 17 00:00:00 2001 From: "duanchao.bill" Date: Mon, 13 Jun 2022 16:49:00 +0800 Subject: [PATCH 5/6] =?UTF-8?q?run=5Fstep=5Frequest=E4=B8=AD=E4=B8=8D?= =?UTF-8?q?=E6=94=B9=E5=8F=98step.variables?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- httprunner/step_request.py | 22 +++++++++------------- httprunner/step_sql_request.py | 15 ++++++--------- httprunner/step_thrift_request.py | 17 +++++++---------- 3 files changed, 22 insertions(+), 32 deletions(-) diff --git a/httprunner/step_request.py b/httprunner/step_request.py index f872470e..81f1015b 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 @@ -67,13 +68,11 @@ def call_hooks( def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: """run teststep: request""" - step_start_variables = step.variables - step_result = StepResult( name=step.name, success=False, ) - step.variables = runner.merge_step_variables(step.variables) + step_variables = runner.merge_step_variables(step.variables) start_time = time.time() @@ -82,16 +81,16 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: prepare_upload_step(step, functions) 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() @@ -104,11 +103,11 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: # request resp = runner.session.request(method, url, **parsed_request_dict) 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) @@ -134,12 +133,11 @@ 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) - step_start_variables.update(extract_mapping) # validate validators = step.validators @@ -153,8 +151,6 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: session_data = runner.session.data session_data.success = step_result.success session_data.validators = resp_obj.validation_results - step.variables.clear() - step.variables = step_start_variables # save step data step_result.data = session_data diff --git a/httprunner/step_sql_request.py b/httprunner/step_sql_request.py index d26d6fa6..b87d714d 100644 --- a/httprunner/step_sql_request.py +++ b/httprunner/step_sql_request.py @@ -44,17 +44,16 @@ def ensure_sql_ready(): def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult: """run teststep:sql request""" - step_start_variables = step.variables start_time = time.time() step_result = 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 @@ -93,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") logger.info(f"Executing SQL: {parsed_request_dict['sql']}") if step.sql_request.method == SqlMethodEnum.FETCHONE: @@ -115,11 +114,11 @@ def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult: f"step.sql_request.method {parsed_request_dict['method']} not support" ) 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) @@ -145,7 +144,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 @@ -160,8 +159,6 @@ 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 - step.variables.clear() - step.variables = step_start_variables # save step data step_result.data = session_data diff --git a/httprunner/step_thrift_request.py b/httprunner/step_thrift_request.py index 9425dfab..8e6ed253 100644 --- a/httprunner/step_thrift_request.py +++ b/httprunner/step_thrift_request.py @@ -52,17 +52,16 @@ def ensure_thrift_ready(): def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult: """run teststep:thrift request""" - step_start_variables = step.variables start_time = time.time() step_result = 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 @@ -98,7 +97,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: @@ -120,18 +119,18 @@ 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") # thrift request resp = runner.thrift_client.send_request( 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 # 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( @@ -159,7 +158,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 @@ -174,8 +173,6 @@ 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 - step.variables.clear() - step.variables = step_start_variables # save step data step_result.data = session_data From e87218099f366d9155aa62be17e8d502da7eb9d6 Mon Sep 17 00:00:00 2001 From: "duanchao.bill" Date: Mon, 13 Jun 2022 18:48:38 +0800 Subject: [PATCH 6/6] =?UTF-8?q?http=E5=8D=8F=E8=AE=AE=E5=90=8E=E7=BD=AE?= =?UTF-8?q?=E4=B8=80=E4=B8=8Bstep=5Fvariables=E7=9A=84=E8=B5=8B=E5=80=BC?= =?UTF-8?q?=EF=BC=8C=E5=9B=A0=E4=B8=BAprepare=5Fupload=5Fstep=E4=BC=9A?= =?UTF-8?q?=E7=89=B9=E6=AE=8A=E5=A4=84=E7=90=86step.variables?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- httprunner/step_request.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/httprunner/step_request.py b/httprunner/step_request.py index 81f1015b..1f827ea2 100644 --- a/httprunner/step_request.py +++ b/httprunner/step_request.py @@ -72,13 +72,13 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: name=step.name, success=False, ) - step_variables = runner.merge_step_variables(step.variables) start_time = time.time() - # 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)