背景:最近公司接口增加了很多安全校验后来发现编写用例有一个坑,改了好久仍然被挡在外面后来和rd查日志才发现是参数没有encoding。
具体是请求接口时params肯定是dict类型的就是这种{"A":"B"},因为传的json格式的,起初参数都是写死的值没有问题,后来发现写死对于case维护成本太高就修改成用orm链接数据库动态从库里取值,但是之前没有校验类型也有返回,这一版本加了params的强校验,格式不正确比如说{“KEY”:{'A':B}}这里面value在没有encoding前就是dict类型,在请求对应接口就一直会response['code']就一直非0。
后来就发现python中有一个模块json中有一个dumps的方法用起来很方便
>>> import json
>>> a={'a':{'key1':1,'key2':(1,2),'key3':[1,2,3],4:"aa"}}
>>> b=json.dumps(a)
>>> print b
{"a": {"key3": [1, 2, 3], "key2": [1, 2], "key1": 1, "4": "aa"}}
首先b["a"]["key2"]的value的类型原来是元组类型经过encoding后变成list。
其次b["a"][4]其中4的类型是int型的经过encoding后变成string类型
json.dumps()还增加了排序参数sort_keys
>>> c=json.dumps(a,sort_keys=True)
>>> print c
{"a": {"4": "aa", "key1": 1, "key2": [1, 2], "key3": [1, 2, 3]}}
这个排序是按照字典的(a到Z)排序json.dumps()有一个参数indent可以增加缩进方便查看
>>> d=json.dumps(a,sort_keys=True,indent=3)
>>> print d
{
"a": {
"4": "aa",
"key1": 1,
"key2": [
1,
2
],
"key3": [
1,
2,
3
]
}
}
后面还有很多目前我用到的就是这2个,后面想把python requests官方文档内容整理一下,这个库在做接口测试的时候真的很重要