You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:18:28