Locust 测试结果趋势图分析

目的:

相信大家对于使用Loadrunner测试后的结果分析详细程度还是有比较深刻的感受的,每个请求,每个事务点等都会有各自的趋势指标,在同一张图标中展示。如下图:

而Locust自身提供的chart趋势图缺很简单,如下图:

那么要达到Loadrunner对于每个请求的详细的描述,用locust能否实现呢?

答案是肯定的,那么我们想到就开始做!

思路:

我们整理一下思路,按照步骤去达到我们的目的:

1. 首先我们需要知道每个请求的响应时间

2. 我们需要把每个请求的响应时间进行数据整理和拆分

3. 我们需要把整理好的数据生成图标

实施:

按照初步的思路,我们来按步骤进行实施:

1. 抓取每个请求的响应时间。

我们需要获取每个请求的响应时间,可以通过Locust本身自带的钩子函数打印成日志文件。

具体代码如下:

#!/usr/bin/python3.6
# -*- coding: UTF-8 -*-
# author:Lucien
# 基础包: 压力Log日志封装
from locust import events
import os
import time
import logging
from logging.handlers import RotatingFileHandler


class loadLogger():
    def __init__(self, filePath, fileName):
        self.filePath = filePath  # 存放文件的路径
        self.fileName = fileName  # 存放文件的名字
        self.BACK_UP_COUNT = 5000  # 文件分割上限数
        self.MAX_LOG_BYTES = 1024 * 1024 * 1  # 单个文件最大记录数1M
        self.create_handler()  # 初始化创建日志handler
        self.create_logger()  # 初始化创建Logger

    def create_handler(self):  # 建立handler
        self.success_handler = RotatingFileHandler(filename=os.path.join(self.filePath, self.fileName),
                                                   maxBytes=self.MAX_LOG_BYTES * 100, backupCount=self.BACK_UP_COUNT,
                                                   delay=1)  # 分割文件处理按100m分割
        formatter = logging.Formatter('%(asctime)s | %(name)s | %(levelname)s | %(message)s')  # 设定输出格式
        formatter.converter = time.gmtime  # 时间转换
        self.success_handler.setFormatter(formatter)  # 格式加载到handler

    def create_logger(self):  # 建立Logger
        self.success_logger = logging.getLogger('request_success')
        self.success_logger.propagate = False
        self.success_logger.addHandler(self.success_handler)

    def success_request(self, request_type, name, response_time, response_length):  # 成功日志输出格式加载到Logger中
        msg = ' | '.join([str(request_type), name, str(response_time), str(response_length)])
        self.success_logger.info(msg)

    def get_locust_Hook(self):  # 钩子挂载到Locust中
        events.request_success += self.success_request

以上为封装好的Log日志输出

在并发时带入log日志输出为本地文件存放,代码如下:

# !/usr/bin/python3.6
# -*- coding: UTF-8 -*-
# author: lucien
# 基础包: locust趋势图生成包
from locust import TaskSet, task, HttpLocust
from Performance_Core.performance_log import loadLogger
import os


class file_server_stress(TaskSet):
    def on_start(self):
        '''警号,部门编号等'''
        self.deptID = '520'
        self.pcMemberID = '10000001'
        self.phoneMemberID = '10000004'
        self.logger = loadLogger(filePath='E:\\PrintLog', fileName='11-12-logs')

    # 上传文件
    @task(1)
    def update_file(self):
        payload = "xxx"
        url = ':6061/file/upload/file'
        headers = {
            'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
            'Cache-Control': "no-cache",
            'Postman-Token': "9889c0b4-b91c-4b23-a713-cae4d60e623a"
        }
        response = self.client.post(url=url, data=payload, headers=headers, name='update_file', catch_response=True,
                                    timeout=20)
        print(response.text)
        # 验证请求成功与失败
        if response.status_code == 200:
            self.logger.get_locust_Hook() #重点!此处挂载Log日志钩子
            response.success()
        else:
            self.logger.get_locust_Hook()
            response.failure('上传文件失败')

class userbehavior(HttpLocust):
    host = 'http://192.168.1.222'
    task_set = file_server_stress
    min_wait = 3000
    max_wait = 5000

if __name__ == '__main__':
    '''网页启动,在网页中输入127.0.0.1:8089'''
    os.system('locust -f file_server_stress.py --web-host=127.0.0.1')  

猜你喜欢

转载自www.cnblogs.com/grandlulu/p/10001945.html