如何用JMeter或Python并行发送指定次数的单个GET请求?
使用JMeter实现并行发送指定次数GET请求
方法1:标准线程组实现
- 新建线程组,将「线程数」设置为100(对应并行请求数量),「循环次数」设为1
- 在线程组下添加HTTP请求采样器,配置目标URL、请求参数、请求头等信息
- 可选优化:勾选线程组的「延迟创建线程直到需要」,并将「线程启动时间(秒)」设为0,消除线程启动延迟,确保请求真正并行发送
- 添加「查看结果树」「聚合报告」等监听器,用于验证请求结果、统计性能数据
方法2:纠正bzm Parallel Executor的用法
若你之前使用该组件失败,大概率是配置有误,正确步骤如下:
- 添加bzm Parallel Controller到测试计划中
- 在控制器下添加HTTP请求采样器(仅需添加1个)
- 设置控制器的「并行度」为100,「循环次数」为1,控制器会自动并行执行100次内部的请求
- 注意:若请求数量较大,需调整JMeter堆内存(修改
jmeter.bat/jmeter.sh中的HEAP参数,例如HEAP="-Xms1g -Xmx2g"),避免内存溢出
使用Python实现并行发送指定次数GET请求
方法1:多线程实现(基于threading和requests)
适合快速实现,代码简洁直观:
import threading import requests def send_get_request(url): try: response = requests.get(url) print(f"请求状态码: {response.status_code}, 线程ID: {threading.get_ident()}") # 可按需处理响应,如解析JSON、保存结果等 except Exception as e: print(f"请求失败: {str(e)}, 线程ID: {threading.get_ident()}") if __name__ == "__main__": target_url = "https://你的目标URL.com" request_count = 100 threads = [] for _ in range(request_count): thread = threading.Thread(target=send_get_request, args=(target_url,)) threads.append(thread) thread.start() # 等待所有线程执行完成 for thread in threads: thread.join() print("所有请求执行完毕")
方法2:异步IO实现(基于asyncio和aiohttp)
性能更优,适合大数量请求场景:
import asyncio import aiohttp async def send_async_get(url, session): try: async with session.get(url) as response: print(f"请求状态码: {response.status}, 任务ID: {id(asyncio.current_task())}") # 可选:获取响应内容 # content = await response.text() except Exception as e: print(f"请求失败: {str(e)}, 任务ID: {id(asyncio.current_task())}") async def main(): target_url = "https://你的目标URL.com" request_count = 100 async with aiohttp.ClientSession() as session: # 创建100个异步请求任务 tasks = [send_async_get(target_url, session) for _ in range(request_count)] await asyncio.gather(*tasks) if __name__ == "__main__": asyncio.run(main()) print("所有异步请求执行完毕")
内容的提问来源于stack exchange,提问作者Rajesh G
相关产品推荐
相关产品推荐

