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

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 深聊性能测试,从入门到放弃之: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进行规格选择与性能压测。
目录
相关文章
|
4天前
|
敏捷开发 jenkins Devops
探索软件测试的新篇章:自动化与持续集成的融合之道
【9月更文挑战第31天】 在软件开发的海洋中,测试是确保航船稳健前行的灯塔。本文将引领读者驶入软件测试的新纪元,探索自动化测试和持续集成如何携手共创高效、可靠的开发流程。我们将从基础概念出发,逐步深入到实际操作层面,揭示这一现代软件开发模式的核心价值和实现路径。你将看到,通过代码示例和实践案例,如何将理论转化为提升软件质量的具体行动。
|
8天前
|
测试技术 UED Python
探索软件测试的边界:自动化与手动测试的协同
【8月更文挑战第59天】在追求效率和质量的软件生产中,自动化测试与手动测试的辩论从未停止。本文将通过实际案例,揭示二者如何相辅相成,共同构建更健壮的软件测试体系。我们将深入探讨自动化测试的优势、手动测试不可替代的角色以及它们如何在实际项目中协同工作,旨在为读者提供一种平衡的视角来看待软件测试的实践。
101 65
|
3天前
|
设计模式 敏捷开发 jenkins
软件测试中的自动化测试实践指南
本文旨在探讨软件测试中自动化测试的实施方法及其重要性,通过具体案例分析自动化测试的步骤、工具选择及最佳实践。我们将从自动化测试的基本概念入手,逐步解析其在实际项目中的应用,并提供一些常见问题的解决方案。
|
7天前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible入门与实践
【9月更文挑战第28天】在追求高效、稳定的IT运维时代,自动化工具Ansible凭借其简洁性、易用性和强大的功能脱颖而出。本文旨在通过实际案例引导读者理解Ansible的核心概念和操作流程,并分享如何通过Ansible简化日常运维任务,提升工作效率。从基础安装到高级应用,我们将一步步揭开Ansible的神秘面纱,让初学者也能轻松掌握自动化运维的要诀。
|
12天前
|
运维 关系型数据库 MySQL
自动化运维工具:Ansible入门与实践
【9月更文挑战第23天】本文将带你进入自动化运维的世界,以Ansible为例,从基础概念到实际操作,让你轻松掌握自动化运维技能。我们将一起探索如何通过代码实现批量部署、配置管理和任务执行等功能,提高运维效率,减轻工作压力。让我们一起开启自动化运维之旅吧!
|
12天前
|
自然语言处理 IDE Java
软件测试中的自动化策略
【9月更文挑战第23天】在软件生命周期中,测试是保证产品质量的关键步骤。随着技术的发展,自动化测试成为提升效率、减少错误和确保一致性的重要手段。本文将探讨自动化测试的重要性,并介绍一些实用的自动化测试工具和框架,帮助读者理解如何实施自动化测试策略,从而优化测试流程,提高软件开发的质量和速度。
|
14天前
|
Web App开发 JavaScript Java
自动化测试的利剑:Selenium WebDriver入门与实践
【9月更文挑战第21天】在软件开发的海洋中,自动化测试犹如一艘船,帮助开发者们快速航行至质量保证的彼岸。本文将作为你的罗盘,指引你了解和掌握Selenium WebDriver这一强大的自动化测试工具。通过深入浅出的方式,我们将探索Selenium WebDriver的基本概念、安装过程以及编写简单测试脚本的方法。无论你是刚接触自动化测试的新手,还是希望提升测试技能的开发者,这篇文章都将为你提供有价值的指导。
|
15天前
|
敏捷开发 Java jenkins
软件测试中的自动化测试实践指南
本篇文章深入探讨了软件测试中自动化测试的重要性、实施步骤以及面临的挑战。我们将从为什么需要自动化测试开始,逐步解析其基本概念、工具选择、脚本开发、执行与维护等关键环节。同时,还将分享一些成功案例和最佳实践,帮助读者更好地理解和应用自动化测试技术。无论您是软件测试新手还是经验丰富的测试工程师,相信本文都能为您提供有价值的参考和启示。
|
14天前
|
测试技术
软件测试中的自动化策略与实践
【9月更文挑战第21天】在软件开发的生命周期中,测试阶段扮演着至关重要的角色。它不仅确保了软件产品的质量,还帮助团队及早发现并修复缺陷,从而节省时间和成本。本文将探讨如何通过实施自动化测试策略来提升测试效率和有效性,包括选择合适的工具、设计有效的测试用例以及维护测试脚本。文章旨在为读者提供一套清晰的指导方针,帮助他们在项目中成功地应用自动化测试。
|
13天前
|
测试技术 持续交付 Android开发
软件测试中的自动化测试策略与实践
本文深入探讨了软件测试中自动化测试的策略与实践,阐述了自动化测试的重要性、适用场景及常见工具。通过对自动化测试框架的搭建、脚本编写、持续集成等方面的详细分析,揭示了如何有效提升软件测试的效率和质量。同时,本文还指出了自动化测试在实际应用中可能面临的挑战,并提出了相应的解决方案。无论是对于初学者还是资深测试工程师,本文都提供了宝贵的参考和启示。
下一篇
无影云桌面