import json import yaml import os.path from ate.exception import ParamsError def load_yaml_file(yaml_file): with open(yaml_file, 'r+') as stream: return yaml.load(stream) def load_json_file(json_file): with open(json_file) as data_file: return json.load(data_file) def load_testcases(testcase_file_path): file_suffix = os.path.splitext(testcase_file_path)[1] if file_suffix == '.json': return load_json_file(testcase_file_path) elif file_suffix in ['.yaml', '.yml']: return load_yaml_file(testcase_file_path) else: # '' or other suffix raise ParamsError("Bad testcase file name!") def parse_response_object(resp_obj): try: resp_body = resp_obj.json() except ValueError: resp_body = resp_obj.text return { 'status_code': resp_obj.status_code, 'headers': resp_obj.headers, 'body': resp_body } def diff_response(resp_obj, expected_resp_json): diff_content = {} resp_info = parse_response_object(resp_obj) expected_status_code = expected_resp_json.get('status_code', 200) if resp_info['status_code'] != int(expected_status_code): diff_content['status_code'] = { 'value': resp_info['status_code'], 'expected': expected_status_code } expected_headers = expected_resp_json.get('headers', {}) for header_key, expected_header_value in expected_headers.items(): header_value = resp_info['headers'].get(header_key, None) if str(header_value) != str(expected_header_value): if 'headers' not in diff_content: diff_content['headers'] = {} diff_content['headers'][header_key] = { 'value': header_value, 'expected': str(expected_header_value) } return diff_content