如何在JMeter中实现同时发送2个请求、待响应后循环执行10次?
实现方案
核心思路
- 用异步编程实现并发请求,保证两个请求同时发送
- 每次迭代中等待两个请求全部响应完成,再进入下一次循环
- 外层包裹10次循环逻辑
Python 实现示例
先安装依赖:
pip install aiohttp
具体代码:
import asyncio import aiohttp async def send_single_request(session, target_url): """发送单个异步请求,处理响应和异常""" try: async with session.get(target_url) as resp: return { "status": resp.status, "content": await resp.text()[:100] # 只取前100字符示例,可按需调整 } except Exception as e: return {"error": str(e)} async def main(): target_url = "https://你的目标URL.com" total_loops = 10 # 复用会话连接池,提升请求效率 async with aiohttp.ClientSession() as session: for loop_idx in range(total_loops): print(f"===== 第 {loop_idx+1} 次迭代开始 =====") # 并发启动2个请求,等待所有请求完成 request_results = await asyncio.gather( send_single_request(session, target_url), send_single_request(session, target_url) ) # 打印本次迭代的结果 for req_idx, result in enumerate(request_results): print(f"请求 {req_idx+1} 结果: {result}") print("===== 本次迭代结束 =====\n") if __name__ == "__main__": asyncio.run(main())
关键细节说明
asyncio.gather():会同时执行传入的所有协程,必须等所有请求都拿到响应后才会继续往下执行,完美满足“等所有响应完成再进下一次迭代”的要求aiohttp.ClientSession:复用HTTP连接池,避免每次请求都重新建立连接,能显著提升请求效率- 异常捕获:单个请求失败不会导致整个程序终止,会返回错误信息继续执行
Node.js 实现示例
先安装依赖:
npm install axios
具体代码:
const axios = require('axios'); async function sendSingleRequest(targetUrl) { try { const resp = await axios.get(targetUrl); return { status: resp.status, data: resp.data.slice(0, 100) // 取前100字符示例 }; } catch (e) { return { error: e.message }; } } async function main() { const targetUrl = "https://你的目标URL.com"; const totalLoops = 10; for (let loopIdx = 0; loopIdx < totalLoops; loopIdx++) { console.log(`===== 第 ${loopIdx+1} 次迭代开始 =====`); // 并发执行两个请求,等待全部完成 const requestResults = await Promise.all([ sendSingleRequest(targetUrl), sendSingleRequest(targetUrl) ]); // 输出结果 requestResults.forEach((result, reqIdx) => { console.log(`请求 ${reqIdx+1} 结果:`, result); }); console.log("===== 本次迭代结束 =====\n"); } } main();
Node.js 版本说明
Promise.all():和Python的asyncio.gather()作用一致,等待所有Promise完成后返回结果数组- 外层
for循环会严格等待每次Promise.all()执行完毕,才进入下一次迭代
内容的提问来源于stack exchange,提问作者Alraku
相关产品推荐
相关产品推荐

