如何在Postman测试运行时修改变量值?API安全测试实操
问题描述
我正尝试使用Postman开展基础API安全测试,当前使用的URL如下:
http://example.com/api/v1/users/{{userID}}
{{userID}}已设置为站点中的某一有效用户ID(示例里为20),我希望设置三项测试,分别验证请求有效性、IDOR漏洞以及SQL注入漏洞。
我的测试思路如下:
// userID 初始设置为20(有效用户) pm.test("初始请求有效性验证", function () { pm.expect(pm.response.text()).to.include("Peter"); }); // 需要修改{{userID}}为30来测试IDOR // URL应变为 http://example.com/api/v1/users/30 pm.test("IDOR防护有效性验证", function () { pm.expect(pm.response.text()).to.include("User not found."); }); // 需要修改{{userID}}为20'or'1来测试SQL注入 // URL应变为 http://example.com/api/v1/users/20'or'1 pm.test("SQL注入漏洞验证", function () { pm.expect(pm.response.text()).to.include("You have an error"); });
我的问题是:如何修改{{userID}}的值,让后续请求使用修改后的值而非环境变量中的原始值?
解决方法
以下几种实用方式可实现临时修改{{userID}}变量值,按需控制请求参数:
1. Pre-request Script临时修改变量
在请求的Pre-request Script标签页添加脚本,临时设置userID的值,该修改仅对当前请求生效,不会永久改动环境变量:
// 测试IDOR时,临时设置userID为30 pm.variables.set("userID", "30"); // 测试SQL注入时,替换为对应payload // pm.variables.set("userID", "20'or'1");
测试不同场景时,切换对应的脚本代码即可;也可将三个场景拆成三个独立请求,每个请求单独配置Pre-request Script。
2. 拆分独立请求用集合Runner批量执行
把三个测试场景拆成三个独立请求,每个请求直接指定目标URL(无需依赖环境变量),再通过Postman的Collection Runner依次执行:
- 第一个请求:
http://example.com/api/v1/users/20,验证初始有效请求 - 第二个请求:
http://example.com/api/v1/users/30,验证IDOR防护 - 第三个请求:
http://example.com/api/v1/users/20'or'1,验证SQL注入
这种方式逻辑清晰,每个请求对应单一测试场景,避免变量冲突,便于查看测试结果。
3. 脚本内发起多请求完成全场景测试
如果想在一个请求里完成所有测试,可在测试脚本中直接发起新请求,无需修改环境变量:
// 初始请求验证 pm.test("初始请求有效性验证", function () { pm.expect(pm.response.text()).to.include("Peter"); }); // 发起IDOR测试请求 pm.sendRequest("http://example.com/api/v1/users/30", function (err, res) { pm.test("IDOR防护有效性验证", function () { pm.expect(res.text()).to.include("User not found."); }); }); // 发起SQL注入测试请求 pm.sendRequest("http://example.com/api/v1/users/20'or'1", function (err, res) { pm.test("SQL注入漏洞验证", function () { pm.expect(res.text()).to.include("You have an error"); }); });
该方式通过脚本批量发起请求,所有测试结果会汇总在当前请求的测试报告中。
关键提示
- 用
pm.variables.set()设置临时变量,仅当前请求有效;若用pm.environment.set()会永久修改环境变量,谨慎使用。 - 拆分独立请求是最推荐的方案,逻辑清晰、易于维护。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

