| |
| |
| import base64 |
| import os |
| import urllib |
| import numpy as np |
| import requests, time, json, threading, random |
| |
| |
| class Presstest(object): |
| """ |
| 并发压力测试 |
| """ |
| |
| def __init__(self, press_url): |
| self.press_url = press_url |
| |
| def test_interface(self): |
| '''压测接口''' |
| global INDEX |
| INDEX += 1 |
| |
| global ERROR_NUM |
| global TIME_LENS |
| try: |
| start = time.time() |
| self.do_request(self.press_url) |
| end = time.time() |
| TIME_LENS.append(end - start) |
| print('end') |
| except Exception as e: |
| ERROR_NUM += 1 |
| print(e) |
| |
| def test_onework(self): |
| '''一次并发处理单个任务''' |
| i = 0 |
| while i < ONE_WORKER_NUM: |
| i += 1 |
| self.test_interface() |
| time.sleep(LOOP_SLEEP) |
| |
| def do_request(self, url): |
| '''通用http获取webapi请求结果方法''' |
| |
| |
| |
| |
| retry_num = 0 |
| while retry_num < 3: |
| response = urllib.request.urlopen(url, timeout=300) |
| if not response or response.status == 421: |
| time.sleep(1) |
| retry_num = retry_num + 1 |
| continue |
| else: |
| break |
| response_content = response.read() |
| if hasattr(response_content, 'decode'): |
| response_content = response_content.decode('utf-8') |
| return response_content |
| |
| def run(self): |
| '''使用多线程进程并发测试''' |
| t1 = time.time() |
| Threads = [] |
| |
| for i in range(THREAD_NUM): |
| t = threading.Thread(target=self.test_onework, name="T" + str(i)) |
| t.setDaemon(True) |
| Threads.append(t) |
| |
| for t in Threads: |
| t.start() |
| for t in Threads: |
| t.join() |
| t2 = time.time() |
| |
| print("===============压测结果===================") |
| print("URL:", self.press_url) |
| print("任务数量:", THREAD_NUM, "*", ONE_WORKER_NUM, "=", THREAD_NUM * ONE_WORKER_NUM) |
| print("总耗时(秒):", t2 - t1) |
| print("每次请求耗时(秒):", (t2 - t1) / (THREAD_NUM * ONE_WORKER_NUM)) |
| print("每秒承载请求数:", 1 / ((t2 - t1) / (THREAD_NUM * ONE_WORKER_NUM))) |
| print("错误数量:", ERROR_NUM) |
| print(INDEX) |
| |
| |
| if __name__ == '__main__': |
| press_url = 'https://blog.csdn.net/m0_37886429/article/details/89020455' |
| TIME_LENS = [] |
| INDEX = 0 |
| THREAD_NUM = 1 |
| ONE_WORKER_NUM = 5 |
| LOOP_SLEEP = 0 |
| ERROR_NUM = 0 |
| |
| obj = Presstest(press_url) |
| obj.run()``` |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南