• 1
  • 0
分享

1、引言

Locust的API共有 15类,如下:

    ① User class

    ② HttpUser class

    ③ TaskSet class

    ④ task decorator

    ⑤ tag decorator

    ⑥ Sequential TaskSet class

    ⑦ Built in wait_time functions

    ⑧ HttpSession class

    ⑨ Response class

    ⑩ ResponseContextManager class

    ⑪ Exceptions

    ⑫ Environment class

    ⑬ Event hooks

    ⑭ Runner classes

    ⑮ Web UI class

关于Locust 的API 内容,小鱼会分两篇来分享。

    ①~⑦:《深聊性能测试,从入门到放弃之:Locust性能自动化(五)API汇总整理(上)》

    ⑥~⑩:《深聊性能测试,从入门到放弃之:Locust性能自动化(五)API汇总整理(中)》

    ⑪~⑮:《深聊性能测试,从入门到放弃之:Locust性能自动化(五)API汇总整理(下)》

之所以分两篇来写,是因为,小鱼写的时候,就觉得很多,何况各位大佬看文章呢。

如果之前没有接触过这些 API类,那一次看这么多,估计真的 还没进门,就放弃了…

这不是小鱼想要的,所以,小鱼就分两篇来写,怎么也得迈进门口看看~ ~

后来,想不想出去,就看持久力了…

言不跑偏,不是小鱼!

但是,也得回来,先进门瞧瞧 API们吧 !!!

2、User class

2.1 定义

Class User (environment)

引用官网原话:

1、Represents a “user” which is to be spawned and attack the system that is to be load tested.
2、The behaviour of this user is defined by its tasks.Tasks can be declared either directly on the class by using the @task decorator on methods, or by setting the tasks attribute.
3、This class should usually be subclassed by a class that defines some kind of client.
For example when load testing an HTTP system, you probably want to use the HttpUser class.

如果看的不太明白,没关系,

小鱼直接直接用大白话来翻译:

1、使用User进行负载测试。
2、该用户的行为,可以自己定义;可以使用 @task装饰器或者设置 task属性直接在类上声明任务。
3、此类大部分情况都是由定义某种客户端的类继承
例如:在对HTTP系统进行负载测试时, 就会想到使用HttpUser

这样简单一说,是不是就很一目了然了~ ~

2.2 类及用法

① abstract= True

    ---->>若为True,则该类则被子类化,并且Locust不会在测试期间产生此类用户。

②on_start()

    ---->>表示开始运行

③on_stop()

    ---->>表示停止运行

④tasks: List[Union[locust.user.task.TaskSet, Callable]]= []

    ---->> 表示将要运行TaskSet类的集合

如果任务是列表,则随机选择要执行的任务;

如果任务是两个元组(可调用,整数)列表,或者是字典,则随机选择要执行的任务,但是会根据其相应的值来对每个任务进行加权。

举个例子

# -*- coding: utf-8 -*-
"""
@ auth : Carl_奕然
@ time : 2020-06-20
"""
class ForumPage(TaskSet):
#设置权数值
    tasks = {ThreadPage:20, write_post:1}

我们可以看到,被选中的ThreadPage 的可能是 write_post的 20倍。

⑤wait()

    ---->> 设置等待, 在函数 User.wait_time中定义

    ---->> stop_timeout:禁止 任务中休眠;

    ---->> gevent.sleep():休眠

⑥wait_time= None

    ---->> 设置等待时间间隔,单位是 秒,可以对单个TaskSet 设置;

例如:

# -*- coding: utf-8 -*-
"""
@ auth : Carl_奕然
@ time : 2020-06-20
"""
from locust import user,between
class TsetUser(User):
#设置等待时间间隔为2~15秒
wait_time =  bwtween(2,15)

⑦weight= 10

    ---->> 选择用户的权重, 数值越高,被选中的机会就越大。

3、HttpUser class

3.1 定义

classHttpUser(*args, **kwargs)

同样,先上官网的原话:

1、Represents an HTTP “user” which is to be spawned and attack the system that is to be load tested.
2、The behaviour of this user is defined by its tasks. Tasks can be declared either directly on the class by using the @task decorator on methods, or by setting the tasks attribute.
3、This class creates a client attribute on instantiation which is an HTTP client with support for keeping a user session between requests.

