handle_req_data: sort data with keys if request data is json type

This commit is contained in:
httprunner
2017-06-24 11:19:20 +08:00
parent ebed17d741
commit 8339b7f2ab
5 changed files with 24 additions and 6 deletions
+1
View File
@@ -35,3 +35,4 @@ Python `2.7`, `3.3`, `3.4`, `3.5`, and `3.6`.
- [《接口自动化测试的最佳工程实践(ApiTestEngine)》](http://debugtalk.com/post/ApiTestEngine-api-test-best-practice/) - [《接口自动化测试的最佳工程实践(ApiTestEngine)》](http://debugtalk.com/post/ApiTestEngine-api-test-best-practice/)
- [《ApiTestEngine 演化之路(0)开发未动,测试先行》](http://debugtalk.com/post/ApiTestEngine-0-setup-CI-test/) - [《ApiTestEngine 演化之路(0)开发未动,测试先行》](http://debugtalk.com/post/ApiTestEngine-0-setup-CI-test/)
- [《ApiTestEngine 演化之路(1)搭建基础框架》](http://debugtalk.com/post/ApiTestEngine-1-setup-basic-framework/)
+17
View File
@@ -17,6 +17,23 @@ def gen_md5(str_list):
authorization_str = "".join(str_list) authorization_str = "".join(str_list)
return hashlib.md5(authorization_str.encode('utf-8')).hexdigest() return hashlib.md5(authorization_str.encode('utf-8')).hexdigest()
def handle_req_data(data):
if not data:
return data
if isinstance(data, str):
# check if data in str can be converted to dict
try:
data = json.loads(data)
except ValueError:
pass
if isinstance(data, dict):
# sort data in dict with keys, then convert to str
data = json.dumps(data, sort_keys=True)
return data
def load_yaml_file(yaml_file): def load_yaml_file(yaml_file):
with open(yaml_file, 'r+') as stream: with open(yaml_file, 'r+') as stream:
return yaml.load(stream) return yaml.load(stream)
+1 -1
View File
@@ -36,7 +36,7 @@ def validate_request(func):
req_headers = request.headers req_headers = request.headers
req_authorization = req_headers['Authorization'] req_authorization = req_headers['Authorization']
random_str = req_headers['Random'] random_str = req_headers['Random']
data = request.data.decode("utf-8") data = utils.handle_req_data(request.data)
authorization = utils.gen_md5([TOKEN, data, random_str]) authorization = utils.gen_md5([TOKEN, data, random_str])
assert authorization == req_authorization assert authorization == req_authorization
return func(*args, **kwds) return func(*args, **kwds)
+1
View File
@@ -27,6 +27,7 @@ class ApiServerUnittest(unittest.TestCase):
def prepare_headers(self, data=""): def prepare_headers(self, data=""):
token = api_server.TOKEN token = api_server.TOKEN
data = utils.handle_req_data(data)
random_str = utils.gen_random_string(5) random_str = utils.gen_random_string(5)
authorization = utils.gen_md5([token, data, random_str]) authorization = utils.gen_md5([token, data, random_str])
+4 -5
View File
@@ -1,4 +1,3 @@
import json
import random import random
import requests import requests
@@ -37,7 +36,7 @@ class TestApiServerV2(ApiServerUnittest):
'name': name, 'name': name,
'password': password 'password': password
} }
headers = self.prepare_headers(json.dumps(data)) headers = self.prepare_headers(data)
return self.api_client.post(url, headers=headers, json=data) return self.api_client.post(url, headers=headers, json=data)
def get_user(self, uid): def get_user(self, uid):
@@ -50,7 +49,7 @@ class TestApiServerV2(ApiServerUnittest):
'name': name, 'name': name,
'password': password 'password': password
} }
headers = self.prepare_headers(json.dumps(data)) headers = self.prepare_headers(data)
return self.api_client.put(url, headers=headers, json=data) return self.api_client.put(url, headers=headers, json=data)
def delete_user(self, uid): def delete_user(self, uid):
@@ -129,7 +128,7 @@ class TestApiServerV2(ApiServerUnittest):
} }
resp = self.api_client.post( resp = self.api_client.post(
url, url,
headers=self.prepare_headers(json.dumps(expected_response)), headers=self.prepare_headers(expected_response),
json=expected_response json=expected_response
) )
self.assertEqual(status_code, resp.status_code) self.assertEqual(status_code, resp.status_code)
@@ -144,7 +143,7 @@ class TestApiServerV2(ApiServerUnittest):
url = "%s/customize-response" % self.host url = "%s/customize-response" % self.host
resp = self.api_client.post( resp = self.api_client.post(
url, url,
headers=self.prepare_headers(json.dumps(expected_response)), headers=self.prepare_headers(expected_response),
json=expected_response json=expected_response
) )
self.assertIn('abc', resp.headers) self.assertIn('abc', resp.headers)