From 22632d711003c561974b0d32a39077fc26cb74bd Mon Sep 17 00:00:00 2001 From: debugtalk Date: Wed, 25 Jul 2018 11:25:12 +0800 Subject: [PATCH] refactor: extract status_code --- httprunner/response.py | 15 ++++++++++++++- tests/test_response.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/httprunner/response.py b/httprunner/response.py index 6065cece..fc9c36b8 100644 --- a/httprunner/response.py +++ b/httprunner/response.py @@ -72,7 +72,18 @@ class ResponseObject(object): top_query = field sub_query = None - if top_query == "cookies": + # status_code + if top_query == "status_code": + if sub_query: + # status_code.XX + err_msg = u"ParamsError: {}\n".format(field) + logger.log_error(err_msg) + raise exceptions.ParamsError(err_msg) + + return self.status_code + + # cookies + elif top_query == "cookies": cookies = self.cookies try: return cookies[sub_query] @@ -82,6 +93,8 @@ class ResponseObject(object): err_msg += u"attribute: {}".format(sub_query) logger.log_error(err_msg) raise exceptions.ParamsError(err_msg) + + # elapsed elif top_query == "elapsed": if sub_query in ["days", "seconds", "microseconds"]: return getattr(self.elapsed, sub_query) diff --git a/tests/test_response.py b/tests/test_response.py index 9a3948ad..da28be27 100644 --- a/tests/test_response.py +++ b/tests/test_response.py @@ -27,6 +27,39 @@ class TestResponse(ApiServerUnittest): resp_obj = response.ResponseObject(resp) self.assertEqual(bytes, type(resp_obj.content)) + def test_extract_response_status_code(self): + resp = requests.post( + url="http://127.0.0.1:3458/anything", + json={ + 'success': False, + "person": { + "name": { + "first_name": "Leo", + "last_name": "Lee", + }, + "age": 29, + "cities": ["Guangzhou", "Shenzhen"] + } + } + ) + resp_obj = response.ResponseObject(resp) + + extract_binds_list = [ + {"resp_status_code": "status_code"} + ] + extract_binds_dict = resp_obj.extract_response(extract_binds_list) + + self.assertEqual( + extract_binds_dict["resp_status_code"], + 200 + ) + + extract_binds_list = [ + {"resp_status_code": "status_code.xx"} + ] + with self.assertRaises(exceptions.ParamsError): + resp_obj.extract_response(extract_binds_list) + def test_extract_response_json(self): resp = requests.post( url="http://127.0.0.1:3458/anything",