深聊性能测试,从入门到放弃之: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。


目录
相关文章
|
5月前
|
人工智能 数据可视化 测试技术
Postman 性能测试教程:快速上手 API 压测
本文介绍API上线后因高频调用导致服务器告警,通过Postman与Apifox进行压力测试排查性能瓶颈。对比两款工具在批量请求、断言验证、可视化报告等方面的优劣,探讨API性能优化策略及行业未来发展方向。
Postman 性能测试教程:快速上手 API 压测
|
5月前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
719 11
|
7月前
|
人工智能 自然语言处理 测试技术
AI时代,Apipost和Apifox如何利用AI技术赋能API研发测试管理所需?
在数字化转型加速背景下,API成为企业互联互通的关键。Apipost与Apifox作为主流工具,在AI赋能方面差异显著。Apipost通过智能参数命名、接口设计自动化、测试用例生成、断言自动化等功能大幅提升研发效率和质量,尤其适合中大型企业及复杂业务场景。相比之下,Apifox功能依赖手动操作较多,适用性更偏向初创或小型项目。随着AI技术发展,Apipost展现出更强的智能化与前瞻性优势,为企业提供高效、稳定的API管理解决方案,助力其在竞争激烈的市场中实现创新突破。
200 0
|
10月前
|
数据可视化 测试技术 API
JMeter、Apipost 与 Postman 的 API 测试对比:为什么 APIPost 是更聪明的选择
API测试如同筹备一场晚宴,选对工具至关重要。JMeter功能强大但上手难,适合专业用户;Postman简单易用,但在复杂场景和团队协作中表现有限;而Apipost则是一款智能高效的“厨房神器”。它性能测试轻松、结果清晰、学习门槛低,并且能一键集成CI/CD流程。对于追求效率与便捷的团队而言,Apipost无疑是更优选择,让API测试如同五星大厨烹饪般丝滑流畅。
|
10月前
|
jenkins 测试技术 Shell
利用Apipost轻松实现用户充值系统的API自动化测试
API在现代软件开发中扮演着连接不同系统与模块的关键角色,其测试的重要性日益凸显。传统API测试面临效率低、覆盖率不足及难以融入自动化工作流等问题。Apipost提供了一站式API自动化测试解决方案,支持零代码拖拽编排、全场景覆盖,并可无缝集成CI/CD流程。通过可视化界面,研发与测试人员可基于同一数据源协作,大幅提升效率。同时,Apipost支持动态数据提取、性能压测等功能,满足复杂测试需求。文档还以用户充值系统为例,详细介绍了从创建测试用例到生成报告的全流程,帮助用户快速上手并提升测试质量。
|
10月前
|
存储 前端开发 数据可视化
Postman vs. Apifox 用于 API 测试全面对比
寻找一款可靠的 API 测试工具?这份对比分析将深入探讨 Postman 和 Apifox 的功能和特性。了解哪款工具最适合您的 API 测试需求。
|
10月前
|
监控 安全 测试技术
选择Postman免费版还是付费版,进行 API 测试呢?
深入了解 Postman 免费版和付费版的细节,看看哪一个更适合您的 API 需求。
|
12月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
733 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
11月前
|
数据可视化 JavaScript 前端开发
利用Postman和Apipost进行API测试的实践与优化-动态参数
在API测试中,Postman和Apipost是常用的工具。Postman内置变量功能有限,面对复杂场景时需编写JavaScript脚本,增加了维护成本。而Apipost提供丰富的内置变量、可视化动态值配置和低代码操作,支持生成真实随机数据,如邮箱、手机号等,显著提升测试效率和灵活性。对于复杂测试场景,Apipost是更好的选择,能有效降低开发与维护成本,提高测试工作的便捷性和可维护性。
|
11月前
|
人工智能 测试技术 API
Windows用户必备:Postman v11详细安装指南与API测试入门教程(附官网下载
Postman是全球领先的API开发与测试工具,支持REST、SOAP、GraphQL等协议调试。2025年最新版v11新增AI智能生成测试用例、多环境变量同步等功能,适用于前后端分离开发、自动化测试、接口文档自动生成及团队协作共享API资源。本文详细介绍Postman的软件定位、核心功能、安装步骤、首次配置、基础使用及常见问题解答,帮助用户快速上手并高效利用该工具进行API开发与测试。