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

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

注意

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

    1. // pm.variables.replaceIn 处理参数里的变量
    2. var body = pm.variables.replaceIn(pm.request.body.raw);
    3. var jsonData = JSON.parse(body);

URL 相关信息

  1. // 获取 url 对象
  2. var urlObj = pm.request.url;
  3. // 获取完整接口请求 URL,包含 query 参数
  4. var url = urlObj.toString();
  5. // 获取协议(http 或 https)
  6. var protocol = urlObj.protocol;
  7. // 获取 端口
  8. var port = urlObj.port;

Header 参数

获取 header 参数

  1. // 获取 Header 参数对象
  2. var headers = pm.request.headers;
  3. // 获取 key 为 field1 的 header 参数的值
  4. var field1 = headers.get("field1");
  5. // 已键值对象方式获取所有 header 参数
  6. var headersObject = headers.toObject();
  7. // 遍历整个 header
  8. headers.each((item) => {
  9. console.log(item.key); // 输出参数名
  10. console.log(item.value); // 输出参数值
  11. });

修改 header 参数

  1. // 获取 Header 参数对象
  2. var headers = pm.request.headers;
  3. // 增加 header 参数
  4. headers.add({
  5. key: "field1",
  6. value: "value1",
  7. });
  8. // 修改 header 参数(如不存在则新增)
  9. headers.upsert({
  10. key: "field2",
  11. value: "value2",
  12. });

Query 参数

获取 query 参数

  1. // 获取 Query 参数对象
  2. var queryParams = pm.request.url.query;
  3. // 获取 key 为 field1 的 query 参数的值
  4. var field1 = queryParams.get("field1");
  5. // 已键值对象方式获取所有 query 参数
  6. var quertParamsObject = queryParams.toObject();
  7. // 遍历整个 query
  8. queryParams.each((item) => {
  9. console.log(item.key); // 输出参数名
  10. console.log(item.value); // 输出参数值
  11. });

修改 query 参数

  1. // 获取 Query 参数对象
  2. var queryParams = pm.request.url.query;
  3. // 增加 query 参数
  4. queryParams.add({
  5. key: "field1",
  6. value: "value1",
  7. });
  8. // 修改 query 参数(如不存在则新增)
  9. queryParams.upsert({
  10. key: "field2",
  11. value: "value2",
  12. });

Body 参数

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

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

注意

  • 如需修改 Body 里的数据,推荐在 Body 里引用变量,然后在前置脚本里设置对应变量的值,即可达到修改的目的。
  • Body 参数也支持直接修改(版本 >= 1.4.16+),使用方式如下:
  1. var body = pm.request.body.toJSON();
  2. console.log("body 对象", body);
  3. var bodyStr = body.raw;
  4. console.log("body 字符串", bodyStr);
  5. var bodyJSON = JSON.parse(bodyStr);
  6. bodyJSON.id = 100;
  7. pm.request.body.update(JSON.stringify(bodyJSON, null, 2));
  8. console.log("修改后 body", pm.request.body.toJSON());

一、body 类型为 form-data

获取 form-data 信息

  1. // 当 body 类型为 form-data 时,从 pm.request.body.formdata 获取请求参数
  2. var formData = pm.request.body.formdata;
  3. // 获取 key 为 field1 的 form-data 参数的值
  4. var field1 = formData.get("field1");
  5. console.log(field1); // 控制台打印 field1
  6. // 已键值对象方式获取所有 formdata 参数
  7. var formdataObject = formData.toObject();
  8. console.log(formdataObject); // 控制台打印 formdataObject
  9. // 遍历整个 form-data 数据
  10. formData.each((item) => {
  11. console.log(item.key); // 控制台打印参数名
  12. console.log(item.value); // 控制台打印参数值
  13. });

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

获取 x-www-form-urlencode 信息

  1. // 当 body 类型为 x-www-form-urlencode** 时,从 pm.request.body.urlencoded 获取请求参数
  2. var formData = pm.request.body.urlencoded;
  3. // 获取 key 为 field1 的 form-data 参数的值
  4. var field1 = formData.get("field1");
  5. // 已键值对象方式获取所有 formdata 参数
  6. var formdataObject = formData.toObject();
  7. // 遍历整个 form 数据
  8. formData.each((item) => {
  9. console.log(item.key); // 控制台打印参数名
  10. console.log(item.value); // 控制台打印参数值
  11. });

三、body 类型为 json

获取 json 信息

  1. // 当 body 类型为 json 时,从 pm.request.body.raw 获取请求参数
  2. try {
  3. var jsonData = JSON.parse(pm.request.body.raw);
  4. console.log(jsonData); // 控制台打印参整个 json 数据
  5. } catch (e) {
  6. console.log(e);
  7. }

四、body 类型为 raw

获取 raw 信息

  1. // 当 body 类型为 raw 时,从 pm.request.body.raw 获取请求参数
  2. var raw = pm.request.body.raw;
  3. console.log(raw); // 控制台打印参整个 raw 数据