Postman 作为强大的 API 测试工具,能显著提升电商 API 的开发效率。以下教程从基础配置到自动化测试,帮助你快速掌握电商 API 测试技巧,包含一键导入、环境变量管理、请求自动化等核心功能。
一、Postman 基础配置:快速接入电商 API
1. 一键导入官方 API 集合
多数电商平台(如京东、亚马逊)提供 Postman 集合文件,可直接导入:
-
操作步骤:
- 在 Postman 界面点击 "Import" → "Link";
- 粘贴平台提供的集合 URL(如亚马逊 SP-API 的官方集合);
- 选择环境(如 "Production" 或 "Sandbox")完成导入。
-
示例:导入京东开放平台 API 集合
plaintext
markdown1. 访问京东开放平台文档中心; 2. 找到"Postman集合下载"链接; 3. 导入后自动获取商品、订单等模块的预设请求。
2. 环境变量配置
创建环境变量管理 API 密钥、URL 等参数:
-
变量示例:
变量名 描述 示例值 app_key
应用标识 test_app_123
app_secret
应用密钥(加密签名用) a1b2c3d4e5f6g7h8i9j0k
base_url
API 基础 URL https://api.jd.com/routerjson
access_token
用户授权令牌 at-1234567890abcdef
-
设置方法:
- 点击 Postman 右上角 "Environments" → "Add";
- 添加变量并保存(如
{{app_key}}
); - 在请求中通过
{{变量名}}
引用(如{{base_url}}/product/get
)。
二、签名生成:破解电商 API 认证机制
1. 自动生成签名的 Pre-request Script
多数电商 API 需签名验证,可通过 Postman 的 Pre-request Script 自动生成:
-
示例:京东 API 签名脚本
javascript
ini// 生成时间戳 const timestamp = new Date().getTime(); pm.environment.set("timestamp", timestamp); // 准备签名参数 const appKey = pm.environment.get("app_key"); const appSecret = pm.environment.get("app_secret"); const method = pm.request.url.path[0]; // 获取请求方法名 // 构建参数字典(按实际API要求调整) const params = { "app_key": appKey, "method": method, "timestamp": timestamp, "format": "json", "v": "2.0", // 添加其他必要参数 }; // 排序并拼接参数 const sortedParams = Object.keys(params).sort().reduce((acc, key) => { acc[key] = params[key]; return acc; }, {}); let signStr = appSecret; for (const [key, value] of Object.entries(sortedParams)) { signStr += `${key}${value}`; } signStr += appSecret; // 生成MD5签名 const CryptoJS = require('crypto-js'); const sign = CryptoJS.MD5(signStr).toString().toUpperCase(); pm.environment.set("sign", sign);
-
使用方法:
- 在请求的 "Pre-request Script" 标签页粘贴脚本;
- 在请求参数中添加
{{sign}}
和{{timestamp}}
。
三、高级请求技巧:批量测试与参数化
1. 参数化测试
测试多个商品 ID 或订单号时,使用 CSV 文件批量导入:
-
操作步骤:
-
创建 CSV 文件(如
test_data.csv
):csv
yamlproduct_id,price 1001,2999 1002,1999 1003,3999
-
在请求 URL 或 Body 中使用
{{product_id}}
引用参数; -
点击 "Runner",选择集合和 CSV 文件,配置迭代次数。
-
2. 批量请求与并发
使用 Postman 的 Runner 批量执行请求:
-
关键配置:
- 迭代次数:设置为 CSV 行数(如 3);
- 延迟:根据 API 限流设置(如 1000ms 避免触发限流);
- 并发请求数:根据性能需求调整(如 5 并发)。
四、自动化测试:从响应验证到断言
1. 响应验证脚本
添加 Tests 验证 API 返回结果:
-
示例:验证商品价格
javascript
scss// 解析JSON响应 const response = pm.response.json(); // 验证状态码 pm.test("Status code is 200", () => { pm.response.to.have.status(200); }); // 验证价格字段存在且合理 pm.test("Price is valid", () => { pm.expect(response.price).to.be.a('number'); pm.expect(response.price).to.be.above(0); });
2. 断言库使用
Postman 内置 Chai 断言库,支持多种验证方式:
断言类型 | 示例代码 | 验证目标 |
---|---|---|
存在性验证 | pm.expect(response.id).to.exist |
字段是否存在 |
类型验证 | pm.expect(response.price).to.be.a('number') |
字段类型是否正确 |
范围验证 | pm.expect(response.stock).to.be.within(0, 1000) |
字段值是否在范围内 |
包含验证 | pm.expect(response.name).to.include('手机') |
字符串是否包含特定内容 |
五、环境切换:区分测试与生产环境
1. 创建多环境配置
为开发、测试、生产环境分别创建配置:
-
操作步骤:
- 点击 "Environments" → "Add";
- 创建 "Development" 环境,设置测试 API 密钥;
- 创建 "Production" 环境,设置生产 API 密钥;
- 在请求中通过
{{变量名}}
统一引用。
2. 环境变量继承
使用_parent
变量实现环境继承:
-
示例:
-
在 "Production" 环境中设置:
plaintext
makefilebase_url: https://api.jd.com app_key: prod_key_123
-
在 "Development" 环境中设置:
plaintext
makefile_parent: Production app_key: dev_key_456
-
"Development" 自动继承
base_url
,覆盖app_key
。
-
六、数据导出与集成:打通开发流程
1. 导出测试结果
将测试结果导出为报告:
-
操作步骤:
- 运行测试集合;
- 点击 "Export Results";
- 选择格式(JSON、HTML 等);
- 集成到 CI/CD 流程(如 Jenkins、GitLab CI)。
2. 与 CI/CD 工具集成
通过 Newman 命令行工具实现自动化测试:
-
安装 Newman: bash
npm install -g newman
-
执行测试:
bash
arduinonewman run "电商API.postman_collection.json" -e "Production.postman_environment.json" -r html
七、实战案例:以京东 API 测试为例
1. 测试商品查询接口
-
请求配置:
-
URL:
{{base_url}}/routerjson
-
Method:
POST
-
Headers:
plaintext
bashContent-Type: application/x-www-form-urlencoded
-
Body:
plaintext
iniapp_key={{app_key}} method=jingdong.ware.product.get timestamp={{timestamp}} format=json v=2.0 sign={{sign}} param_json={"skuId":{{product_id}}}
-
-
Pre-request Script:使用前文的签名生成脚本。
-
Tests:
javascript
vbscriptconst response = pm.response.json(); pm.test("商品信息返回成功", () => { pm.expect(response.error_response).to.not.exist; pm.expect(response.productInfo).to.exist; pm.expect(response.productInfo.skuId).to.eql(pm.environment.get("product_id")); });
八、常见问题与解决方案
问题场景 | 解决方案 |
---|---|
签名失败 | 1. 检查参数排序是否正确 2. 验证时间戳精度(毫秒级) 3. 确认加密算法(MD5/SHA256) |
请求被限流 | 1. 在 Runner 中设置请求延迟 2. 添加指数退避重试脚本 3. 联系平台申请提高 QPS 限额 |
环境变量不生效 | 1. 确认当前激活的环境 2. 检查变量名是否拼写错误 3. 使用console.log() 调试 |
测试脚本执行失败 | 1. 检查 JSON 解析是否正确(pm.response.json() ) 2. 确认字段路径是否正确 |
通过以上技巧,你可以高效测试各类电商 API,从基础请求到复杂的自动化测试,全面提升开发效率。建议结合平台官方文档,针对性调整请求参数和测试逻辑