From a2bd9c25745e51a491135546efcc3f2eb7c26102 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Wed, 25 Jul 2018 12:04:07 +0800 Subject: [PATCH] refactor: extract elapsed --- httprunner/response.py | 12 +++++++++--- tests/test_response.py | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/httprunner/response.py b/httprunner/response.py index a36cbb35..fb434663 100644 --- a/httprunner/response.py +++ b/httprunner/response.py @@ -99,13 +99,19 @@ class ResponseObject(object): # elapsed elif top_query == "elapsed": - if sub_query in ["days", "seconds", "microseconds"]: + available_attributes = u"available attributes: days, seconds, microseconds, total_seconds" + if not sub_query: + err_msg = u"ParamsError: elapsed is datetime.timedelta instance, attribute should also be specified!\n" + err_msg += available_attributes + logger.log_error(err_msg) + raise exceptions.ParamsError(err_msg) + elif sub_query in ["days", "seconds", "microseconds"]: return getattr(self.elapsed, sub_query) elif sub_query == "total_seconds": return self.elapsed.total_seconds() else: - err_msg = "{}: {} is not valid timedelta attribute.\n".format(field, sub_query) - err_msg += "elapsed only support attributes: days, seconds, microseconds, total_seconds.\n" + err_msg = "ParamsError: {} is not valid datetime.timedelta attribute.\n".format(sub_query) + err_msg += available_attributes logger.log_error(err_msg) raise exceptions.ParamsError(err_msg) diff --git a/tests/test_response.py b/tests/test_response.py index 963acc81..efdbd56b 100644 --- a/tests/test_response.py +++ b/tests/test_response.py @@ -84,6 +84,47 @@ class TestResponse(ApiServerUnittest): with self.assertRaises(exceptions.ParamsError): resp_obj.extract_response(extract_binds_list) + def test_extract_response_elapsed(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_elapsed": "elapsed"} + ] + with self.assertRaises(exceptions.ParamsError): + resp_obj.extract_response(extract_binds_list) + + extract_binds_list = [ + {"resp_elapsed_microseconds": "elapsed.microseconds"}, + {"resp_elapsed_seconds": "elapsed.seconds"}, + {"resp_elapsed_days": "elapsed.days"}, + {"resp_elapsed_total_seconds": "elapsed.total_seconds"} + ] + extract_binds_dict = resp_obj.extract_response(extract_binds_list) + self.assertGreater(extract_binds_dict["resp_elapsed_microseconds"], 1000) + self.assertEqual(extract_binds_dict["resp_elapsed_seconds"], 0) + self.assertEqual(extract_binds_dict["resp_elapsed_days"], 0) + self.assertGreater(extract_binds_dict["resp_elapsed_total_seconds"], 0) + + extract_binds_list = [ + {"resp_elapsed": "elapsed.years"} + ] + 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",