locust的

Running Locust in Step Load Mode
If you want to monitor your service performance with different user load and probe the max tps that can be achieved, you can run Locust with Step Load enabled with --step-load:

如果你想分阶段递增并发用户数压测,找到系统最大的QPS,你可以用--step-load --step-users XX --step-time XX命令,不用再手动去增加用户数和压测时间。

譬如:

locust -f D:\api_locust\fm_api\locust_api\XXX.py  --master  --master-bind-port 9800 --headless -u 800 -r 50 --expect-worker 10 -t 50m -s 10  --step-load --step-users 200 --step-time 10m --csv D:\locustlog\ 

总共发起800并发请求,每秒启动50个用户,当启动到200用户数时,持续运行10分钟,运行步骤大致如下:

(1)4s启动到200

(2)200用户数:10分钟

(3)4s启动到400

(4)400用户数:10分钟

(5)4s启动到600

(6)600用户数:10分钟

(7)4s启动到800

(8)800用户数:10分钟

(9)800用户数:50-40=10分钟(小于10分钟)

压测结果如图:

locust的

 

可以得出系统qps最大也就550左右,后边随着并发数提升没有提升,唯一提升是平均响应时间。

通过 --step-load --step-users这样的命令就不用再折腾弄命令了。

关于压测结果图的生成,也很简单的,上面的压测命令会把压测的历史记录写到csv文件里,

读取csv文件再生成报表即可:

python用到的模块pyecharts

pyecharts文档地址:http://pyecharts.org/#/zh-cn/intro

贴个代码示例:

 1 # -*- coding = utf-8 -*-
 2 # ------------------------------
 3 # @time: 2020/8/15 16:05
 4 # @Author: drew_gg
 5 # @File: deal_csv.py
 6 # @Software: api_locust
 7 # ------------------------------
 8 
 9 import time
10 import csv
11 from pyecharts.charts import Line
12 from pyecharts import options as opts
13 from pyecharts.globals import ThemeType
14 
15 """
16 # pyecharts使用文档
17 # http://pyecharts.org/#/zh-cn/intro
18 """
19 excel_path = "D:\\_stats_history.csv"
20 
21 tm = []
22 uc = []
23 qps = []
24 fps = []
25 avg_time = []
26 with open(excel_path, 'r') as f:
27     cv = csv.reader(f)
28     for x, i in enumerate(list(cv)):
29         if x != 0:
30             tm.append(time.strftime('%H:%M:%S', time.localtime(int(i[0]))))
31             uc.append(i[1])
32             qps.append(i[4])
33             fps.append(i[5])
34             avg_time.append(i[21])
35 
36 line = (
37     Line(init_opts=opts.InitOpts(theme=ThemeType.CHALK, width="1500px", height="800px"))
38     .add_xaxis(tm)
39     .add_yaxis('user', uc, is_smooth=True)
40     .add_yaxis('qps', qps, is_smooth=True)
41     .add_yaxis('fps', fps, is_smooth=True)
42     .add_yaxis('avg_t', avg_time, is_smooth=True)
43     # .add_yaxis("qps", qps, markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),)
44     .set_global_opts(
45         title_opts=opts.TitleOpts(title="getConf接口压测情况【总请求数:1418818, QPS: 554.02】"),
46         tooltip_opts=opts.TooltipOpts(trigger="axis"),
47         toolbox_opts=opts.ToolboxOpts(is_show=True, orient="vertical", pos_left="1%",  pos_top="10%"),
48         xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
49     )
50 )
51 line.render("mycharts1558.html")

总请求数与qps可以读取另外个csv文件获取,这里就写死一个

关于报表的生成,不动的自行去文档地址仔细研究研究,挺全的,各种报表样式都有。

 

上一篇:Django + pyecharts 实现数据可视化


下一篇:小白学Python(14)——pyecharts 绘制树形图表 Tree