利用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的仪表盘的数据也没有进行一些调整,让数据更加清晰。

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