小鱼言简意赅的 总结一下:

1、要进行负载测试的 HTTP 的user
2、该用户的行为尤其任务定义。可以使用 @task装饰器或者设置 task属性直接在类上声明任务。
3、此类实例化时创建一个客户端属性,该属性是一个HTTP客户端,支持在请求之间保持用户会话。

3.2 类及用法

① abstract= True

    ---->>若为True,则该类则被子类化,并且用户在测试期间,不会选择locust。

②client: locust.clients.HttpSession= None

    ---->>在Locust实例化后创建Http Session实例。

    ---->>并且这个客户端支持 cookie,可以保持HTTP请求之间的会话,直到结束,或者被强制停止。

4、TaskSet class

4.1 定义

Class TaskSet  (parent)

引用官网原话:

1、Class defining a set of tasks that a User will execute.
2、When a TaskSet starts running, it will pick a task from the tasks attribute, execute it, and then sleep for the number of seconds returned by its wait_time function. If no wait_time method has been declared on the TaskSet, it’ll call the wait_time function on the User by default. It will then schedule another task for execution and so on.
3、TaskSets can be nested, which means that a TaskSet’s tasks attribute can contain another TaskSet. 
If the nested TaskSet is scheduled to be executed, it will be instantiated and called from the currently executing TaskSet. Execution in the currently running TaskSet will then be handed over to the nested TaskSet which will continue to run until it throws an InterruptTaskSet exception, which is done when TaskSet.interrupt() is called. (execution will then continue in the first TaskSet).

小鱼言简意赅的 总结一下:

1、定义用户将要执行的一组任务的类。
2、TaskSet开始运行时,它将从task属性中选择一个任务,来执行,然后执行wait_time()函数;如果没有在TaskSet上声明任何wait_time方法,则默认情况将调用User.wait_time()函数。
3、TaskSet可以嵌套,这意味着TaskSet的task属性可以包含另一个TaskSet。
如果计划执行TaskSet,将从当前正在执行的TaskSet实例化并调用。然后,当前正在运行的TaskSet中的执行将移交给嵌套的 TaskSet,它将继续运行,直到抛出 异常,该异常在调用askSet.interrupt()时完成。

嗯,小鱼的工作,就是脱下Locust神秘的…

4.2 类及用法

① propertyclient

    ---->> 是TaskSet 的client的一个"快捷方式"

②on_start()

    ---->>表示开始运行TaskSet

③on_stop()

    ---->>表示停止运行TaskSet

④interrupt(reschedule=True)

    ---->>默认为True,父级用户将立即重新安排并执行新任务。

中断TaskSet并将任务移交给父TaskSet。

⑤wait()

    ---->> 设置等待, 在函数 Locust.wait_time(或者TaskSet.wait_time函数)中定义

    ---->> stop_timeout:禁止 任务中休眠;

    ---->> gevent.sleep():休眠

⑥wait_time()

    ---->> 设置等待时间间隔,单位是 秒,可以对单个TaskSet 设置;

例如:

# -*- coding: utf-8 -*-
"""
@ auth : Carl_奕然
@ time : 2020-06-20
"""
from locust import TaskSet,between
class Task(TaskSet):
#设置等待时间间隔为2~15秒
wait_time =  bwtween(2,15)

⑦property parent

    ---->> 此TaskSet 的父TaskSet实例。

⑧schedule_task(task_callable, first=False)

    ---->>将任务添加到用户的任务执行队列。

    ---->>task_callable:要计划的用户任务

    ---->>first:可选参数,为True,则放在任务队列的首位

⑨tasks: List[Union[TaskSet, Callable]]= []

    ---->> 表示将要运行TaskSet类的集合

如果任务是列表,则随机选择要执行的任务;

如果任务是两个元组(可调用,整数)列表,或者是字典,则随机选择要执行的任务,但是会根据其相应的值来对每个任务进行加权。

举个例子

# -*- coding: utf-8 -*-
"""
@ auth : Carl_奕然@ time : 2020-06-20
"""
class ForumPage(TaskSet):
#设置权数值
    tasks = {ThreadPage:20, write_post:1}

与User 的task 定义内容一样的。

⑩property user

    ---->>创建TaskSet 实例

5、task decorator

5.1 类及用法

