Python中使用locust做性能测试时,方法初始化与权重比设置

一,使用locust做性能测试时,初始化方法介绍

使用locust做接口性能测试时,经常会有B接口需要A接口的传参,此时需要在初始化中先执行A接口获取响应值,再传给B接口
参考下面的例子, on_start 方法是初始化方法,One,Two两个方法是性能测试方法,实际执行时会先执行 on_start ,中间执行One,Two,测试结束执行 on_stop
为了测试输出内容,方法中只有写入文档操作,具体数据可以查看同目录的 Report.csv 文件

#coding=utf-8
from locust import TaskSet, task,HttpUser

class MyTaskSet(TaskSet):
    def WriteCSV(self,Str):
        FilePath = "Report.csv"
        with open(FilePath,"a") as FileOBJ:
            FileData = FileOBJ.write(Str+"\n")

    def on_start(self):
        OnStartStr = "TaskSet on_start"
        self.WriteCSV(OnStartStr)
    @task
    def one(self):
        OneStr = "任务1"
        self.WriteCSV(OneStr)
    @task
    def two(self):
        TwoStr = "任务2"
        self.WriteCSV(TwoStr)
    def on_stop(self):
        OnStop = "TaskSet on_stop"
        self.WriteCSV(OnStop)

class WebsitUser(HttpUser):
    weight = 1
    tasks = [MyTaskSet]
    host = "http://www.baidu.com"
    min_wait = 5000
    max_wait = 6000
    stop_timeout = 10



'''
点击STOP,会停止测试,并调用所有当前执行的TaskSet的on_stop,但不会调用teardown函数
ctrl +c,表示停止locust运行,此时会调用TaskSet teardown # 停止locust运行时执行,Locust teardown  # 停止locust运行时执行,(而不会调用TaskSet的on_stop,点击STOP,会停止测试,并调用所有当前执行的TaskSet的on_stop,但不会调用teardown函数)

stop_timeout:Locust停止的秒数,如果为None,将不停止一直执行任务,单位为s秒
-H:指定测试的主机地址(注:会覆盖Locust类指定的主机地址)
-f:指定测试脚本地址(注:脚本中必须包含一个Locust的衍生类)
--no-web:不启动web网页,而是直接开始运行测试,需提供属性-c和-r
-c:并发的用户数,与--no-web一起使用
-r:每秒启动的用户数,与--no-web一起使用
-t:运行时间(单位:秒),与--no-web一起使用
-L:日志级别,默认为INFO
调试命令:locust -f **.py --no-web -c 1 -t 1
运行命令:locust -f **.py


TaskSet on_start  # 每一次开始一个任务时执行
TaskSet tasks…
TaskSet on_stop   # 点击页面stop时,当前所有在执行中的TaskSet执行

'''

二,使用locust做性能测试时,权重介绍

  1. 使用task标签的方式
    还是拿上面的代码作为例子,One方法的权重为 80%,Two方法的权重为 20%,分别在方法的装饰器中设置相应的比例,最后查看文档输出结果,与设置的比例一致
#coding=utf-8
from locust import TaskSet, task,HttpUser

class MyTaskSet(TaskSet):
    def WriteCSV(self,Str):
        FilePath = "Report.csv"
        with open(FilePath,"a") as FileOBJ:
            FileData = FileOBJ.write(Str+"\n")

    def on_start(self):
        OnStartStr = "TaskSet on_start"
        self.WriteCSV(OnStartStr)
    @task(4)
    def one(self):
        OneStr = "任务1"
        self.WriteCSV(OneStr)
    @task(1)
    def two(self):
        TwoStr = "任务2"
        self.WriteCSV(TwoStr)
    def on_stop(self):
        OnStop = "TaskSet on_stop"
        self.WriteCSV(OnStop)

class WebsitUser(HttpUser):
    weight = 1
    tasks = [MyTaskSet]
    host = "http://www.baidu.com"
    min_wait = 5000
    max_wait = 6000
    stop_timeout = 10

在这里插入图片描述
2. 以tasks字典的方式设置权重
代码如下,最后查看报告文件,设置项同样生效

#coding=utf-8
from locust import TaskSet, task,HttpUser

class MyTaskSet(TaskSet):
    def WriteCSV(self,Str):
        FilePath = "Report.csv"
        with open(FilePath,"a") as FileOBJ:
            FileData = FileOBJ.write(Str+"\n")


    def on_start(self):
        OnStartStr = "TaskSet on_start"
        self.WriteCSV(OnStartStr)
    @task
    def one(self):
        OneStr = "任务1"
        self.WriteCSV(OneStr)
    @task
    def two(self):
        TwoStr = "任务2"
        self.WriteCSV(TwoStr)
    def on_stop(self):
        OnStop = "TaskSet on_stop"
        self.WriteCSV(OnStop)
    tasks = {
    
    one:4,two:1}


class WebsitUser(HttpUser):
    weight = 1
    tasks = [MyTaskSet]
    host = "http://www.baidu.com"
    min_wait = 5000
    max_wait = 6000
    stop_timeout = 10

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhuan_long/article/details/111219368