国庆重新学习了一下go的gin高性能测试框架。
用JMeter来测试gin与flask接口的性能,差别很大。
为什么我自己不尝试写一个性能工具,性能工具的核心就是 并发 和 请求。
请求可以选择Python的requests库。
并发可以通过python的 进程、线程、协程模拟。
这么一想,也不是很难了,上手撸一个。
依赖库
requests==2.22.0 gevent==20.9.0 numpy==1.19.2
requests 大家并不陌生,HTTP请求库。
gevent是python协程库,通过协程模拟并发更节省资源,在同样配置下能模拟更多的并发。
numpy 是python的数据计算库,提供大量组数和矩阵运算,这里用它求列表的平均值。
实现脚本
好了,接下来开始上手写代码了。
from __future__ import print_function import time import gevent from gevent import monkey monkey.patch_all() import requests from numpy import mean users = 10 # 用户数 numbers = 100 # 请求次数 req_url = "http://127.0.0.1:8080/user/tom" # 请求URL print("请求URL: {url}".format(url=req_url)) print("用户数:{},循环次数: {}".format(users, numbers)) print("============== Running ===================") pass_number = 0 fail_number = 0 run_time_list = [] def running(url): global fail_number global pass_number for _ in range(numbers): start_time = time.time() r = requests.get(url) if r.status_code == 200: pass_number = pass_number + 1 print(".", end="") else: fail_number = fail_number + 1 print("F", end="") end_time = time.time() run_time = round(end_time - start_time, 4) run_time_list.append(run_time) jobs = [gevent.spawn(running, req_url) for _url in range(users)] gevent.wait(jobs) print("\n============== Results ===================") print("最大: {} s".format(str(max(run_time_list)))) print("最小: {} s".format(str(min(run_time_list)))) print("平均: {} s".format(str(round(mean(run_time_list), 4)))) print("请求成功", pass_number) print("请求失败", fail_number) print("============== end ===================")
设计思路
在JMeter中创建线程组有两个参数 线程数和 循环数,即 用户数 和请求数,设置多少个用户,每个用户用户跑多少次,用户数通过协程模拟,每次用户运行次数通过for循环实现。
至于请求就比较简单了,直接通过requests发送请求。通过判断影响的状态码是否为200来判断是否成功,通过分别计算成功和失败的请求个数。
关于请求时间统计,在每次请求前后获得当前时间戳,然后计算时间差就是单个接口的调用时间。最大,最小,平均通过计算就可轻松的得到。
> python3 ab.py 请求URL: http://127.0.0.1:8080/user/tom 用户数:10,循环次数: 100 ============== Running =================== ............................................................................................................... ............................................................................................................... ............................................................................................................... ............................................................................................................... ............................................................................................................... ............................................................................................................... ............................................................................................................... ............................................................................................................... ............................................................................................................... . ============== Results =================== 最大: 0.0352 s 最小: 0.0036 s 平均: 0.0204 s 请求成功 1000 请求失败 0 ============== end ===================
后续
把ab.py脚本做成 ab 命令行工具。
支持更多的请求类型(get/post/put/delete)和参数。
更多统计维度,吞吐量、吞吐率
增加启动时间,思考时间等
...
以上就是python 写一个性能测试工具(一)的详细内容,更多关于python 性能测试工具的资料请关注其它相关文章!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]