首页 > 其他 > 详细

利用locust进行压测,检验一下之前搭建的性能监控平台

时间:2020-07-03 18:29:35      阅读:82      评论:0      收藏:0      [点我收藏+]

利用locust进行压测,检验一下之前搭建的性能监控平台

不写一行代码,搭建性能监控平台:https://www.cnblogs.com/fccyccf/articles/13161975.html

小试牛刀:

本次压测对象:

t3-要素服务(要素服务是为了为各个系统提供原被告要素表的系统,主要流程就是填写原被告要素表,同步至各系统)

服务器:xxx.xx.xx.xx(服务器资源不足,这里只是为了试验一下,得记录一下服务器本身状态,红框里就是本次要压测的对象)

技术分享图片

locust脚本:(由于该项目的流程很简单,我就直接用locust写了脚本来压测,这里贴一下脚本)

有对locust感兴趣的可以自行了解一下,之前我也有发关于locust的帖子,但是locust更新的挺快的,之前的一些语法有些已经被弃用了...

from idna import unicode
from locust import HttpLocust, TaskSet, task, User, HttpUser, between
import json
import uuid
import os
import time
?
?
class MyTasks(TaskSet):
?
    header = {"Content-Type": "application/json", "systemid": "yanpan", "authcode": "7ef54175f9d97b7ed26aeb2b5f121f40"}
    ygdatas = json.load(open(ygys.json, r, encoding=UTF-8))  #原告要素表
    bgdatas = json.load(open(bgys.json, r, encoding=UTF-8))  #被告要素表
    def get_bh(self):
        bh = ‘‘.join(str(uuid.uuid4()).split(-))  # 通过python生成uuid
        return bh
?
    def get_bhAJ(self):
        bhAj = ‘‘.join(str(uuid.uuid4()).upper().split(-))  #通过python生成uuid
        return bhAj
?
    #获取要素填写的前端页面(为了使场景更真实一点)
    def GetYsui(self):
        self.client.get(http://xxx.xx.xx.xx:8000/lhjf-yg?ygsf=2&systemid=yanpan&authcode=7ef54175f9d97b7ed26aeb2b5f121f40&ay=9015&ssdw=1&jbfy=2400&bhAj=298C0D590F06D08DD773BAF9C7C49049&dsr=FD63B3C0D12A78A58DCF6D6A6C4D4A78&gldsr=&sfkbj=1&dc=1&dy=1&zc=1&bc=1&qrtj=1&gbgwdt=1&fymc=%E6%B9%96%E5%8D%97%E7%9C%81%E9%AB%98%E7%BA%A7%E4%BA%BA%E6%B0%91%E6%B3%95%E9%99%A2001&ah=%EF%BC%882018%EF%BC%89%E6%B9%98%E6%B0%91%E5%88%9D696%E5%8F%B7&time=1593599607909&ywlx=30100,headers=self.header)
?
    #填写原告要素表
    def Writeygysb(self, ygdatas):
        # 填写原告要素表
        self.GetYsui()
        time.sleep(1)
        self.client.post("http://xxx.xx.xx.xx:8000/yaosu/api/v1/ys", headers=self.header, data=ygdatas)
?
    #填写被告要素表
    def Writebgysb(self, bgdatas):
        # 填写被告要素表
        self.GetYsui()
        time.sleep(1)
        self.client.post("http://xxx.xx.xx.xx:8000/yaosu/api/v1/ys", headers=self.header, data=bgdatas)
?
?
    #清除库里由于压测添加的脏数据
    def delete(self, bhAJ):
        params1 = {"bhAj": bhAJ, "ssdw": "1"}
        self.client.delete(fhttp://xxx.xx.xx.xx:8888/api/v1/ys?{bhAJ}&ssdw=1,params=params1, headers=self.header)
        params2 = {"bhAj": bhAJ, "ssdw": "2"}
        self.client.delete(fhttp://xxx.xx.xx.xx:8888/api/v1/ys?{bhAJ}&ssdw=2,params=params2, headers=self.header)
?
    @task      #压测任务,将流程串联起来(获取前端页面-填写原被告要素表-清楚脏数据【这里清楚脏数据替代了同步的操作】)
    def YsPressureTest(self):
        # 填写原告要素表
        bh = self.get_bh()
        bhAj = self.get_bhAJ()
        self.ygdatas["bhAj"] = bhAj
        self.ygdatas["bh"] = bh
        self.bgdatas["bhAj"] = bhAj
        self.bgdatas["bh"] = bh
        ygdatas = json.dumps(self.ygdatas)
        bgdatas = json.dumps(self.bgdatas)
        self.Writeygysb(ygdatas)
        self.Writebgysb(bgdatas)
        self.delete(bhAj)
?
?
?
class RunLoadTests(HttpUser):
    ‘‘‘
    创建运行类
    ‘‘‘
    tasks = [MyTasks]
    wait_time = between(5, 10)  #每个用户5-10秒内执行一遍流程
?
?
if __name__=="main":
    os.system("locust -f test_load.py --web-host=127.0.0.1 --host=xxx.xx.xx.xx")
运行脚本开始压测:

技术分享图片

看看压测情况走势:

技术分享图片

再看看服务器资源:
技术分享图片
二者结合是可以看到一些结论的:

  从请求来分析:在用户量达到900前,随着用户量的增加,每秒的请求数跟随着增加,但是响应时间并没随着增加。但是当用户数量达到1000时,开始出现失败的请求,响应时间也激增,且随着时间向后,失败的请求增多,呈驼峰状。这说明用户量达到1000时(忽略服务器因素,本来就不是正式的性能测试),要素服务不再稳定。

  从服务器状态来分析:压测开始时,服务器cpu资源占用一直是上升状态,用户量达到1000时达到峰值且有大幅度波动,可能与失败的请求有关,内存也有涨幅,但是较为稳定。网络速度的上传下载也是随着用户量的增加一直增加着,在用户量达到1000时达到峰值。同时也能看到磁盘的写入写出(数据库也在此服务器上)。

  当然这只是简单的进行了一个分析,这毕竟不是专门的性能测试。grafana的仪表盘的数据也没有进行一些调整,让数据更加清晰。

利用locust进行压测,检验一下之前搭建的性能监控平台

原文:https://www.cnblogs.com/fccyccf/p/13231546.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!