请说明在使用 Requests 库进行接口自动化测试时,对于需要签名的接口参数(如 sign)以及 Token 认证,通常有哪些处理方式?
考察说明
考查对 Requests 库中签名参数和 Token 认证处理方法的掌握程度。
回答思路
- 【回答框架 1】对于 sign 签名,常见做法是在请求发送前,根据接口文档规定的算法(如 MD5、SHA1、HMAC)对相关参数进行排序、拼接,并加入密钥,计算出签名值,然后作为请求参数或请求头的一部分。Requests 库本身不提供签名功能,需要借助 hashlib、hmac 等模块实现。
- 【回答框架 2】对于 Token 认证,通常有两种方式:一种是将 Token 放在请求头(如 Authorization: Bearer <token>),另一种是放在请求参数中。在 Requests 中,可以通过构造请求头字典并传入 headers 参数来携带 Token,或者通过 params 参数传递。
- 【回答框架 3】在自动化测试框架中,通常会将签名和 Token 的生成封装成通用函数或类,以便复用。可以使用 requests.Session 对象来保持会话状态,自动处理 Cookie,同时在请求发出前动态生成签名和 Token。
- 【回答框架 4】如果接口要求对时间戳、随机数等参与签名,需要动态生成这些值,并保证每次请求的签名有效。对于 Token 过期的情况,需要在测试框架中实现自动刷新机制,比如捕获 401 响应后重新获取 Token 并重试请求。
- 【关键点 1】签名处理需按接口文档要求,使用 hashlib 或 hmac 对参数进行加密,并注意参数排序和编码规则。
- 【关键点 2】Token 通常放在请求头(如 Authorization)中,可通过修改请求头字典传递。
- 【关键点 3】建议封装签名和 Token 生成逻辑,使用 requests.Session 保持会话并动态处理认证信息。
- 【关键点 4】对于 Token 过期,应设计自动刷新和重试机制,保证测试稳定性。
- 【关键点 5】签到参数可能包含时间戳、随机数,需保证每次请求生成新值。
- 【易错点 1】签名算法中参数拼接顺序错误或未对特殊字符编码,导致签名校验失败。
- 【易错点 2】将 Token 放在请求体或 URL 中,而接口要求放在请求头中,导致认证失败。
- 【易错点 3】签名中使用了固定值(如固定时间戳),造成签名过期或被识别为非法请求。