From 5ee8caec42c7080314fecaf1a6b68c0d619e434a Mon Sep 17 00:00:00 2001 From: debugtalk Date: Thu, 30 Jul 2020 10:56:38 +0800 Subject: [PATCH 1/5] change: override variables strategy, step variables > extracted variables from previous steps --- docs/CHANGELOG.md | 6 ++++++ httprunner/make.py | 6 ++---- httprunner/runner.py | 16 ++++++++-------- httprunner/utils.py | 16 +++++++--------- tests/utils_test.py | 4 ++-- 5 files changed, 25 insertions(+), 23 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 9b7327b8a..85d9a08b5 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,11 @@ # Release History +## 3.1.4 (2020-07-30) + +**Changed** + +- change: override variables strategy, step variables > extracted variables from previous steps + ## 3.1.3 (2020-07-06) **Added** diff --git a/httprunner/make.py b/httprunner/make.py index 4ecfa8cb7..b6726712d 100644 --- a/httprunner/make.py +++ b/httprunner/make.py @@ -24,7 +24,7 @@ convert_relative_project_root_dir, ) from httprunner.response import uniform_validator -from httprunner.utils import override_config_variables, is_support_multiprocessing +from httprunner.utils import merge_variables, is_support_multiprocessing """ cache converted pytest files, avoid duplicate making """ @@ -485,9 +485,7 @@ def make_testsuite(testsuite: Dict) -> NoReturn: testcase_variables = convert_variables( testcase.get("variables", {}), testcase_path ) - testcase_variables = override_config_variables( - testcase_variables, testsuite_variables - ) + testcase_variables = merge_variables(testcase_variables, testsuite_variables) # testsuite testcase variables > testcase config variables testcase_dict["config"]["variables"] = convert_variables( testcase_dict["config"].get("variables", {}), testcase_path diff --git a/httprunner/runner.py b/httprunner/runner.py index 64abf6907..edcfaae59 100644 --- a/httprunner/runner.py +++ b/httprunner/runner.py @@ -21,7 +21,7 @@ from httprunner.parser import build_url, parse_data, parse_variables_mapping from httprunner.response import ResponseObject from httprunner.testcase import Config, Step -from httprunner.utils import override_config_variables +from httprunner.utils import merge_variables from httprunner.models import ( TConfig, TStep, @@ -335,17 +335,16 @@ def run_testcase(self, testcase: TestCase) -> "HttpRunner": self.__start_at = time.time() self.__step_datas: List[StepData] = [] self.__session = self.__session or HttpSession() - self.__session_variables = {} + # save extracted variables of teststeps + extracted_variables: VariablesMapping = {} # run teststeps for step in self.__teststeps: # override variables - # session variables (extracted from pre step) > step variables - step.variables.update(self.__session_variables) + # step variables > extracted variables from previous steps + step.variables = merge_variables(step.variables, extracted_variables) # step variables > testcase config variables - step.variables = override_config_variables( - step.variables, self.__config.variables - ) + step.variables = merge_variables(step.variables, self.__config.variables) # parse variables step.variables = parse_variables_mapping( @@ -360,8 +359,9 @@ def run_testcase(self, testcase: TestCase) -> "HttpRunner": extract_mapping = self.__run_step(step) # save extracted variables to session variables - self.__session_variables.update(extract_mapping) + extracted_variables.update(extract_mapping) + self.__session_variables.update(extract_mapping) self.__duration = time.time() - self.__start_at return self diff --git a/httprunner/utils.py b/httprunner/utils.py index eeb7e0a00..277cb81bb 100644 --- a/httprunner/utils.py +++ b/httprunner/utils.py @@ -193,15 +193,13 @@ def default(self, obj): return repr(obj) -def override_config_variables( - step_variables: VariablesMapping, config_variables: VariablesMapping +def merge_variables( + variables: VariablesMapping, variables_to_be_overridden: VariablesMapping ) -> VariablesMapping: - """ override variables: - testcase step variables > testcase config variables - testsuite testcase variables > testsuite config variables + """ merge two variables mapping, the first variables have higher priority """ step_new_variables = {} - for key, value in step_variables.items(): + for key, value in variables.items(): if f"${key}" == value or "${" + key + "}" == value: # e.g. {"base_url": "$base_url"} # or {"base_url": "${base_url}"} @@ -209,9 +207,9 @@ def override_config_variables( step_new_variables[key] = value - variables = copy.deepcopy(config_variables) - variables.update(step_new_variables) - return variables + merged_variables = copy.deepcopy(variables_to_be_overridden) + merged_variables.update(step_new_variables) + return merged_variables def is_support_multiprocessing() -> bool: diff --git a/tests/utils_test.py b/tests/utils_test.py index 444c4f3b8..b03d7162f 100644 --- a/tests/utils_test.py +++ b/tests/utils_test.py @@ -6,7 +6,7 @@ from httprunner import loader, utils from httprunner.utils import ( ExtendJSONEncoder, - override_config_variables, + merge_variables, ) @@ -122,7 +122,7 @@ def test_override_config_variables(self): step_variables = {"base_url": "$base_url", "foo1": "bar1"} config_variables = {"base_url": "https://httpbin.org", "foo1": "bar111"} self.assertEqual( - override_config_variables(step_variables, config_variables), + merge_variables(step_variables, config_variables), {"base_url": "https://httpbin.org", "foo1": "bar1"}, ) From 9c78e7059538c5bf261ea7d389ee513004dd2976 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Thu, 30 Jul 2020 11:01:18 +0800 Subject: [PATCH 2/5] bump version 3.1.4 --- docs/CHANGELOG.md | 5 ++ examples/httpbin/basic_test.py | 2 +- examples/httpbin/hooks_test.py | 2 +- examples/httpbin/load_image_test.py | 2 +- examples/httpbin/upload_test.py | 2 +- examples/httpbin/validate_test.py | 2 +- examples/postman_echo/conftest.py | 64 +++++++++++++++++++ .../request_with_functions_test.py | 2 +- .../request_with_testcase_reference_test.py | 2 +- .../request_methods/hardcode_test.py | 2 +- .../request_with_functions_test.py | 2 +- .../request_with_parameters_test.py | 2 +- .../request_with_testcase_reference_test.py | 2 +- .../request_with_variables_test.py | 4 +- .../validate_with_functions_test.py | 2 +- .../validate_with_variables_test.py | 2 +- httprunner/__init__.py | 2 +- pyproject.toml | 2 +- 18 files changed, 86 insertions(+), 17 deletions(-) create mode 100644 examples/postman_echo/conftest.py diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 85d9a08b5..e375d3841 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,6 +6,11 @@ - change: override variables strategy, step variables > extracted variables from previous steps +**Fixed** + +- fix: parameters feature with custom functions +- fix: request json field with variable reference + ## 3.1.3 (2020-07-06) **Added** diff --git a/examples/httpbin/basic_test.py b/examples/httpbin/basic_test.py index 78a39befc..5565c15ef 100644 --- a/examples/httpbin/basic_test.py +++ b/examples/httpbin/basic_test.py @@ -1,4 +1,4 @@ -# NOTE: Generated By HttpRunner v3.1.3 +# NOTE: Generated By HttpRunner v3.1.4 # FROM: basic.yml diff --git a/examples/httpbin/hooks_test.py b/examples/httpbin/hooks_test.py index 6ec448e91..832b3b17d 100644 --- a/examples/httpbin/hooks_test.py +++ b/examples/httpbin/hooks_test.py @@ -1,4 +1,4 @@ -# NOTE: Generated By HttpRunner v3.1.3 +# NOTE: Generated By HttpRunner v3.1.4 # FROM: hooks.yml diff --git a/examples/httpbin/load_image_test.py b/examples/httpbin/load_image_test.py index f27857706..61b05f3fd 100644 --- a/examples/httpbin/load_image_test.py +++ b/examples/httpbin/load_image_test.py @@ -1,4 +1,4 @@ -# NOTE: Generated By HttpRunner v3.1.3 +# NOTE: Generated By HttpRunner v3.1.4 # FROM: load_image.yml diff --git a/examples/httpbin/upload_test.py b/examples/httpbin/upload_test.py index 0d4ccd891..134a5575a 100644 --- a/examples/httpbin/upload_test.py +++ b/examples/httpbin/upload_test.py @@ -1,4 +1,4 @@ -# NOTE: Generated By HttpRunner v3.1.3 +# NOTE: Generated By HttpRunner v3.1.4 # FROM: upload.yml diff --git a/examples/httpbin/validate_test.py b/examples/httpbin/validate_test.py index 9de43c702..87b16aa74 100644 --- a/examples/httpbin/validate_test.py +++ b/examples/httpbin/validate_test.py @@ -1,4 +1,4 @@ -# NOTE: Generated By HttpRunner v3.1.3 +# NOTE: Generated By HttpRunner v3.1.4 # FROM: validate.yml diff --git a/examples/postman_echo/conftest.py b/examples/postman_echo/conftest.py new file mode 100644 index 000000000..a62dfed3f --- /dev/null +++ b/examples/postman_echo/conftest.py @@ -0,0 +1,64 @@ +# NOTICE: Generated By HttpRunner. +import json +import os +import time + +import pytest +from loguru import logger + +from httprunner.utils import get_platform, ExtendJSONEncoder + + +@pytest.fixture(scope="session", autouse=True) +def session_fixture(request): + """setup and teardown each task""" + logger.info(f"start running testcases ...") + + start_at = time.time() + + yield + + logger.info(f"task finished, generate task summary for --save-tests") + + summary = { + "success": True, + "stat": { + "testcases": {"total": 0, "success": 0, "fail": 0}, + "teststeps": {"total": 0, "failures": 0, "successes": 0}, + }, + "time": {"start_at": start_at, "duration": time.time() - start_at}, + "platform": get_platform(), + "details": [], + } + + for item in request.node.items: + testcase_summary = item.instance.get_summary() + summary["success"] &= testcase_summary.success + + summary["stat"]["testcases"]["total"] += 1 + summary["stat"]["teststeps"]["total"] += len(testcase_summary.step_datas) + if testcase_summary.success: + summary["stat"]["testcases"]["success"] += 1 + summary["stat"]["teststeps"]["successes"] += len( + testcase_summary.step_datas + ) + else: + summary["stat"]["testcases"]["fail"] += 1 + summary["stat"]["teststeps"]["successes"] += ( + len(testcase_summary.step_datas) - 1 + ) + summary["stat"]["teststeps"]["failures"] += 1 + + testcase_summary_json = testcase_summary.dict() + testcase_summary_json["records"] = testcase_summary_json.pop("step_datas") + summary["details"].append(testcase_summary_json) + + summary_path = "/Users/debugtalk/MyProjects/HttpRunner-dev/HttpRunner/examples/postman_echo/logs/request_methods/hardcode.summary.json" + summary_dir = os.path.dirname(summary_path) + os.makedirs(summary_dir, exist_ok=True) + + with open(summary_path, "w", encoding="utf-8") as f: + json.dump(summary, f, indent=4, ensure_ascii=False, cls=ExtendJSONEncoder) + + logger.info(f"generated task summary: {summary_path}") + diff --git a/examples/postman_echo/request_methods/demo_testsuite_yml/request_with_functions_test.py b/examples/postman_echo/request_methods/demo_testsuite_yml/request_with_functions_test.py index df68aa1c7..d80c6841b 100644 --- a/examples/postman_echo/request_methods/demo_testsuite_yml/request_with_functions_test.py +++ b/examples/postman_echo/request_methods/demo_testsuite_yml/request_with_functions_test.py @@ -1,4 +1,4 @@ -# NOTE: Generated By HttpRunner v3.1.3 +# NOTE: Generated By HttpRunner v3.1.4 # FROM: request_methods/request_with_functions.yml diff --git a/examples/postman_echo/request_methods/demo_testsuite_yml/request_with_testcase_reference_test.py b/examples/postman_echo/request_methods/demo_testsuite_yml/request_with_testcase_reference_test.py index 99b6e3a3e..39100868f 100644 --- a/examples/postman_echo/request_methods/demo_testsuite_yml/request_with_testcase_reference_test.py +++ b/examples/postman_echo/request_methods/demo_testsuite_yml/request_with_testcase_reference_test.py @@ -1,4 +1,4 @@ -# NOTE: Generated By HttpRunner v3.1.3 +# NOTE: Generated By HttpRunner v3.1.4 # FROM: request_methods/request_with_testcase_reference.yml diff --git a/examples/postman_echo/request_methods/hardcode_test.py b/examples/postman_echo/request_methods/hardcode_test.py index 324d52024..8f02c048c 100644 --- a/examples/postman_echo/request_methods/hardcode_test.py +++ b/examples/postman_echo/request_methods/hardcode_test.py @@ -1,4 +1,4 @@ -# NOTE: Generated By HttpRunner v3.1.3 +# NOTE: Generated By HttpRunner v3.1.4 # FROM: request_methods/hardcode.yml diff --git a/examples/postman_echo/request_methods/request_with_functions_test.py b/examples/postman_echo/request_methods/request_with_functions_test.py index 4bbeeb6ec..6ab4cca95 100644 --- a/examples/postman_echo/request_methods/request_with_functions_test.py +++ b/examples/postman_echo/request_methods/request_with_functions_test.py @@ -1,4 +1,4 @@ -# NOTE: Generated By HttpRunner v3.1.3 +# NOTE: Generated By HttpRunner v3.1.4 # FROM: request_methods/request_with_functions.yml diff --git a/examples/postman_echo/request_methods/request_with_parameters_test.py b/examples/postman_echo/request_methods/request_with_parameters_test.py index 5f90c15dc..4be2ee316 100644 --- a/examples/postman_echo/request_methods/request_with_parameters_test.py +++ b/examples/postman_echo/request_methods/request_with_parameters_test.py @@ -1,4 +1,4 @@ -# NOTE: Generated By HttpRunner v3.1.3 +# NOTE: Generated By HttpRunner v3.1.4 # FROM: request_methods/request_with_parameters.yml diff --git a/examples/postman_echo/request_methods/request_with_testcase_reference_test.py b/examples/postman_echo/request_methods/request_with_testcase_reference_test.py index e005713b2..3cd224300 100644 --- a/examples/postman_echo/request_methods/request_with_testcase_reference_test.py +++ b/examples/postman_echo/request_methods/request_with_testcase_reference_test.py @@ -1,4 +1,4 @@ -# NOTE: Generated By HttpRunner v3.1.3 +# NOTE: Generated By HttpRunner v3.1.4 # FROM: request_methods/request_with_testcase_reference.yml diff --git a/examples/postman_echo/request_methods/request_with_variables_test.py b/examples/postman_echo/request_methods/request_with_variables_test.py index 470abfe9e..63a82d748 100644 --- a/examples/postman_echo/request_methods/request_with_variables_test.py +++ b/examples/postman_echo/request_methods/request_with_variables_test.py @@ -1,5 +1,5 @@ -# NOTE: Generated By HttpRunner v3.1.3 -# FROM: request_methods\request_with_variables.yml +# NOTE: Generated By HttpRunner v3.1.4 +# FROM: request_methods/request_with_variables.yml from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase diff --git a/examples/postman_echo/request_methods/validate_with_functions_test.py b/examples/postman_echo/request_methods/validate_with_functions_test.py index 1a6ca71dc..c7524ca9b 100644 --- a/examples/postman_echo/request_methods/validate_with_functions_test.py +++ b/examples/postman_echo/request_methods/validate_with_functions_test.py @@ -1,4 +1,4 @@ -# NOTE: Generated By HttpRunner v3.1.3 +# NOTE: Generated By HttpRunner v3.1.4 # FROM: request_methods/validate_with_functions.yml diff --git a/examples/postman_echo/request_methods/validate_with_variables_test.py b/examples/postman_echo/request_methods/validate_with_variables_test.py index 6045dc477..98a73e78e 100644 --- a/examples/postman_echo/request_methods/validate_with_variables_test.py +++ b/examples/postman_echo/request_methods/validate_with_variables_test.py @@ -1,4 +1,4 @@ -# NOTE: Generated By HttpRunner v3.1.3 +# NOTE: Generated By HttpRunner v3.1.4 # FROM: request_methods/validate_with_variables.yml diff --git a/httprunner/__init__.py b/httprunner/__init__.py index 2fd953020..97e4ba1fa 100644 --- a/httprunner/__init__.py +++ b/httprunner/__init__.py @@ -1,4 +1,4 @@ -__version__ = "3.1.3" +__version__ = "3.1.4" __description__ = "One-stop solution for HTTP(S) testing." # import firstly for monkey patch if needed diff --git a/pyproject.toml b/pyproject.toml index e207aa774..bdf287701 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "httprunner" -version = "3.1.3" +version = "3.1.4" description = "One-stop solution for HTTP(S) testing." license = "Apache-2.0" readme = "README.md" From 0d6924fd862322bb2e4f476b677889e9b82c2749 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Thu, 30 Jul 2020 11:28:32 +0800 Subject: [PATCH 3/5] fix: save extracted variables to session variables --- .../demo_testsuite_yml/request_with_functions_test.py | 2 +- .../postman_echo/request_methods/request_with_functions.yml | 2 +- .../postman_echo/request_methods/request_with_functions_test.py | 2 +- .../postman_echo/request_methods/request_with_variables.yml | 2 +- .../postman_echo/request_methods/request_with_variables_test.py | 2 +- httprunner/runner.py | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/postman_echo/request_methods/demo_testsuite_yml/request_with_functions_test.py b/examples/postman_echo/request_methods/demo_testsuite_yml/request_with_functions_test.py index d80c6841b..a6ca72464 100644 --- a/examples/postman_echo/request_methods/demo_testsuite_yml/request_with_functions_test.py +++ b/examples/postman_echo/request_methods/demo_testsuite_yml/request_with_functions_test.py @@ -57,7 +57,7 @@ class TestCaseRequestWithFunctions(HttpRunner): .assert_equal("status_code", 200) .assert_equal( "body.data", - "This is expected to be sent back as part of response body: bar12-$expect_foo2-bar21.", + "This is expected to be sent back as part of response body: bar12-$expect_foo2-bar32.", ) .assert_type_match("body.json", "None") .assert_type_match("body.json", "NoneType") diff --git a/examples/postman_echo/request_methods/request_with_functions.yml b/examples/postman_echo/request_methods/request_with_functions.yml index 36ab12b5d..98007e795 100644 --- a/examples/postman_echo/request_methods/request_with_functions.yml +++ b/examples/postman_echo/request_methods/request_with_functions.yml @@ -47,7 +47,7 @@ teststeps: data: "This is expected to be sent back as part of response body: $foo1-$foo2-$foo3." validate: - eq: ["status_code", 200] - - eq: ["body.data", "This is expected to be sent back as part of response body: bar12-$expect_foo2-bar21."] + - eq: ["body.data", "This is expected to be sent back as part of response body: bar12-$expect_foo2-bar32."] - type_match: ["body.json", None] - type_match: ["body.json", NoneType] - type_match: ["body.json", null] diff --git a/examples/postman_echo/request_methods/request_with_functions_test.py b/examples/postman_echo/request_methods/request_with_functions_test.py index 6ab4cca95..9c71f8e7a 100644 --- a/examples/postman_echo/request_methods/request_with_functions_test.py +++ b/examples/postman_echo/request_methods/request_with_functions_test.py @@ -57,7 +57,7 @@ class TestCaseRequestWithFunctions(HttpRunner): .assert_equal("status_code", 200) .assert_equal( "body.data", - "This is expected to be sent back as part of response body: bar12-$expect_foo2-bar21.", + "This is expected to be sent back as part of response body: bar12-$expect_foo2-bar32.", ) .assert_type_match("body.json", "None") .assert_type_match("body.json", "NoneType") diff --git a/examples/postman_echo/request_methods/request_with_variables.yml b/examples/postman_echo/request_methods/request_with_variables.yml index 14196a5f4..34c84778f 100644 --- a/examples/postman_echo/request_methods/request_with_variables.yml +++ b/examples/postman_echo/request_methods/request_with_variables.yml @@ -38,7 +38,7 @@ teststeps: data: "This is expected to be sent back as part of response body: $foo1-$foo2-$foo3." validate: - eq: ["status_code", 200] - - eq: ["body.data", "This is expected to be sent back as part of response body: bar12-testcase_config_bar2-bar21."] + - eq: ["body.data", "This is expected to be sent back as part of response body: bar12-testcase_config_bar2-bar32."] - name: post form data variables: diff --git a/examples/postman_echo/request_methods/request_with_variables_test.py b/examples/postman_echo/request_methods/request_with_variables_test.py index 63a82d748..d3e7f954a 100644 --- a/examples/postman_echo/request_methods/request_with_variables_test.py +++ b/examples/postman_echo/request_methods/request_with_variables_test.py @@ -42,7 +42,7 @@ class TestCaseRequestWithVariables(HttpRunner): .assert_equal("status_code", 200) .assert_equal( "body.data", - "This is expected to be sent back as part of response body: bar12-testcase_config_bar2-bar21.", + "This is expected to be sent back as part of response body: bar12-testcase_config_bar2-bar32.", ) ), Step( diff --git a/httprunner/runner.py b/httprunner/runner.py index edcfaae59..00a46f53b 100644 --- a/httprunner/runner.py +++ b/httprunner/runner.py @@ -361,7 +361,7 @@ def run_testcase(self, testcase: TestCase) -> "HttpRunner": # save extracted variables to session variables extracted_variables.update(extract_mapping) - self.__session_variables.update(extract_mapping) + self.__session_variables.update(extracted_variables) self.__duration = time.time() - self.__start_at return self From bde543ce8daccc4221efac2d31cbe38a614277e1 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Thu, 30 Jul 2020 11:40:32 +0800 Subject: [PATCH 4/5] fix: pickle BufferedReader TypeError in upload feature --- docs/CHANGELOG.md | 1 + httprunner/utils.py | 2 +- tests/make_test.py | 7 ++++++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index e375d3841..80c55d9ed 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -10,6 +10,7 @@ - fix: parameters feature with custom functions - fix: request json field with variable reference +- fix: pickle BufferedReader TypeError in upload feature ## 3.1.3 (2020-07-06) diff --git a/httprunner/utils.py b/httprunner/utils.py index 277cb81bb..feb10283f 100644 --- a/httprunner/utils.py +++ b/httprunner/utils.py @@ -207,7 +207,7 @@ def merge_variables( step_new_variables[key] = value - merged_variables = copy.deepcopy(variables_to_be_overridden) + merged_variables = copy.copy(variables_to_be_overridden) merged_variables.update(step_new_variables) return merged_variables diff --git a/tests/make_test.py b/tests/make_test.py index 7cf56e3d8..934feadbe 100644 --- a/tests/make_test.py +++ b/tests/make_test.py @@ -218,7 +218,12 @@ def test_make_teststep_chain_style(self): def test_make_requests_with_json_chain_style(self): step = { "name": "get with params", - "variables": {"foo1": "bar1", "foo2": 123, "sum_v": "${sum_two(1, 2)}","myjson":{"name": "user", "password": "123456"}}, + "variables": { + "foo1": "bar1", + "foo2": 123, + "sum_v": "${sum_two(1, 2)}", + "myjson": {"name": "user", "password": "123456"}, + }, "request": { "method": "GET", "url": "/get", From 0dbd8c558fceeaedbeacffc13cd47ec87326988e Mon Sep 17 00:00:00 2001 From: debugtalk Date: Thu, 30 Jul 2020 11:46:27 +0800 Subject: [PATCH 5/5] fix: change scaffold demo with overriding variables strategy changes --- httprunner/scaffold.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/httprunner/scaffold.py b/httprunner/scaffold.py index 3f42f32d8..c56c40211 100644 --- a/httprunner/scaffold.py +++ b/httprunner/scaffold.py @@ -103,7 +103,7 @@ def create_file(path, file_content=""): data: "This is expected to be sent back as part of response body: $foo1-$foo2-$foo3." validate: - eq: ["status_code", 200] - - eq: ["body.data", "This is expected to be sent back as part of response body: bar12-$expect_foo2-bar21."] + - eq: ["body.data", "This is expected to be sent back as part of response body: bar12-$expect_foo2-bar32."] - name: post form data variables: