• 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




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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   据法新社最新消息,TikTok当地时间22日向美国联邦法院提起诉讼,要求阻止蒙大拿州对这款视频共享应用程序实施禁令。  报道说,TikTok在诉讼中辩称,这项将于2024年起实施的禁令违反了宪法中有关言论自由的权利。  “我们相信,基于一系列极具说服力的先例和事实,我们的法律挑战将会获胜。”TikTok一名发言人对法新社表示。  今年5月17日,美国蒙大拿州州长格雷格·詹福尔特正式签署法案,禁止TikTok在该州运营,明年1月1日起生效。蒙大拿州成为全美首个签署彻底禁止TikTok法案的州。但媒体普遍认为,该禁令将面临法律挑战。美联社19日称,5名TikTok内容创作者提起诉讼,试图推翻蒙...
            0 0 955
            分享
          • 1、引言今天分享的这部分内容,应该算是Locust的进阶篇,毕竟针对一般的性能自动化测试人员来说,掌握小鱼写的前5章节的知识,就能足够应对大部分情况。但是,针对有些需要进阶自己的技术,那么,可以持续关注小鱼的博客,让我们一起探索Locust,探索性能自动化。那么,话不多说,我们开始今天的进阶篇,自定义负载测试图形2、定义有些时候,默认的形状已经无法满足我们的特定要求,那么这个时候,我们就需要完全自定义负载测试的图形形状。而这并不难,就是通过设置 用户或者更更改用户数和产生率来实现的。2.1 列举实例例如:我们想自定义时间生成负载峰值或上下倾斜。如何实现呢??直接使用 LoadTestshape...
            1 0 3147
            分享
          •   继猎豹移动CEO傅盛与金沙江创投董事总经理朱啸虎“互怼”后,朱啸虎又发了朋友圈解释了一番。  他表示,昨天的对话造成很多误解,其实我们应该是国内垂直AIGC真正出手最多的早期投资人(这句话在对话中被故意删掉了)。  其核心观点为不要迷信通用大模型,“明年3.5就成commodity,3年后4也将是commodity!对于大部分创业者,场景优先,数据为王!”朱啸虎称。作者:佚名原文链接:新浪科技_新浪网(sina.com.cn)
            0 0 1343
            分享
          • 前言在接口测试的过程中,经常会遇到有些接口需要在登录的状态下才能请求,否则会提示请登录,那么怎样解决呢?我们可以通过Cookie绕过登录,其实这就是保持登录状态的方法之一。那么今天笔者想讲通过session进行会话保持。一、session(会话)session,即会话。那么什么又是会话?我们来看一下会话的生存周期就能大致明白,如下:开始:客户端(通常是浏览器)-->发送第一个请求-->某应用服务器,彼此成功建立连接,即创建会话; 会话中:客户端接着请求该应用服务器的其他资源; 结束:关闭客户端(通常是浏览器)或者会话超时,会话结束。二、会话保持会话保持,可以通俗的理解为使同一用户发...
            0 0 1533
            分享
          • 1. Jmeter简介Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一。本文为JMeter性能测试完整入门篇,从Jmeter下载安装到编写一个完整性能测试脚本、最终执行性能测试并分析性能测试结果。运行环境为Windows 10系统,JDK版本为1.8,JMeter版本为3.3。2. Jmeter安装2.1 JDK安装由于Jmeter是基于java开发,首先需要下载安装JDK (目前JMeter只支持到Java 8,尚不支持 Java 9)...
            12 12 2531
            分享
      • 51testing软件测试圈微信