一、Locust类详细说明

Locust类中的属性有:

client属性:

task_set: 指向一个TaskSet类,TaskSet类定义了用户的任务信息,该属性为必填;

max_wait/min_wait: 每个用户执行两个任务间隔时间的上下限(毫秒),具体数值在上下限中随机取值,若不指定则默认间隔时间固定为1秒;

host:被测系统的host,当在终端中启动locust时没有指定--host参数时才会用到;

weight:同时运行多个Locust类时会用到,用于控制不同类型任务的执行权重。

在运行结果中发现job2是job1事件执行频率的2倍;

如果希望让某个 locust 类经常被执行,可以在这些类上设置一个 weight 属性。

二、TaskSet类详细说明

TaskSet类:实现了虚拟用户所执行任务的调度算法,包括规划任务执行顺序(schedule_task)、挑选下一个任务(execute_next_task)、执行任务(execute_task)、休眠等待(wait)、中断控制(interrupt)等等。

在此基础上,我们就可以在TaskSet子类中采用非常简洁的方式来描述虚拟用户的业务测试场景,对虚拟用户的所有行为(任务)进行组织和描述,并可以对不同任务的权重进行配置。

在TaskSet子类中定义任务信息时,可以采取两种方式,@task装饰器和tasks属性。

2.1 TaskSet类详细说明--@task装饰器

采用@task装饰器定义任务:

代码演示:

from locust import TaskSet, task

class UserBehavior(TaskSet):

@task(1)

def test_job1(self):

self.client.get('/job1')

@task(2)

def test_job2(self):

self.client.get('/job2')

@task(1)中的数字表示任务的执行频率,数值越大表示执行的频率越高

2.2 TaskSet类详细说明--tasks属性

采用tasks属性定义任务:

代码演示:

from locust import TaskSet

def test_job1(obj):

obj.client.get('/job1')

def test_job2(obj):

obj.client.get('/job2')

class UserBehavior(TaskSet):

tasks = {test_job1:1, test_job2:2}

说明:

tasks = {test_job1:1, test_job2:2}中,test_job1:1,test_job2:2表示事件执行的频率,即test_job2的执行频率是test_job1的两倍

2.3 TaskSet类详细说明--on_start函数

on_start函数是在Taskset子类中使用比较频繁的函数。在正式执行测试前执行一次,主要用于完成一些初始化的工作。

例如,当测试某个搜索功能,而该搜索功能又要求必须为登录态的时候,就可以先在on_start中进行登录操作,HttpLocust使用到了requests.Session,因此后续所有任务执行过程中就都具有登录态了

2.4 TaskSet类详细说明--控制任务的执行顺序

在TaskSequence类中,使用装饰器@seq_task()可以用来控制任务的执行顺序;里面的数值越小执行越靠前;

代码举例:

2.5 TaskSet类详细说明--休眠等待(wait)

在Taskset类中,内置WAIT_TIME功能,它用于确定模拟用户在执行任务之间将等待多长时间。Locust提供了一些内置的函数,返回一些常用的wait_time方法。

1、between(min,max)函数:用得比较多的函数

wait_time = between(3.0, 10.5):任务之间等待的时间是3到10.5秒之间的任意时间

2、constant(number)函数:

wait_time=constant(3):任务之间等待的时候是3秒钟,且等待的时候不能超过任务运行的总时间,也就是在执行py文件时设置的时间

3、constant_pacing(number)函数:

wait_time=constant_pacing(3):所以任务每隔3秒执行,但是当到达运行的总时间时,任务运行结束;

2.6 TaskSet类详细说明--TaskSets 嵌套

现实中有很多任务其实也是有嵌套结构的,比如用户打开一个网页首页后,用户可能会不喜欢这个网页直接离开,或者喜欢就留下来,留下来的话,可以选择看书、听音乐、或者离开;

代码举例:

2.7 TaskSet类详细说明--中断控制(interrupt)

在有Taskset嵌套的情况下,执行子任务时, 通过 self.interrupt() 来终止子任务的执行, 来回到父任务类中执行, 否则子任务会一直执行;

在上一页的案例中,在stay这个类中,对interrupt()方法的调用是非常重要的,这可以让一个用户跳出stay这个类有机会执行leave这个任务,否则他一旦进入stay任务就会一直在看书或者听音乐而难以自拔。

三、Locust中实现参数化

在进行接口多用户并发测试时,数据的重复使用可能会造成脚本的失败,那么需要对用户数据进行参数化来使脚本运行成功。

情景一

在此我们举出百度搜索的例子,假设每个人搜索的内容是不相同的;那么我们可以假设把数据放到队列中,然后从队列中依次把数据取出来;

可以利用python中Queue队列来进行处理;

Queue的种类:

Queue.Queue(maxsize=0):先进先出队列

Queue.LifoQueue(maxsize=0):后进先出队列

Queue.PriorityQueue(maxsize=0):构造一个优先队列

参数maxsize是个整数,指明了队列中能存放的数据个数的上限。一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉。如果maxsize小于或者等于0,队列大小没有限制

Queue的基本方法:

Queue.Queue(maxsize=0) 如果maxsize小于1就表示队列长度无限

Queue.LifoQueue(maxsize=0) 如果maxsize小于1就表示队列长度无限

Queue.qsize() 返回队列的大小

Queue.empty() 如果队列为空,返回True,反之False

Queue.full() 如果队列满了,返回True,反之False

Queue.get([block[, timeout]]) 读队列,timeout等待时间

