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

如何在Postman中减慢JavaScript发送的HTTP请求速度

问题

我在Postman集合中执行一项复杂测试,需要从一个endpoint获取100000次数据,之后再进行其他测试。该API部署在云端,响应速度极快,但问题出在Postman上:当测试次数约为200次时代码运行正常,但执行100000次测试时Postman会崩溃。我确定问题在于所有HTTP请求都是异步发送的,应用无法处理过多请求。我尝试用setTimeout实现请求延迟,但完全没有效果,请求仍被批量发送。由于是在Postman中,我无法导入外部库。以下是我的代码:

let counter = 0;
const counterCompleted = 100000;

// My loop for 100000 elements
pm.test(`my test should reply OK`, (done) => {
setTimeout(() => {
  const payload = {
    // data
  };
  pm.sendRequest({
      url: pm.request.url,
      method: 'POST',
      header: {
        'Content-Type': 'application/json'
      },
      body: {
        mode: 'raw',
        raw: JSON.stringify(payload),
      },
    },
    (err, response) => {
      pm.expect(err).to.be.null;
      pm.expect(response).to.have.status(200);
      const data = response.json()[0];
      // storing my data
      counter++;
      if (counter === counterCompleted) {
        // When all requests are completed, do more tests
      }
      done();
    }
  );
});
}, 1000);
});

请问我该如何减慢请求发送速度?

解决方案

当前代码的问题是所有setTimeout被几乎同时触发,并没有实现真正的间隔发送。要解决这个问题,需要改成串行请求+固定间隔延迟的模式,即完成一次请求并处理后,再延迟一段时间发送下一次,避免一次性堆积大量异步任务。

推荐实现方式(递归串行请求)

用递归函数控制请求流程,每次请求完成后判断是否继续,是的话延迟后调用自身:

const totalRequests = 100000;
let completedRequests = 0;
const delayMs = 100; // 可根据Postman负载调整间隔时间

// 递归发送请求的核心函数
function sendNextRequest() {
    if (completedRequests >= totalRequests) {
        // 所有请求完成后执行后续测试逻辑
        console.log('全部请求完成,启动后续测试');
        // 在这里添加你的后续测试代码
        return;
    }

    const payload = {
        // 你的请求数据
    };

    pm.sendRequest({
        url: pm.request.url,
        method: 'POST',
        header: {
            'Content-Type': 'application/json'
        },
        body: {
            mode: 'raw',
            raw: JSON.stringify(payload),
        }
    }, (err, response) => {
        // 断言逻辑
        pm.expect(err).to.be.null;
        pm.expect(response).to.have.status(200);
        const data = response.json()[0];
        // 存储数据的逻辑

        completedRequests++;
        // 延迟后发送下一个请求
        setTimeout(sendNextRequest, delayMs);
    });
}

// 启动第一个请求
sendNextRequest();

关键改进点

  • 避免批量触发延迟任务,确保前一个请求完全处理完成后,才会启动下一个请求的延迟计时,从根本上减少Postman的异步任务堆积。
  • 通过delayMs参数灵活控制请求间隔,平衡测试效率和Postman的运行稳定性。
  • 去掉了不必要的pm.test包裹,因为批量请求不属于单个测试断言场景;如果需要保留测试结构,可参考下方的变体。

保留pm.test的变体

如果必须在pm.test中执行,可调整为以下结构:

const totalRequests = 100000;
let completedRequests = 0;
const delayMs = 100;

pm.test('批量执行10万次请求', (done) => {
    function sendNext() {
        if (completedRequests >= totalRequests) {
            done(); // 通知Postman测试完成
            return;
        }

        const payload = {
            // 你的请求数据
        };

        pm.sendRequest({
            url: pm.request.url,
            method: 'POST',
            header: {'Content-Type': 'application/json'},
            body: {mode: 'raw', raw: JSON.stringify(payload)}
        }, (err, res) => {
            pm.expect(err).to.be.null;
            pm.expect(res).to.have.status(200);
            // 存储数据逻辑
            completedRequests++;
            setTimeout(sendNext, delayMs);
        });
    }

    sendNext();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:10:31