Files
httprunner/ate/utils.py

61 lines
1.8 KiB
Python

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