zoukankan      html  css  js  c++  java
  • 利用locust进行压测,检验一下之前搭建的性能监控平台

    利用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(f'http://xxx.xx.xx.xx:8888/api/v1/ys?{bhAJ}&ssdw=1',params=params1, headers=self.header)
            params2 = {"bhAj": bhAJ, "ssdw": "2"}
            self.client.delete(f'http://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的仪表盘的数据也没有进行一些调整,让数据更加清晰。

  • 相关阅读:
    SQL优化大全
    程序的装入和链接
    Linux系统管理常用命令
    作业、进程、线程
    MySQL优化大全
    Linux系统结构 详解
    NoSQL数据库探讨
    操作系统内存管理——分区、页式、段式管理
    进程调度算法
    操作系统文件管理
  • 原文地址:https://www.cnblogs.com/fccyccf/p/13231546.html
Copyright © 2011-2022 走看看