时间:2021-05-22
国庆重新学习了一下go的gin高性能测试框架。
用JMeter来测试gin与flask接口的性能,差别很大。
为什么我自己不尝试写一个性能工具,性能工具的核心就是 并发 和 请求。
请求可以选择Python的requests库。
并发可以通过python的 进程、线程、协程模拟。
这么一想,也不是很难了,上手撸一个。
依赖库
requests==2.22.0gevent==20.9.0numpy==1.19.2requests 大家并不陌生,HTTP请求库。
gevent是python协程库,通过协程模拟并发更节省资源,在同样配置下能模拟更多的并发。
numpy 是python的数据计算库,提供大量组数和矩阵运算,这里用它求列表的平均值。
实现脚本
好了,接下来开始上手写代码了。
from __future__ import print_functionimport timeimport geventfrom gevent import monkeymonkey.patch_all()import requestsfrom numpy import meanusers = 10 # 用户数numbers = 100 # 请求次数req_url = "http://127.0.0.1:8080/user/tom" # 请求URLprint("请求URL: {url}".format(url=req_url))print("用户数:{},循环次数: {}".format(users, numbers))print("============== Running ===================")pass_number = 0fail_number = 0run_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 性能测试工具的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
gevent是python的协程模块,协程可以理解成更轻量化的线程。因为性能测试工具的一些限制,就自己萌发了自己写性能测试工具的念想,当然,写的比较简单,比如缺
介绍Anopensourceloadtestingtool.一个开源性能测试工具。defineuserbehaviourwithpythoncode,andsw
speedtest-cli是Linux下的一个上下行网速测试工具,是一个用Python写的命令行脚本。电脑测试网速这个功能估计大家都用过,但是服务器需要测试外网
性能测试一般流程如下: 1、性能需求分析。性能需求分析是整个性能测试工作开展的基础。 2、性能测试计划。确定明确的需求之后,要做的工作就是制定性能测试计划。
性能测试测的方法如下: 1、性能需求分析。性能需求分析是整个性能测试工作开展的基础。 2、性能测试计划。确定明确的需求之后,要做的工作就是制定性能测试计划。