①task(weight=1)

---->> 用作便利修饰器,以便能够为类中的内联用户或TaskSet声明任务。

举个例子

# -*- coding: utf-8 -*-
"""
@ auth : Carl_奕然@ time : 2020-06-20
"""
class ForumPage(TaskSet):
'''
设置TaskSet 类
定义两个函数,
read_thread :task设置 100
create_thread: task 设置7
'''
#设置权值
@task(100)
    def read_thread(self):
    pass
    
    @task(7)
    def create_thread(self):
    pass




  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   常言道,名正则言顺。对于一个概念,如果它没有恰当的名字,就会增加理解的难度,甚至容易引起歧义。  在这些年,不管是写公众号还是与同行交流,我都发现软件测试中的一个重要概念存在着“名不正,言不顺”的问题。这个重要概念就是回归测试。  到底什么是回归测试?为什么叫回归测试?据我观察,许多的答案都不能让人信服。今天,是时候为“回归测试”正个名了。  要理解“回归测试”,先要理解“回归”。回归,是常用的汉语词汇。它有两种含义。第一种是归还,返回的意思。例如:香港回归祖国,北回归线,回归初心等。这种含义大家都非常熟悉。  另外一种含义,熟悉的人就少一些。它来自数学领域,表示研究随机变量相互关系的统计...
            10 10 866
            分享
          •   日常大家聊天时经常提及一个关键词——大环境不好,由此带来了很多行为的变化,有的人迷茫,有的人躺平。本文给大家介绍发生在我身上和身边的真实案例,希望能带给你一些输入。  案例一:曾经的我也极度焦虑  我是2008年参加工作的,届时正处于美国次贷危机中,危机产生的影响是全球范围的。时常看到新闻上有各种公司倒闭的信息,周围人也经常讨论找工作的不易,大环境的惨烈程度与近两年无异。我作为一个职场新鸟,每天极度焦虑,生怕公司会倒闭。每天有大量时间是焦虑不安的精神内耗状态,产生的影响是做事儿没有规划、学习动力不足、容易走神儿、爱做简单的、机械的事儿、不自信等。经过了好长一段时间,我觉得这种状态对我的负向...
            0 0 485
            分享
          •   Jmeter是基于Java开发的性能测试工具,也可以用于接口测试,对比LR来说,Jmeter的操作简单并且是一款开源软件,主要用来做功能测试和性能测试(压力测试/负载测试)。  而且用Jmeter来测试Restful API,非常好用,下面为大家带来一些Jmeter的一些进阶扩展用法。  正则表达式提取器详解  正则表达式提取器又称作关联,可以把Response的值提取到变量中,提供给别的Http Request使用,在对应的需要获取关联的请求处右键添加后置处理器-正则表达式提取器来添加。  正则表达式的字段用法  引用名称:可以在别的请求中引用的名称。  正则表达式:用来匹配需要的内容的...
            15 15 1619
            分享
          • 想查看小程序的请求,使用wireshark捣鼓了半天还是无法解析微信小程序的HTTPS协议,于是使用Fiddler试试。Tools --> Options重启 Fiddler点击右边的 Filter 选项卡。然后点击 Actions --> Run Filterset Now接着点开PC微信小程序,就能看到请求列表。双击右边某一行即可展开详细信息显示请求的时间在左侧的列表区域头部任意栏上鼠标右键,选择 Customize Columns,然后Add,就会多出一列时间。需要注意的是,Fiddler 如果异常退出的话,会导致浏...
            0 0 3169
            分享
          •   通常,软件测试的测试方式分为人工测试和自动化测试,人工测试是由测试人员编写并执行测试用例,然后观察测试结果与预期结果是否一致的过程;自动化测试是通过测试工具来代替或辅助人工去验证系统功能是否有问题的过程。  采用自动化测试需要满足以下3个条件。  (1)项目需求变动不频繁  测试脚本的稳定性决定了自动化测试的维护成本。如果项目需求变动过于频繁,测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本,然后不断地对测试脚本代码进行修改和调试,有时候还需要花费很多时间对自动化测试的框架进行修改。  (2)项目进度压力不大且时间不紧迫  在动化测试过程中,测试工具需要多次对项目进行测试后才能有...
            0 0 834
            分享
      • 51testing软件测试圈微信