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

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

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汇总整理(下)》


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


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


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


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


言不跑偏,不是小鱼!


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


2、User class

2.1 定义


Class User (environment)

引用官网原话:


image.pngimage.png

image.png


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

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


1、使用User进行负载测试。

2、该用户的行为,可以自己定义;可以使用 @task装饰器或者设置 task属性直接在类上声明任务。

3、此类大部分情况都是由定义某种客户端的类继承

例如:在对HTTP系统进行负载测试时, 就会想到使用HttpUser

image.png

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


2.2 类及用法

① abstract= True


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


②on_start()


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


③on_stop()


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


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


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

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

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


举个例子


# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-10-13
"""
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_DJ
@ time : 2020-10-13
"""
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)

同样,先上官网的原话:


image.png

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

image.png


3.2 类及用法

① abstract= True


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


②client: locust.clients.HttpSession= None


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

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


4、TaskSet class

4.1 定义


Class TaskSet  (parent)

引用官网原话:


image.png

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


1、定义用户将要执行的一组任务的类。

2、TaskSet开始运行时,它将从task属性中选择一个任务,来执行,然后执行wait_time()函数;如果没有在TaskSet上声明任何wait_time方法,则默认情况将调用User.wait_time()函数。

3、TaskSet可以嵌套,这意味着TaskSet的task属性可以包含另一个TaskSet。

如果计划执行TaskSet,将从当前正在执行的TaskSet实例化并调用。然后,当前正在运行的TaskSet中的执行将移交给嵌套的 TaskSet,它将继续运行,直到抛出 异常,该异常在调用askSet.interrupt()时完成。

image.png

嗯,小鱼的工作,就是脱下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_DJ
@ time : 2020-10-13
"""
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_DJ
@ time : 2020-10-13
"""
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_DJ
@ time : 2020-10-13
"""
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

6、tag decorator

6.1 类及用法

①tag( *tags)

---->>装饰器,用于使用给定的tag 名进行标记任务 和 TaskSet

可以将测试限定仅执行使用–tag命令行参数提供的任何标签标记的任务。


不明白的小伙伴,可以看一下这个栗子:


# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-10-13
"""
class ForumPage(TaskSet):
  #设置tag标签
  @tag('thread')
  #设置权重值
  @task(100)
    def read_thread(self):
      pass
    @tag('thread')
    @tag('post')
    @task(7)
    def create_thread(self):
      pass
    @tag('post')
    @task(22)
    def comment(self):
      pass

7、Sequential TaskSet class

7.1 定义

class SequentialTaskSet(*args, **kwargs)

引用官网原话:


image.png

同样,小鱼来个中文翻译版的:

image.png

7.2 类及用法

① propertyclient


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


②on_start()


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


③on_stop()


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


④interrupt(reschedule=True)


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

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


⑤property user


---->>创建TaskSet 实例


⑥wait_time()


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


例如:


# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-10-13
"""
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,则放在任务队列的首位


8、Built in wait_time functions

8.1 类及用法

①between(min_wait, max_wait)

---->> 返回一个函数,在min_wait 与 max_wait之间返回一个随机数。


例如:


# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-10-13
"""
class TestUser(User):
  #每个任务等待3秒~15.9秒
  wait_time = between(3.0,15.9)

②constant(wait_time)


---->>返回一个仅返回有wait_time参数指定的数字的函数


例如:


# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-10-13
"""
class TestUser(User):
  wait_time = constant(5)

③constant_pacing(wait_time)


---->>返回一个函数,该函数将跟踪任务的运行时间,并且每次调用该函数时,它将返回一个等待时间,该等待时间将使任务执行之间的总时间等于wait_time参数指定的时间。


例如:


# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-10-13
"""
class MyUser(User):
    wait_time = constant_pacing(1)
    @task
    def my_task(self):
        time.sleep(random.random())

解析:

1、无论任务执行时间如何,任务总是每秒执行一次;


2、如果任务执行超过指定的wait_time,则在开始下一个任务之前等待将为 0。


相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
1月前
|
测试技术
性能场景之压测策略设计
【2月更文挑战第19天】性能场景之压测策略设计
295 4
性能场景之压测策略设计
|
5月前
|
监控 NoSQL 测试技术
Cassandra 性能压测
Cassandra 性能压测
|
6月前
|
安全 测试技术 网络安全
软件测试|测试平台开发-Flask 入门:URL组成部分详解
软件测试|测试平台开发-Flask 入门:URL组成部分详解
34 0
|
4月前
|
JSON 测试技术 API
『Postman入门万字长文』| 从工具简介、环境部署、脚本应用、Collections使用到接口自动化测试详细过程
『Postman入门万字长文』| 从工具简介、环境部署、脚本应用、Collections使用到接口自动化测试详细过程
78 3
|
1月前
|
消息中间件 弹性计算 测试技术
如何快速实现 Kafka 性能压测
如何快速实现 Kafka 性能压测
89814 1
|
1月前
|
算法 Java 测试技术
性能工具之代码级性能测试工具ContiPerf
【2月更文挑战第23天】性能工具之代码级性能测试工具ContiPerf
269 1
性能工具之代码级性能测试工具ContiPerf
|
1月前
|
负载均衡 NoSQL 关系型数据库
性能基础之全链路压测知识整理
【2月更文挑战第16天】性能基础之全链路压测知识整理
186 11
|
1月前
|
存储 Android开发 C++
【Android 从入门到出门】第五章:使用DataStore存储数据和测试
【Android 从入门到出门】第五章:使用DataStore存储数据和测试
37 3
|
1月前
|
存储 SQL 数据库
【Android 从入门到出门】第六章:使用Room数据库并测试
【Android 从入门到出门】第六章:使用Room数据库并测试
29 4
|
7月前
|
存储 关系型数据库 MySQL
深聊性能测试,从入门到放弃之:性能测试技术栈,看完这篇,保证刷新你对性能测试的认知~~
深聊性能测试,从入门到放弃之:性能测试技术栈,看完这篇,保证刷新你对性能测试的认知~~
156 1