From 297dabca602c28a60cb4d451a13bcdd56bf92851 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Wed, 2 Aug 2017 13:33:07 +0800 Subject: [PATCH] optimize response validation --- ate/exception.py | 6 ++++++ ate/response.py | 33 +++++++++++++++++++++------------ tests/test_response.py | 2 +- tests/test_runner.py | 2 +- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/ate/exception.py b/ate/exception.py index d6f765b0..56768985 100644 --- a/ate/exception.py +++ b/ate/exception.py @@ -5,3 +5,9 @@ class MyBaseError(BaseException): class ParamsError(MyBaseError): pass + +class ParseResponseError(MyBaseError): + pass + +class ValidationError(MyBaseError): + pass diff --git a/ate/response.py b/ate/response.py index f7ba8dc7..38570388 100644 --- a/ate/response.py +++ b/ate/response.py @@ -50,7 +50,7 @@ class ResponseObject(object): return json_content except AttributeError: - raise exception.ParamsError("invalid extract_binds!") + raise exception.ParseResponseError("failed to extract bind variable in response!") def extract_response(self, extract_binds): """ extract content from requests.Response @@ -68,7 +68,7 @@ class ResponseObject(object): for extract_bind in extract_binds: for key, field in extract_bind.items(): if not isinstance(field, utils.string_type): - raise exception.ParamsError("invalid extract_binds!") + raise exception.ParamsError("invalid extract_binds in testcase extract_binds!") extracted_variables_mapping_list.append( {key: self.extract_field(field)} @@ -99,19 +99,28 @@ class ResponseObject(object): for validator_dict in validators: - if "expected" not in validator_dict or "check" not in validator_dict: - raise exception.ParamsError("expected not specified in validator") + check_item = validator_dict.get("check") + if not check_item: + raise exception.ParamsError("invalid check item in testcase validators!") - validator_key = validator_dict["check"] - try: - validator_dict["value"] = variables_mapping[validator_key] - except KeyError: - validator_dict["value"] = self.extract_field(validator_key) + if "expected" not in validator_dict: + raise exception.ParamsError("expected item missed in testcase validators!") + + expected = validator_dict.get("expected") + comparator = validator_dict.get("comparator", "eq") + + if check_item in variables_mapping: + validator_dict["actual_value"] = variables_mapping[check_item] + else: + try: + validator_dict["actual_value"] = self.extract_field(check_item) + except exception.ParseResponseError: + raise exception.ParseResponseError("failed to extract check item in response!") match_expected = utils.match_expected( - validator_dict["value"], - validator_dict["expected"], - validator_dict.get("comparator", "eq") + validator_dict["actual_value"], + expected, + comparator ) if not match_expected: diff --git a/tests/test_response.py b/tests/test_response.py index 28316c17..ee1e97e3 100644 --- a/tests/test_response.py +++ b/tests/test_response.py @@ -170,7 +170,7 @@ class TestResponse(ApiServerUnittest): [ { "check": "resp_status_code", - "comparator": "eq", "expected": 201, "value": 200 + "comparator": "eq", "expected": 201, "actual_value": 200 } ] ) diff --git a/tests/test_runner.py b/tests/test_runner.py index 4ef52015..ace76de8 100644 --- a/tests/test_runner.py +++ b/tests/test_runner.py @@ -66,7 +66,7 @@ class TestRunner(ApiServerUnittest): self.assertFalse(success) self.assertEqual( diff_content_list[0], - {"check": "status_code", "comparator": "eq", "expected": 205, 'value': 200} + {"check": "status_code", "comparator": "eq", "expected": 205, 'actual_value': 200} ) def test_run_testset_hardcode(self):