内容来自网络

http://blog.sina.com.cn/s/blog_a7ace3d80102w9r0.html

TaskSet类

正如字面意思,TaskSet类定义了每个用户的任务集合,测试任务开始后,每个Locust用户会从TaskSet中随机挑选(如果定义了任务间的权重关系,那么就是按照权重关系随机挑选)一个任务执行,然后随机等待Locust类中定义的min_wait和max_wait(如果TaskSet类中也定义了min_wait或者max_wait,按照TaskSet中的为准)之间的一段时间,执行下一个任务。

定义TaskSet中的任务有多种方式,比如使用@task修饰符、使用tasks属性。 

 from locust import Locust, TaskSet, task

 class UserTask(TaskSet):
@task(1)
def job1(self):
print 'This is job 1' @task(2)
def job2(self):
print 'This is job 2' class User(Locust):
task_set = UserTask

TaskSet的定义是可以嵌套的,因为考虑到现实中有很多任务其实也是有嵌套结构的,比如:

 from locust import Locust, TaskSet, task

 class UserTask(TaskSet):
@task(2)
class stay(TaskSet):
@task(3)
def readBook(self):
print 'I am reading a book.' @task(7)
def listenMusic(self):
print 'I am listening to music.' @task(1)
def logOut(self):
self.interrupt() @task(1)
def leave(self):
print 'I don not like this page.' class User(Locust):
task_set = UserTask

上面的例子中,要么用户不喜欢这个网页直接离开,要么喜欢就留下来,留下来的话,可以选择看书、听音乐、或者离开。

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

除了使用@task修饰符完成嵌套,也可以使用tasks属性,效果是一样的:

 from locust import Locust, TaskSet, task

 class stay(TaskSet):
@task(3)
def readBook(self):
print 'I am reading a book.' @task(7)
def listenMusic(self):
print 'I am listening to music.' @task(1)
def logOut(self):
self.interrupt() class UserTask(TaskSet):
tasks = {stay:2} @task(1)
def leave(self):
print 'I don not like this page.' class User(Locust):
task_set = UserTask

TaskSet类还有其他的有用方法:

  • on_start()函数 
    定义每个locust用户进入TaskSet之后开始做的第一件事。
  • locust属性 
    指向每个TaskSet所属的loucst用户实例。
  • parent属性 
    指向每个TaskSet所属的父类TaskSet,用在TaskSet有嵌套的情况,如果调用parent的TaskSet是最顶层的,则返回它所属的locust用户实例。
  • client属性 
    指向TaskSet所属的父HttpLocust类的client属性,self.client与self.locust.client效果是一样的。如果TaskSet所属的父类是个Locust类,则没有这个client属性。
  • interrupt(reschedule=True) 
    顶层的TaskSet(即被绑定到某个Locust类的task_set的第一层TaskSet)不能调用这个方法。reschedule置为True时,从被嵌套任务出来马上选择新任务执行,如果置为False,从被嵌套任务出来后,随机等待min_wait和max_wait之间的一段时间,再选择新任务执行。
  • schedule_task(task_callable, args=None, kwargs=None, first=False) 
    将一个可调用的对象task_callable添加进Locust对象(注意是针对某个Locust实例,而不是所有的Locust实例)的任务选择队列,其中args和kwargs是传递给可调用对象的参数,如果first置为True,则将其加到队首。

性能测试工具Locust的使用----TaskSet类~~task任务嵌套的更多相关文章

  1. 性能测试工具Locust,一个开源性能测试工具

    性能测试工具Locust,一个开源性能测试工具使用Python代码来定义用户行为.用它可以模拟百万计的并发用户访问你的系统.1.它与目前主流的LoadRunner和Jmeter玩法都不一样.2.它完全 ...

  2. 性能测试工具Locust

    An open source load testing tool. 一个开源性能测试工具. define user behaviour with python code, and swarm your ...

  3. 性能测试工具Locust的使用

    一.写在前面 官网:https://www.locust.io/ 官方使用文档:https://docs.locust.io/en/latest/ 大并发量测试时,建议在linux系统下进行. 二.L ...

  4. Python3中性能测试工具Locust安装使用

    Locust安装使用: 安装: python3中           ---> pip3 install locust 验证是否安装成功---> 终端中输入 locust --help  ...

  5. 开源性能测试工具Locust使用篇(二)

    那如何理解Locust和TaskSet这两个类呢? class HttpLocust(Locust) 在Locust类中,具有一个client属性,它对应着虚拟用户作为客户端所具备的请求能力,也就是我 ...

  6. 性能测试工具Locust的介绍和使用

    内容来自网络 https://www.w3xue.com/exp/article/20191/16707.html https://blog.csdn.net/qq_36255988/article/ ...

  7. 基于python的性能测试工具–locust

    现在有很多的性能测试工具,比如说我们熟悉的loadrunner.jmeter.ab.webbench等等,这些工具如果对一个没用过的朋友来说,学习起来比较不容易,但是如果你能看懂python代码,会写 ...

  8. 性能测试进阶:(一)性能测试工具Locust

    An open source load testing tool. 一个开源性能测试工具. define user behaviour with python code, and swarm your ...

  9. 开源性能测试工具Locust使用篇(三)

    脚本增强 面对较复杂的测试场景,我们可能还是会感觉无从下手:例如,很多时候脚本需要做关联或参数化处理,Locust中就不知道怎么实现了.可能也是这方面的原因,感觉难以将Locust应用到实际的性能测试 ...

随机推荐

  1. Alternative PHP Cache ( APC )

    简介: Alternative PHP Cache (APC) 是一个开放自由的PHP opcode 缓存.它的目标是提供一个自由.开放和健全的框架用于缓存和优化 PHP 的中间代码,加快 PHP 执 ...

  2. 编译boost.log模块遇到的一些问题

    线上日志用到的是日志库,在全局有一个锁,导致在高并发的时候,容易因为锁竞争问题导致时延.在某些情况下,会因为同一个用户,同时访问某个变量,导致读写冲突使线上服务整体core掉(考虑到请求的间隔,为了应 ...

  3. java 修改文件

    public void fileAlter(String fileName,String content) throws IOException{                 BufferedRe ...

  4. Go语言的基本类型转换-golang类型转换

    简单整理一下Golang的基本类型转换,作为备忘: 1.整形到字符串: var i int = 1 var s string 3.  s = strconv.Itoa(i) 或者 s = Format ...

  5. Level Of Detail

    [Level Of Detail] LOD0离摄像机最近,LODN离摄像机最远.LOD Group组件的用法是,将此组件挂在根节点上,然后每一个LOD挂同样多的Renderer(通常是子对象). At ...

  6. GetHashCode()

    [GetHashCode] GetHashCode 方法的默认实现不保证针对不同的对象返回唯一值.而且,.NET Framework 不保证 GetHashCode 方法的默认实现以及它所返回的值在不 ...

  7. MySQL多表查询回顾

    ----------------------siwuxie095 MySQL 多表查询回顾 以客户和联系人为例(一对多) 1.内连接 /*内连接写法一*/ select * from t_custom ...

  8. 解决"authentication token manipulation error"

      昨天安装是Ubuntu Server. 配置好了几个软件后就忘记继续了...今天打开,居然忘记了密码...真是的..  后来还是要改了. 不想重新弄什么的了..百度了下怎么改密码...然后就有一篇 ...

  9. CloudStack 注册模板脚本分析

    注册系统虚拟机模板 /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt 内容如下: usage ...

  10. 2-字符串模拟- URL映射

    问题描述 试题编号: 201803-3 试题名称: URL映射 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 URL 映射是诸如 Django.Ruby on Rails 等 ...