Queue.put(item, [block[, timeout]]) 写队列,timeout等待时间

Queue.queue.clear() 清空队列

情景二

个别情况下测试数据可重复使用,因此我们可以把参数化数据定义为一个列表,在列表中取出数据;

四、Locust中实现关联

在某些请求中,需要携带之前response中提取的参数,常见场景就是session_id。Python中可用通过re正则匹配,对于返回的html页面,可用采用lxml库来定位获取需要的参数;

我们以Phpwind登陆的来进行举例,在登陆的接口中需要把token参数传给服务器,token的值由页的接口返回;

方法一:使用正则表达式

方法二:采用lxml库来定位获取需要的参数

技术点:

1、导模块:lxml模块

2、etree.HTML() 从返回html页面获取html文件的dom结构

3、xpath() 获取token的xpath路径

五、Locust中实现断言

在进行性能测试时,断言是必须的。比如你在请求一个页面时,就可以通过状态来判断返回的 HTTP 状态码是不是 200。

在locust中通过with self.client.get("url地址",catch_response=True) as response的形式;

通过 client.get() 方法发送请求,将整个请求的给 response, 通过 response.status_code 得请求响应的 HTTP 状态码。如果不为 200 则通过 response.failure('Failed!') 打印失败!如果断言失败后会加到统计错误表中

pythonlocust使用技巧_python+locust性能测试(二)之locust深入使用相关推荐

  1. 性能测试框架——python+locust

    目录 性能测试测试点 指标体系 用户数 监控windows系统指标 使用Python监控系统资源 安装和使用 安装 代码模板 问题处理 locust启动参数 性能测试测试点 分类:负载测试.压力测试. ...

  2. 【Locust性能测试】基本用法

    目录 一.Locust优势 二.Locust脚本编写基本步骤 三.多任务业务场景权重分配 四.Locust集合点的设置 五.Locust分布式部署 六.图表参数分析 一.Locust优势 在模拟有效并 ...

  3. pythonlocust使用方法_python locust 性能测试:locust安装和一些参数介绍

    安装参考 https://www.cnblogs.com/fnng/p/6081798.html ps:python3.7暂不支持locust:python3安装建议克隆github上的项目 可能需要 ...

  4. python locust最新版_python locust 性能测试:locust安装和一些参数介绍

    安装参考 https://www.cnblogs.com/fnng/p/6081798.html ps:python3.7暂不支持locust:python3安装建议克隆github上的项目 可能需要 ...

  5. python locust 能压测数据库_python locust 性能测试:HOOKS钩子方法

    为locust中不同类型的事件,提供的钩子方法: from locust import TaskSet, task, events, Locust from locust.clients import ...

  6. python locust提取参数_python+locust性能测试学习笔记

    前言 Locust(俗称 蝗虫)一个轻量级的开源压测工具,基本功能是用Python代码描述所有测试.不需要笨拙的UI或庞大的XML,只需简单的代码即可. 环境安装 Locust支持Python 2.7 ...

  7. locust性能测试图表参数以及分析

    一.locust性能测试图表参数1 1.type:请求类型 2.name:请求路径 3.requests:当前请求的数量 4.fails:当前请求失败的数量 5.median:中间值,单位毫秒,一半服 ...

  8. locust性能测试操作步骤

    locust性能测试操作步骤 一.需求 二.步骤 1.python编写性能测试脚本 2.通过命令行执行脚本 3.启动locust 4.进行虚拟用户数设置 5.启动locust,进行性能测试 6.获取性 ...

  9. 重构(Refactoring)技巧读书笔记 之二

    重构(Refactoring)技巧读书笔记 之二<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:of ...

最新文章

  1. Robot 3D Map Navigation
  2. 招聘 | 旷视研究院博士后招聘
  3. 超简易复制Model对象(为后续备忘录设计模式博文做铺垫)
  4. 当前工作目录Python
  5. CDOJ 482 Charitable Exchange bfs
  6. Python爬虫1-----------placekitten 入门
  7. 【Python学习】 - Pandas学习 sort_value( ),sort_index( )排序函数的区别与使用
  8. css字体样式代码大全_这都2020年了,还没了解CSS?
  9. python 生成 和 加载 requirements.txt
  10. 线程同步机制的区别与比较及进程通信方法
  11. 【教程】Android系统手机 菜鸟扫盲汇总
  12. 电脑计算机c盘缓存清理,电脑资深玩家教你如何有效进行C盘清理
  13. 计数显示器c语言程序,单片机计数显示器.doc
  14. 现代控制工程(二)状态方程的解
  15. ARM处理器性能对比
  16. windows7打印时,显示脱机,提示“服务器打印后台处理程序服务没有运行”。...
  17. 制作深山红叶(WinPe)运行在usb盘中的方法
  18. python获取列表数字的下标
  19. 手机IO workload解析
  20. 云服务器和独享虚拟主机的区别,云服务器和独享虚拟主机的区别

热门文章

  1. arcgis Server 站点创建报错 Server machine is not a local server machine
  2. 火柴棍等式(暴力枚举)
  3. 传统企业如何定位B2B平台进行网络营销
  4. 游戏项目开发经验分享
  5. 淘宝特价版多店铺订单管理应该怎么做?初征来教你
  6. SHARC音频DSP的算法详解(一)数字信号里的定点数和浮点数
  7. 2022年全球市场氧气助推器总体规模、主要生产商、主要地区、产品和应用细分研究报告
  8. c#中cookies的存取操作
  9. JAVA学习生涯开始
  10. npm安装包报错问题及解决