脚本读取/修改接口请求信息

# 脚本读取/修改接口请求信息

脚本如何读取/修改接口请求信息主要使用pm.request

注意

  • 脚本可以读取所有请求参数信息,但是只能修改 header 和 query 参数,不能修改其他参数。
  • 只有在前置脚本里修改请求信息才是有效的,在后置脚本里修改无效。
  • 通过脚本取出来的接口参数,如果参数包含变量,变量是不会替换成对应的值。如想要获取替换后的值,可使用pm.variables.replaceIn方法处理:
    // pm.variables.replaceIn 处理参数里的变量
    var body = pm.variables.replaceIn(pm.request.body.raw);
    var jsonData = JSON.parse(body);
    

# URL 相关信息

// 获取 url 对象
var urlObject = pm.request.url;

// 获取完整接口请求 URL,包含 query 参数
var url = urlObj.toString();

// 获取协议(http 或 https)
var protocol = urlObj.protocol;

// 获取 端口
var port = urlObj.port;

# Header 参数

获取 header 参数

// 获取 Header 参数对象
var headers = pm.request.headers;

// 获取 key 为 field1 的 header 参数的值
var field1 = headers.get("field1");

// 已键值对象方式获取所有 query 参数
var headersObject = headers.toObject();

// 遍历整个 query
headers.each((item) => {
  console.log(item.key); // 输出参数名
  console.log(item.value); // 输出参数值
});

修改 header 参数

// 获取 Header 参数对象
var headers = pm.request.headers;

// 增加 header 参数
headers.add({
  key: "field1",
  value: "value1",
});

// 修改 query 参数(如不存在则新增)
headers.upsert({
  key: "field2",
  value: "value2",
});

# Query 参数

获取 query 参数

// 获取 Query 参数对象
var queryParams = pm.request.url.query;

// 获取 key 为 field1 的 query 参数的值
var field1 = queryParams.get("field1");

// 已键值对象方式获取所有 query 参数
var quertParamsObject = queryParams.toObject();

// 遍历整个 query
queryParams.each((item) => {
  console.log(item.key); // 输出参数名
  console.log(item.value); // 输出参数值
});

修改 query 参数

// 获取 Query 参数对象
var queryParams = pm.request.url.query;

// 增加 query 参数
queryParams.add({
  key: "field1",
  value: "value1",
});

// 修改 query 参数(如不存在则新增)
queryParams.upsert({
  key: "field2",
  value: "value2",
});

# Body 参数

Body 参数来自pm.request.body,pm.request.body 是一个RequestBody 实例。

参考:http://www.postmanlabs.com/postman-collection/RequestBody.html

注意

  • 如需修改 Body 里的数据,推荐在 Body 里引用变量,然后在前置脚本里设置对应变量的值,即可达到修改的目的。
  • Body 参数也支持直接修改(版本 >= 1.4.16+),使用方式如下:
var body = pm.request.body.toJSON();
console.log("body 对象", body);

var bodyStr = body.raw;
console.log("body 字符串", bodyStr);

var bodyJSON = JSON.parse(bodyStr);
bodyJSON.id = 100;
pm.request.body.update(JSON.stringify(bodyJSON, null, 2));
console.log("修改后 body", pm.request.body.toJSON());

# 一、body 类型为 form-data

获取 form-data 信息

// 当 body 类型为 form-data 时,从 pm.request.body.formdata 获取请求参数
var formData = pm.request.body.formdata;

// 获取 key 为 field1 的 form-data 参数的值
var field1 = formData.get("field1");
console.log(field1); // 控制台打印 field1

// 已键值对象方式获取所有 formdata 参数
var formdataObject = formData.toObject();
console.log(formdataObject); // 控制台打印 formdataObject

// 遍历整个 form-data 数据
formData.each((item) => {
  console.log(item.key); // 控制台打印参数名
  console.log(item.value); // 控制台打印参数值
});

# 二、body 类型为 x-www-form-urlencode

获取 x-www-form-urlencode 信息

// 当 body 类型为 x-www-form-urlencode** 时,从 pm.request.body.urlencoded 获取请求参数
var formData = pm.request.body.urlencoded;

// 获取 key 为 field1 的 form-data 参数的值
var field1 = formData.get("field1");

// 已键值对象方式获取所有 formdata 参数
var formdataObject = formData.toObject();

// 遍历整个 form 数据
formData.each((item) => {
  console.log(item.key); // 控制台打印参数名
  console.log(item.value); // 控制台打印参数值
});

# 三、body 类型为 json

获取 json 信息

// 当 body 类型为 json 时,从 pm.request.body.raw 获取请求参数

try {
  var jsonData = JSON.parse(pm.request.body.raw);
  console.log(jsonData); // 控制台打印参整个 json 数据
} catch (e) {
  console.log(e);
}

# 四、body 类型为 raw

获取 raw 信息

// 当 body 类型为 raw 时,从 pm.request.body.raw 获取请求参数

var raw = pm.request.body.raw;
console.log(raw); // 控制台打印参整个 raw 数据