Postman接口测试进阶 遇到 JSON格式传参 参数类型是字典 该怎么写

本文介绍了在Postman中进行接口测试时遇到的JSON格式传参问题,特别是当参数类型为字典时如何正确编写。通过一个具体的业务场景——团课上课,解释了JSON请求格式的构建,包括字段、参数、值的类型和表示方法,并展示了如何处理含有特殊字符导致的JSON格式错误。最后,提供了解决问题的代码示例,帮助初学者理解并解决类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务需求:拥有私有心率设备和公有心率的设备的不同学员共同上团课,请求格式为JSON传参

 

遇到的问题:团课上课字段包含2个参数课程名称和设备id,设备id参数又包含私有心率设备id和公有心率设备id2个值

字段及参数与值说明如下

hr_sensors_id_2d_group  :字段,团课上课字段

group_name :参数,团课名称

hr_sensors_id :参数,设备id

hrid :公有心率设备id(变量)

private_hr_sensor_id :私有心率设备id(变量)

private_hr_sensor_id 包含 hrid 和 private_hr_sensor_id 2个值

 

实现思路

1. 请求格式是JSON,整个请求是一个对象,用 { } 大括号

2. 请求字段和参数的数据类型为字符串,所有都用 “” 双引号

3. 请求字段下的参数里面包含多个值,是一个数组,使用 [ ] 中括号

4. 数组里面的值都是独立的,多个值之间用 , 逗号 隔开

5. 请求参数是字典类型,包含多个键值对,使用 数组包含对象 的方式 即 [{}] 

6. 请求参数里面的值为变量,使用

### 如何使用Postman测试淘宝API接口 #### 测试前准备 在开始测试之前,需要完成一些准备工作。首先,确保已经注册并获取了淘宝开放平台的API Key和Secret Key[^1]。这些密钥用于身份验证和授权访问。 其次,下载并安装Postman工具。如果计划实现自动化测试,则还需要配置Newman(Postman命令行集合运行器),以及可能使用的CI/CD工具如Jenkins来集成自动化流程[^2]。 --- #### 创建Postman请求 以下是创建Postman请求的具体说明: 1. **设置环境变量** 在Postman中定义一组环境变量,存储敏感信息(如AppKey、AppSecret等)。这有助于保护隐私数据,并使项目更易于维护。 示例环境变量: ```json { "app_key": "your_app_key", "secret_key": "your_secret_key" } ``` 2. **构建GET请求** 对于大多数淘宝API接口,通常会采用HTTP GET方法调用服务端资源。以下是一个典型的URL结构示例: ``` https://gw.api.taobao.com/router/rest? method=taobao.items.get& app_key={{app_key}}& secret_key={{secret_key}}& session=& timestamp={{timestamp}}& format=json& sign_method=hmac& v=2.0& fields=id,title,pic_url,price& q=laptop ``` 上述参数解释如下: - `method`: 调用的方法名称。 - `app_key`, `secret_key`: 开发者申请的应用凭证。 - `session`: 用户登录后的Session ID(可选)。 - `timestamp`: 当前时间戳,格式为`yyyy-MM-dd HH:mm:ss`。 - `format`: 返回的数据格式,默认为JSON。 - `sign_method`: 签名算法,推荐hmac-sha256。 - `v`: API协议版本号。 - `fields`: 请求返回字段列表。 - `q`: 查询关键词。 3. **签名计算** 淘宝API要求对每次请求进行安全签名处理。具体步骤包括拼接所有查询字符串按字典序排列后附加`secret_key`,再通过指定哈希函数生成最终签名值[^1]。此过程可以封装成Pre-request Script脚本来简化操作。 Pre-request Script代码片段: ```javascript const crypto = require('crypto'); pm.environment.set("timestamp", new Date().toISOString()); let stringToSign = ""; Object.keys(pm.request.url.query).sort().forEach(key => { stringToSign += key + "=" + encodeURIComponent(pm.request.url.query[key]) + "&"; }); stringToSign = stringToSign.slice(0, -1); // Remove trailing '&' stringToSign += pm.environment.get("secret_key"); const hash = crypto.createHash('sha256').update(stringToSign).digest('hex'); pm.environment.set("signature", hash); ``` 4. **发送请求与校验响应** 执行上述构造好的请求之后,应该能够收到来自服务器的标准回复包。此时可以通过Tests选项卡编断言逻辑检验预期结果是否满足条件。 Tests脚本样例: ```javascript pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("Response body contains expected data", function () { var jsonData = pm.response.json(); pm.expect(jsonData.error_response).to.be.undefined; pm.expect(jsonData.items.item.length).to.be.above(0); }); ``` --- #### 自动化扩展方案 为了进一步提升效率,还可以考虑引入Newman配合Shell脚本或者结合Jenkins流水线作业达成无人值守式的回归检测目的[^4]^。 例如下面展示了一段基于Linux系统的Bash程序用来定时触发任务并将产出物上传至内部Web Server供团队成员查阅最新动态进展状况[^5]: ```bash #!/usr/bin/env bash time=$(date "+%Y-%m-%d_%H:%M") collection_file="/path/to/TaoBao_API.postman_collection.json" environment_file="/path/to/TaoBao_ENV.postman_environment.json" newman run $collection_file \ --environment=$environment_file \ --reporters="htmlextra" \ --reporter-htmlextra-export=/var/www/html/reports/$time.html curl -X POST 'https://oapi.dingtalk.com/robot/send?access_token=<YOUR_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "msgtype":"link", "link":{ "text":"点击查看最新的API测试报告。", "title":"TaoBao API Test Report", "picUrl":"", "messageUrl":"/reports/'$time'.html" } }' ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值