在接口自动化测试中,动态参数、加密和签名接口是常见的挑战。以下是针对这三类问题的系统化解决方案:
一、动态参数接口处理
1. 参数来源识别与获取
-
响应提取(前序接口返回):
# requests示例:提取token用于后续请求 login_resp = requests.post(login_url, data=credentials) auth_token = login_resp.json()['data']['token'] headers = { 'Authorization': f'Bearer { auth_token}'} profile_resp = requests.get(profile_url, headers=headers)
-
时间戳/随机数生成:
// Java示例:生成动态时间戳 long timestamp = System.currentTimeMillis(); // 生成UUID String requestId = UUID.randomUUID().toString();
-
环境变量注入:
// Cypress示例:使用环境变量 const username = Cypress.env('dynamicUser'); cy.request('POST', '/api/user', { username })
2. 参数关联技术
-
正则表达式提取:
import re response_text = '...csrf_token: "a1b2c3"...' csrf_token = re.search(r'csrf_token: "(\w+)"', response_text).group(1)
-
JSONPath/XPath提取:
// RestAssured + JsonPath String orderId = given().when().get("/orders") .then().extract().jsonPath().getString("orders[0].id");
-
模板引擎渲染:
# 使用Jinja2模板 from jinja2 import Template req_template = Template('{"user": "{ {name}}", "time": { {timestamp}}}') request_body = req_template.render(name="test", timestamp=time.time())
二、加密接口处理
1. 常见加密类型及解决方案
加密类型 | 处理方案 | 示例 |
---|---|---|
AES对称加密 | 使用相同密钥加解密 | [Python示例] |
RSA非对称加密 | 公钥加密/私钥解密 | [Java示例] |
Base64编码 | 标准库处理 | btoa()/atob() |
国密SM4 | 使用专用算法库 | 需引入gm-crypto |
2. 实现示例
Python AES加密:
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import base64
def aes_encrypt(data, key