当前位置:网站首页>Locust 之 User
Locust 之 User
2022-08-07 21:56:00 【小刘学安卓】
User类代表虚拟用户,User对象被孵化出来攻击需要进行压力测试的系统。我们来看看它的真身。User对象的行为取决于它内部的tasks。即可以直接在User类内部通过@tasks装饰器修饰方法的方式来声明tasks,也可以通过设置tasks属性来声明。
User类通常应该被定义了一些列client的子类继承。比如当压力测试一个http系统时,你可能就想要使用HttpUser类。
一、成员变量
1、host: Optional[str] = None
代表被攻击的主机
2、wait_time = constant(0)
wait_time其实是一个函数类型,返回的是连续两个task执行的间隔时间,单位是秒。可以被覆写。
3、tasks: List[Union[TaskSet, Callable]] = []
这个属性就和TaskSet中的tasks属性定义的是一模一样了。
4、weight = 1
在执行任务时,user被旋转的可能性,值越大,越可能被选中
5、abstract = True
如果abstract = True,说明这个类将被子类继承。并且locust在测试过程中不会孵化这个类的模拟用户。
二、成员函数
1、__init__(self, environment) 构造器
def __init__(self, environment):
super().__init__()
self.environment = environment
"""A reference to the :py:class:`Environment <locust.env.Environment>` in which this user is running"""
self._state = None
self._greenlet: greenlet.Greenlet = None
self._group: Group
self._taskset_instance: TaskSet = None
- 创建User对象需要传入environment对象,这个对象具体是什么后面再研究;
- 初始化user的状态self._state = None;
- 初始化Greenlet对象self._greenlet: greenlet.Greenlet = None,这个涉及到协程,要好好研究下!
- 初始化所属组self._group: Group
- 最后初始化一个TaskSet任务集合对象self._taskset_instance: TaskSet = None
2、on_start(self)和on_stop(self) 开始和结束测试
实现体为空,由子类实现。
3、run(self) 任务执行器
@final
def run(self):
self._state = LOCUST_STATE_RUNNING
self._taskset_instance = DefaultTaskSet(self)
try:
# run the TaskSet on_start method, if it has one
self.on_start()
self._taskset_instance.run()
except (GreenletExit, StopUser):
# run the on_stop method, if it has one
self.on_stop()首先使用了@final注解,表示这个函数不能被子类覆写。所以user执行任务的处理逻辑是不变的。
1、设置状态为running,表示要开始进行测试self._state = LOCUST_STATE_RUNNING;
2、创建taskset实例,使用的是DefaultTaskSet类,传入User实例自身self作为TaskSet构造器的parent参数。即User是TaskSet的父亲。
User.py
self._taskset_instance = DefaultTaskSet(self)
TaskSet.py
def __init__(self, parent: "User") -> None:3、执行self.on_start() 执行user实例自身的on_start()方法;
4、执行self._taskset_instance.run() 执行user中tasks中的任务
5、当出现异常时被捕获,在ctach中执行self.on_stop结束测试。
边栏推荐
- leetcode 232. Implement Queue using Stacks 用栈实现队列(简单)
- win7不显示文件扩展名怎么办 win7显示文件扩展名方法
- LeetCode_双指针_中等_633.平方数之和
- 在阿里云进行磁盘扩容操作后,ECS实际使用磁盘并没有扩容?阿里云ECS磁盘扩容操作
- Use phpstudy (small skin panel) to configure the record of the local PHP development environment
- 怎么查询宽带账号密码 如何查宽带账号和密码
- leetcode 232. Implement Queue using Stacks 用栈实现队列(简单)
- [kali-privilege escalation] (4.2.3) Social Engineering Toolkit: QR Code Combination Attack
- 小米3手机怎样连接电脑 小米3连接电脑传文件的教程
- golang方法的使用细节:参数默认是值拷贝,不仅仅是struct自定义数据类型也可以绑定方法、方法名称首字母大写为public权限、String()方法的使用
猜你喜欢

怎么打开win7任务管理器的六种最详细方法

【瑞吉外卖】day03:完善登录功能与新增员工

Thymeleaf

MySQL隔离性实现原理

UE4 Sequence adds basic animation effects (02-switch action)

【kali-权限提升】(4.2.3)社会工程学工具包:二维码组合攻击

STC4054锂电池充电IC

golang方法的使用细节:参数默认是值拷贝,不仅仅是struct自定义数据类型也可以绑定方法、方法名称首字母大写为public权限、String()方法的使用

Redis分布式锁

Installing mysql under centos7.9 under Linux and some problems encountered
随机推荐
【kali-权限提升】(4.2.2)社会工程学工具包:web站点克隆钓鱼
Error - Junit unit test @Before not executed
dp数组解决背包问题
2022年茶艺师(中级)上岗证题目及在线模拟考试
报错 - Junit 单元测试@Before没有执行
冰冰学习笔记:类与对象(下)
UE4 Sequence添加基础动画效果 (01-物体移动)
没有鼠标怎么用键盘控制电脑 用键盘怎么代替鼠标移动
Icon和Ico图片的区别
数据库学习之基础内容
“蔚来杯“2022牛客暑期多校训练营6 G、J、B
A penetration test of the BC website
[kali-privilege escalation] (4.2.3) Social Engineering Toolkit: QR Code Combination Attack
数据仓库调度工具Azkaban的使用(一)
UE4 Sequence adds basic animation effects (01-object movement)
Leecode-SQL 1407. Top Traveler
STL——list
股票网上开户安全不,怎么开
双重队列问题
Leecode-SQL 1407. 排名靠前的旅行者