refactor: extract field

This commit is contained in:
debugtalk
2018-07-25 19:13:56 +08:00
parent dee51b6682
commit 9aeb64c5a0
3 changed files with 23 additions and 28 deletions

View File

@@ -44,11 +44,10 @@ class ResponseObject(object):
""" """
matched = re.search(field, self.text) matched = re.search(field, self.text)
if not matched: if not matched:
err_msg = u"Failed to extract data with regex!\n" err_msg = u"ExtractFailure: Failed to extract data with regex! => {}\n".format(field)
err_msg += u"response content: {}\n".format(self.content) err_msg += u"response content: {}\n".format(self.content)
err_msg += u"regex: {}\n".format(field)
logger.log_error(err_msg) logger.log_error(err_msg)
raise exceptions.ParamsError(err_msg) raise exceptions.ExtractFailure(err_msg)
return matched.group(1) return matched.group(1)
@@ -91,10 +90,10 @@ class ResponseObject(object):
try: try:
return cookies[sub_query] return cookies[sub_query]
except KeyError: except KeyError:
err_msg = u"ParamsError: Failed to extract cookie! => {}\n".format(field) err_msg = u"ExtractFailure: Failed to extract cookie! => {}\n".format(field)
err_msg += u"response cookies: {}\n".format(cookies) err_msg += u"response cookies: {}\n".format(cookies)
logger.log_error(err_msg) logger.log_error(err_msg)
raise exceptions.ParamsError(err_msg) raise exceptions.ExtractFailure(err_msg)
# elapsed # elapsed
elif top_query == "elapsed": elif top_query == "elapsed":
@@ -124,10 +123,10 @@ class ResponseObject(object):
try: try:
return headers[sub_query] return headers[sub_query]
except KeyError: except KeyError:
err_msg = u"ParamsError: Failed to extract header! => {}\n".format(field) err_msg = u"ExtractFailure: Failed to extract header! => {}\n".format(field)
err_msg += u"response headers: {}\n".format(headers) err_msg += u"response headers: {}\n".format(headers)
logger.log_error(err_msg) logger.log_error(err_msg)
raise exceptions.ParamsError(err_msg) raise exceptions.ExtractFailure(err_msg)
# response body # response body
elif top_query in ["content", "text", "json"]: elif top_query in ["content", "text", "json"]:
@@ -148,10 +147,10 @@ class ResponseObject(object):
return utils.query_json(body, sub_query) return utils.query_json(body, sub_query)
else: else:
# content = "<html>abcdefg</html>", content.xxx # content = "<html>abcdefg</html>", content.xxx
err_msg = u"ParamsError: Failed to extract attribute from response body! => {}\n".format(field) err_msg = u"ExtractFailure: Failed to extract attribute from response body! => {}\n".format(field)
err_msg += u"response body: {}\n".format(body) err_msg += u"response body: {}\n".format(body)
logger.log_error(err_msg) logger.log_error(err_msg)
raise exceptions.ParamsError(err_msg) raise exceptions.ExtractFailure(err_msg)
# others # others
else: else:
@@ -163,21 +162,20 @@ class ResponseObject(object):
def extract_field(self, field): def extract_field(self, field):
""" extract value from requests.Response. """ extract value from requests.Response.
""" """
if not isinstance(field, basestring):
err_msg = u"ParamsError: Invalid extractor! => {}\n".format(field)
logger.log_error(err_msg)
raise exceptions.ParamsError(err_msg)
msg = "extract: {}".format(field) msg = "extract: {}".format(field)
try: if text_extractor_regexp_compile.match(field):
if text_extractor_regexp_compile.match(field): value = self._extract_field_with_regex(field)
value = self._extract_field_with_regex(field) else:
else: value = self._extract_field_with_delimiter(field)
value = self._extract_field_with_delimiter(field)
msg += "\t=> {}".format(value) msg += "\t=> {}".format(value)
logger.log_debug(msg) logger.log_debug(msg)
# TODO: remove except here
except (TypeError):
logger.log_error("failed to extract field: {}".format(field))
raise
return value return value
@@ -200,9 +198,6 @@ class ResponseObject(object):
extract_binds_order_dict = utils.convert_to_order_dict(extractors) extract_binds_order_dict = utils.convert_to_order_dict(extractors)
for key, field in extract_binds_order_dict.items(): for key, field in extract_binds_order_dict.items():
if not isinstance(field, basestring):
raise exceptions.ParamsError("invalid extractors in testcase!")
extracted_variables_mapping[key] = self.extract_field(field) extracted_variables_mapping[key] = self.extract_field(field)
return extracted_variables_mapping return extracted_variables_mapping

View File

@@ -191,7 +191,7 @@ def query_json(json_content, query, delimiter='.'):
@return queried result @return queried result
""" """
raise_flag = False raise_flag = False
response_body = u"from: {}\n".format(json_content) response_body = u"response body: {}\n".format(json_content)
try: try:
for key in query.split(delimiter): for key in query.split(delimiter):
if isinstance(json_content, (list, str)): if isinstance(json_content, (list, str)):

View File

@@ -101,7 +101,7 @@ class TestResponse(ApiServerUnittest):
extract_binds_list = [ extract_binds_list = [
{"resp_cookies": "cookies.xx"} {"resp_cookies": "cookies.xx"}
] ]
with self.assertRaises(exceptions.ParamsError): with self.assertRaises(exceptions.ExtractFailure):
resp_obj.extract_response(extract_binds_list) resp_obj.extract_response(extract_binds_list)
def test_extract_response_elapsed(self): def test_extract_response_elapsed(self):
@@ -162,7 +162,7 @@ class TestResponse(ApiServerUnittest):
extract_binds_list = [ extract_binds_list = [
{"resp_headers_xxx": "headers.xxx"} {"resp_headers_xxx": "headers.xxx"}
] ]
with self.assertRaises(exceptions.ParamsError): with self.assertRaises(exceptions.ExtractFailure):
resp_obj.extract_response(extract_binds_list) resp_obj.extract_response(extract_binds_list)
def test_extract_response_body_json(self): def test_extract_response_body_json(self):
@@ -265,7 +265,7 @@ class TestResponse(ApiServerUnittest):
extract_binds_list = [ extract_binds_list = [
{"resp_content": "content.xxx"} {"resp_content": "content.xxx"}
] ]
with self.assertRaises(exceptions.ParamsError): with self.assertRaises(exceptions.ExtractFailure):
resp_obj.extract_response(extract_binds_list) resp_obj.extract_response(extract_binds_list)
def test_extract_response_others(self): def test_extract_response_others(self):