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

如何用Postman-Newman实现请求并行及关联带数据文件的集合运行?

解决方案:用Newman + Node.js脚本实现并行ID获取与集合处理

核心思路

放弃Postman内置的postman.setNextRequest(串行执行且不支持动态加载外部数据文件+参数的组合场景),改用Node.js调用Newman核心库的方式,实现“获取ID后立即启动目标集合并行运行”的需求,同时可灵活控制并发量。

步骤1:准备两个Postman集合

  1. ID获取集合(命名为get-id-collection.json):

    • 仅包含1个请求,用于获取目标ID。
    • 在请求的Tests标签中,将返回的ID存入环境变量(方便脚本捕获):
      pm.environment.set("fetched_id", pm.response.json().id);
      
    • 导出该集合为JSON文件。
  2. 目标处理集合(命名为process-id-collection.json):

    • 集合中的请求使用{{target_id}}作为动态ID参数(比如接口路径、请求体中)。
    • 确保集合支持加载外部数据文件(比如data-100-records.json),在Postman中验证通过后,导出为JSON文件。

步骤2:编写Node.js控制脚本

借助Newman的Node.js API,结合p-limit库控制并发量(避免一次性发起2000次请求导致服务器限流),实现“获取ID即启动处理任务”的并行逻辑:

  1. 先安装依赖:

    npm install newman p-limit
    
  2. 编写脚本(命名为parallel-run.js):

    const newman = require('newman');
    const pLimit = require('p-limit');
    
    // 控制并发数,根据服务器承受能力调整,比如设为10
    const limit = pLimit(10);
    
    // 配置参数
    const ID_COLLECTION_PATH = './get-id-collection.json';
    const PROCESS_COLLECTION_PATH = './process-id-collection.json';
    const DATA_FILE_PATH = './data-100-records.json';
    const TOTAL_ITERATIONS = 2000;
    
    // 函数:获取单个ID
    async function fetchId() {
      return new Promise((resolve, reject) => {
        newman.run({
          collection: ID_COLLECTION_PATH,
          reporters: 'cli',
          reporter: { cli: { verbose: false } } // 减少日志输出
        }, (err, summary) => {
          if (err) reject(err);
          // 从环境变量中提取ID
          const fetchedId = summary.environment.values.members.find(item => item.key === 'fetched_id').value;
          resolve(fetchedId);
        });
      });
    }
    
    // 函数:用ID运行目标集合
    async function processId(id) {
      return new Promise((resolve, reject) => {
        newman.run({
          collection: PROCESS_COLLECTION_PATH,
          data: DATA_FILE_PATH, // 加载100条记录的数据文件
          envVar: [{ key: 'target_id', value: id }], // 传递ID到集合
          reporters: 'cli',
          reporter: { cli: { verbose: false } }
        }, (err, summary) => {
          if (err) reject(err);
          console.log(`ID ${id} 处理完成`);
          resolve(summary);
        });
      });
    }
    
    // 启动并行任务
    async function start() {
      const tasks = [];
      for (let i = 0; i < TOTAL_ITERATIONS; i++) {
        tasks.push(limit(async () => {
          const id = await fetchId();
          // 获取ID后立即启动处理任务,无需等待其他任务
          await processId(id);
        }));
      }
      await Promise.all(tasks);
      console.log('所有任务完成');
    }
    
    start().catch(err => console.error('全局错误:', err));
    

步骤3:运行脚本

在终端执行:

node parallel-run.js

关键说明

  • 并发控制:通过p-limit限制同时运行的任务数,避免触发服务器限流策略,可根据实际情况调整数值。
  • 数据文件加载:目标集合运行时通过data参数指定外部数据文件,Newman会自动遍历100条记录完成集合运行。
  • 参数传递:通过envVar将获取到的ID传入目标集合,集合中用{{target_id}}引用即可。

内容的提问来源于stack exchange,提问作者Divyang Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:05:22