基于python locust库实现性能测试

网友投稿 520 2022-12-07


基于python locust库实现性能测试

Locust(俗称 蝗虫), 一个轻量级的开源压测工具,用python编写。

安装

pip3 install locust

Python编写性能测试脚本

import json

from locust import HttpLocust, TaskSet, task

"""

创建后台管理站点压测类,需要继承TaskSet

可以添加多个测试任务

"""

class AdminLoadTest(TaskSet):

# 用户执行task前调用

def on_start(self):

pass

# 用户执行task后调用

def on_stop(self):

pass

@task(1)

def download(self):

header = {"Content-Type": "application/json"}

data = {

"staff_id": 94

}

data = json.dumps(data)

self.client.post('/get_know_list', data=data, headers=header)

@task(2)

def body(self):

header = {"Content-Type": "application/json"}

data = {

"staff_id": 94

}

data = json.dumps(data)

self.client.post('/get_answer_list', data=data, headers=header)

class RunLoadTests(HttpLocust):

"""

创建运行压测类

"""

task_set = AdminLoadTest

min_wait = 1000

max_wait = 50000

weight = 1

if __name__ == "__main__":

import os

os.system("locust -f test_download.py --host=http://127.0.0.1:5000")

AdminLoadTest类继承TaskSet类,用以描述用户行为:

使用@task装饰的方法为一个事务,方法的参数用于指定该行为的执行权重,参数越大每次被用户执行的概率越高,默认为1(事务blogs()被执行的概率是bky_index()的2倍);

on_start():每个locust用户执行测试事务之前执行一次,用于做初始化的工作,如登录;

on_stop(): 每次执行完测试事务之后执行一次。

RunLoadTests类用于设置性能测试属性:

task_set:指向定义的一个用户行为类;

min_wait:模拟用户在执行每个任务之间等待的最小时间,单位为毫秒;

max_wait:模拟用户在执行每个任务之间等待的http://最大时间,单位为毫秒(min_wait和max_wait默认值为1000,因此,如果没有声明min_wait和max_wait,则locust将在每个任务之间始终等待1秒。);

weight:一个文件中有多个locust用户类时,指定用户类的权重(默认新增locust用户时会随机选择一个用户类);

启动

终端进入代码目录,输入 locust -f start.py --host=http://localhost:5000

使用os.system在代码里面写入启动命令

各个参数的含义

-f : 指定要运行的测试脚本文件

--host : 要加载主机的URL前缀,不指定时,读取WebsiteUser类中定义的host;

--master : 单台机器不能模拟更多用户时,分布式模式,通过--master指定主进程;打开Locust的web界面

使用上面的命令行启动Locust之后,应该打开浏览器并将其指向http://localhost:8089/(如果您在本地运行Locust)。

Number of total users to simulate : 设置模拟用户数;Hatch rate(users spawned/second) : 每秒产生(启动)的虚拟用户数;

设置好模拟用户后,点击Start swarming开始测试,测试结果如下:

Type   :请求的类型,如GET/POST;

Name :请求的路径;

request :已发出请求数量;

fails :请求失败的数量;

Median :响应时间的中间值(单位:毫秒);

Average :平均响应时间(单位:毫秒);

Min :请求的最小响应时间(单位:毫秒);

Max :请求的最大响应时间(单位:毫秒);

Content Size:单个请求的大小(单位:字节);

reqs/sec:每秒钟请求的个数;


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:简单了解Java删除字符replaceFirst原理及实例
下一篇:Java如何实现Word文档分栏效果
相关文章

 发表评论

暂时没有评论,来抢沙发吧~