在 Postman 中,你可以通过 Pre-request Script 动态添加请求参数(如查询参数、头信息或请求体数据)。以下是添加不同类型参数的几种常见方法及代码示例:
1. 添加查询参数(Query Parameters)
你可以使用 pm.request.url.query 来动态添加或修改查询参数。
// 添加单个查询参数
pm.request.url.addQueryParams("key=value");
// 添加多个查询参数
pm.request.url.addQueryParams([
{ key: "id", value: "123" },
{ key: "name", value: "John" }
]);
// 示例:动态生成查询参数
let userId = pm.environment.get("userId") || "defaultId";
pm.request.url.addQueryParams(`userId=${userId}`);
=================== test ====================
// 获取环境名
const currentEnvironment = pm.environment.name;
// console.log("Current environment:", currentEnvironment);
// // 可选:根据环境名称执行逻辑
let password = '';
if (currentEnvironment === "crmeb_local") {
password = 'zpp222222';
} else if (currentEnvironment === "crmeb_pro") {
password = '2f@7H!kQ9#zR4%vE';
}
// pm.request.url.query.upsert({key: "password", value: "zpp222222"});
//pm.request.url.query.set("password", "zpp222222");
pm.request.url.addQueryParams([
{ key: "password", value: password}
]);
注意:
-
addQueryParams方法会直接将参数附加到 URL 中。 - 如果参数已存在,调用
addQueryParams会追加新值,可能导致重复参数。 - 你也可以使用
pm.request.url.query.all()获取所有查询参数并进行处理。
2. 修改现有查询参数
如果你需要修改已有查询参数的值,可以通过索引或键来操作。
// 修改第一个查询参数
pm.request.url.query[0].value = "newValue";
// 通过键修改特定参数
pm.request.url.query.all().forEach(param => {
if (param.key === "key") {
param.value = "updatedValue";
}
});
注意:确保查询参数存在,否则可能需要先检查 pm.request.url.query.all() 是否为空。
3. 添加请求头(Headers)
你可以通过 pm.request.headers 添加或修改请求头。
// 添加单个请求头
pm.request.headers.add({ key: "Authorization", value: "Bearer " + pm.environment.get("token") });
// 添加多个请求头
pm.request.headers.add([
{ key: "Content-Type", value: "application/json" },
{ key: "Custom-Header", value: "customValue" }
]);
示例:动态生成 token 并添加到请求头
const token = pm.environment.get("authToken") || "defaultToken";
pm.request.headers.add({ key: "Authorization", value: `Bearer ${token}` });
4. 添加或修改请求体(Body)
如果你的请求需要动态设置请求体(如 JSON 或 form-data),可以使用 pm.request.body。
JSON 请求体
// 设置 JSON 请求体
let body = {
mode: "raw",
raw: JSON.stringify({
username: pm.environment.get("username") || "defaultUser",
password: pm.environment.get("password") || "defaultPass"
}),
options: {
raw: { language: "json" }
}
};
pm.request.body.update(body);
Form-data 请求体
// 设置 form-data 请求体
let body = {
mode: "formdata",
formdata: [
{ key: "login", value: pm.environment.get("login") || "user123" },
{ key: "amount", value: "100" }
]
};
pm.request.body.update(body);
5. 使用动态变量
你可以使用 Postman 的动态变量或环境变量来生成参数值。例如,使用时间戳或随机 ID:
// 使用时间戳作为查询参数
pm.request.url.addQueryParams(`timestamp=${Date.now()}`);
// 使用 Postman 内置动态变量生成唯一 ID
pm.request.url.addQueryParams(`guid=${pm.variables.get("{$guid}")}`);
6. 在集合或文件夹级别添加参数
如果需要在整个集合或文件夹的请求中添加参数,可以在集合或文件夹的 Pre-request Script 中设置:
// 在集合级别添加通用查询参数
pm.request.url.addQueryParams("api_key=" + pm.environment.get("apiKey"));
// 在集合级别添加通用头信息
pm.request.headers.add({ key: "X-API-Key", value: pm.environment.get("apiKey") });
步骤:
- 打开 Postman,点击侧边栏中的集合或文件夹。
- 选择 Scripts 标签,切换到 Pre-request 标签。
- 输入脚本代码并保存。
7. 调试 Pre-request Script
为了确保脚本正常工作,可以使用 Postman Console 查看日志:
console.log("Query Parameters:", pm.request.url.query.all());
console.log("Headers:", pm.request.headers.all());
console.log("Body:", pm.request.body.toString());
打开 Console:
- 点击 Postman 底部左侧的 Console 图标,或使用快捷键
Alt+Ctrl+C(Windows/Linux)或Cmd+Option+C(Mac)。
注意事项
-
环境变量:确保所需的环境变量已设置(通过
pm.environment.set("key", "value")或 Postman UI)。 - 脚本执行顺序:集合级别的 Pre-request Script 先于文件夹级别,再先于请求级别的脚本执行。
-
动态值:使用
pm.variables.get()或pm.environment.get()获取变量值,避免硬编码。 - 错误处理:在脚本中加入错误检查,例如验证变量是否存在。
示例:检查变量是否存在
if (!pm.environment.get("userId")) {
console.error("Error: userId is not set in environment variables");
return;
}
pm.request.url.addQueryParams(`userId=${pm.environment.get("userId")}`);
综合示例
以下是一个综合示例,在 Pre-request Script 中添加查询参数、头信息和 JSON 请求体:
// 设置环境变量
pm.environment.set("userId", "12345");
// 添加查询参数
pm.request.url.addQueryParams([
{ key: "userId", value: pm.environment.get("userId") },
{ key: "timestamp", value: Date.now().toString() }
]);
// 添加请求头
pm.request.headers.add({ key: "Authorization", value: "Bearer " + pm.environment.get("token") });
// 设置 JSON 请求体
let body = {
mode: "raw",
raw: JSON.stringify({
id: pm.environment.get("userId"),
action: "create"
}),
options: { raw: { language: "json" } }
};
pm.request.body.update(body);
// 调试输出
console.log("Query Parameters:", pm.request.url.query.all());
console.log("Headers:", pm.request.headers.all());
console.log("Body:", pm.request.body.toString());
总结
通过 Postman 的 Pre-request Script,你可以动态添加查询参数、头信息或请求体数据,极大地提高 API 测试的灵活性和自动化程度。建议结合环境变量和 Postman Console 进行调试,以确保脚本按预期工作。
如果需要更具体的示例或有其他问题,请提供更多细节,我可以进一步优化答案!