python 写一个性能测试工具(一)
国庆重新学习了一下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__importprint_function importtime importgevent fromgeventimportmonkey monkey.patch_all() importrequests fromnumpyimportmean 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=[] defrunning(url): globalfail_number globalpass_number for_inrange(numbers): start_time=time.time() r=requests.get(url) ifr.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_urlinrange(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来判断是否成功,通过分别计算成功和失败的请求个数。
关于请求时间统计,在每次请求前后获得当前时间戳,然后计算时间差就是单个接口的调用时间。最大,最小,平均通过计算就可轻松的得到。
>python3ab.py 请求URL:http://127.0.0.1:8080/user/tom 用户数:10,循环次数:100 ==============Running=================== ............................................................................................................... ............................................................................................................... ............................................................................................................... ............................................................................................................... ............................................................................................................... ............................................................................................................... ............................................................................................................... ............................................................................................................... ............................................................................................................... . ==============Results=================== 最大:0.0352s 最小:0.0036s 平均:0.0204s 请求成功1000 请求失败0 ==============end===================
后续
把ab.py脚本做成ab命令行工具。
支持更多的请求类型(get/post/put/delete)和参数。
更多统计维度,吞吐量、吞吐率
增加启动时间,思考时间等
...
以上就是python写一个性能测试工具(一)的详细内容,更多关于python性能测试工具的资料请关注毛票票其它相关文章!