Python接口测试:字典取值技巧与Sign签名生成实战

顾言
顾言
发布时间:2026-10-12 | 1人浏览过
原创

本文详解Python接口测试中字典类型返回数据的三种取值方法,对比循环、keys/values及直接嵌套取值的效率与简洁性。同时深入解析基于字典序排序、URLEncode及MD5加密的接口签名规范,提供完整的Python代码实现,帮助开发者高效处理API数据校验与安全认证。

接口测试返回数据为字典取值

在接口测试场景中,验证返回数据是否符合预期是核心环节。当接口返回的数据结构为字典(dict)时,我们需要精准提取特定键(key)对应的值(value)。此时,灵活运用 dict.keys()、dict.values() 方法结合 for 循环,以及掌握列表相关操作技巧,能够高效完成数据提取任务。

实例

以下展示一次接口调用后的返回数据,该数据结构类型为 dict。我们的目标是从中提取出 account 字段的相关信息。

#接口返回的数据:
api_result = {'code': '000001', 
'dataMap': {'data': 
{'amount': 0, 'billingWeight': 0, 'quantity': 0}},
 'failureString': '', 'failures': [], 
 'flag': 'success', 'hasError': False, 'message': '请求成功'}

方法

#方法1:
print("这是方法1")
for i in api_result.keys():
    if i == 'dataMap':
        print(api_result[i]['data']['amount'])
#方法2:
print("这是方法2")
getkey = api_result.get('dataMap')
# print(getkey)
cc =list(getkey.values())[0]
print(cc['amount'])
#方法3:
print("这是方法3")
print(api_result['dataMap']['data']['amount'])

运行结果

本文介绍了三种处理字典数据的方法:第一种是通过 for 循环遍历;第二种是利用 keys() 和 values() 方法配合列表操作;第三种则是直接通过嵌套键名获取对应值。从代码简洁性和执行效率来看,最后一种直接嵌套取值的方式最为快速且简单。

python接口测试--sign签名

近期测试的项目因涉及第三方调用,为提升安全性,引入了签名认证机制。所有接口调用均需通过签名进行验证,以确保数据完整性和来源可信。

为此,我们研究了如何依据接口签名规范,使用 Python 生成 sign 值。

接口签名规范

首先,去除请求参数中的 sign 参数以及值为空的参数,将剩余的多个键值对按照键名(key)的字典序进行排序。

接着,将排序后的键值对以 key1=value1&key2=value2 的格式拼接成一个完整的字符串。

然后,对拼接好的字符串进行 URLEncode 编码处理。

随后,将开发者提供的 key 拼接在第一步排序后的字符串末尾,形成最终的待签名字符串。

最后,使用 md5 算法对待签名字符串进行加密,并将生成的摘要转换为大写形式,即为最终的 sign 值。

实现代码

以下是具体的代码实现片段。

import time
import requests
import  json
import urllib,hashlib
url = "http://www.xxx.xx"
#获取当前的时间戳
stamp = time.time()
print(stamp)
#转换为int类型的13位时间戳
timestam = int(round(stamp*1000))
print(timestam)
time_new = str(timestam)
print(type(time_new))
data ={
    'appId':'3301820001',
    "outTradeNo":"20201026001",
    "amount":"100",
    "body":"test",
    "timestamp":time_new,
    "notifyUrl":"http://localhost:8080/notify",
}
#将键按照字典序排序
data_order = sorted(data.items(),key=lambda x:x[0],reverse=False)
#将列表转化为字典
data_new = dict(data_order)
print(data_new)
#将key=value键值对进行url编码
datanew = urllib.parse.urlencode(data_new)
datadic = datanew + "&key=BF1BDE5A649724056F904A9335B1C1C7455655"
print(datadic)
#创建md5对象
m = hashlib.md5()
m= hashlib.md5(datadic.encode())
data_md5 = m.hexdigest()
#将小写字母切换为大写字母
sign=data_md5.upper()
print(sign)

以上为个人经验总结,希望能为大家提供有价值的参考,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表