深聊性能测试,从入门到放弃之: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进行规格选择与性能压测。
目录
相关文章
|
2月前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
146 11
|
2月前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
2月前
|
测试技术 持续交付
探索软件测试中的自动化测试策略
随着软件开发周期的加速和市场需求的不断增长,传统的手动软件测试方法已难以满足现代软件开发的高效性和准确性要求。本文旨在探讨自动化测试在软件测试中的重要性、实施策略及其对提高软件质量的影响。通过分析自动化测试的优势与挑战,以及提供实用的自动化测试工具和框架选择指南,旨在帮助读者理解并应用自动化测试以提升软件开发效率和产品质量。
|
2月前
|
机器学习/深度学习 人工智能 监控
软件测试中的自动化测试策略与最佳实践##
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和加速产品上市的关键工具。本文将探讨自动化测试的重要性,分析不同类型的自动化测试工具和框架,并深入讨论实施自动化测试的最佳实践。通过案例研究和数据分析,我们将揭示如何有效整合自动化测试到软件开发生命周期中,以及它如何帮助团队提高测试效率和覆盖率。 ##
81 1
|
2月前
|
机器学习/深度学习 人工智能 jenkins
探索软件测试中的自动化与持续集成
【10月更文挑战第21天】 在软件开发的生命周期中,软件测试扮演着至关重要的角色。随着技术的进步和开发模式的转变,自动化测试和持续集成已经成为提高软件质量和效率的关键手段。本文将深入探讨自动化测试和持续集成的概念、实施策略以及它们如何相互配合以优化软件开发流程。我们将通过分析实际案例,展示这些技术如何在实际项目中发挥作用,以及面临的挑战和解决方案。此外,文章还将讨论未来趋势,包括人工智能在测试领域的应用前景。
93 17
|
2月前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
2月前
|
数据管理 测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
在当今快速迭代的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市的关键手段。本文旨在探讨软件测试中的自动化测试策略,包括选择合适的自动化测试工具、构建有效的自动化测试框架以及实施持续集成和持续部署(CI/CD)。通过分析自动化测试的最佳实践,本文为软件开发团队提供了一系列实用的指南,以优化测试流程、提高测试效率并减少人为错误。
89 4
|
2月前
|
监控 测试技术 定位技术
探索软件测试中的自动化测试框架选择与实施###
本文不概述传统意义上的摘要内容,而是直接以一段对话形式引入,旨在激发读者兴趣。想象一下,你是一名勇敢的探险家,面前摆满了各式各样的自动化测试工具地图,每张地图都指向未知的宝藏——高效、精准的软件测试领域。我们将一起踏上这段旅程,探讨如何根据项目特性选择合适的自动化测试框架,并分享实施过程中的关键步骤与避坑指南。 ###
61 4
|
2月前
|
jenkins 测试技术 持续交付
软件测试中的自动化与持续集成
在现代软件开发过程中,自动化测试和持续集成已成为不可或缺的组成部分。本文将深入探讨自动化测试和持续集成的重要性、优势以及如何有效实施它们以提升软件质量和开发效率。通过具体案例分析,我们将展示这些技术如何在实际项目中发挥作用,并讨论其面临的挑战及应对策略。
77 3
|
2月前
|
测试技术 持续交付 数据安全/隐私保护
软件测试的艺术与科学:探索自动化测试框架
在软件开发的世界中,测试是确保产品质量的关键环节。本文将深入探讨自动化测试框架的重要性和实现方法,旨在为读者揭示如何通过自动化测试提升软件测试效率和准确性。我们将从测试的基本概念出发,逐步引导读者了解自动化测试框架的设计和实施过程,以及如何选择合适的工具来支持测试活动。文章不仅提供理论知识,还将分享实用的代码示例,帮助读者将理论应用于实践。无论你是测试新手还是经验丰富的开发者,这篇文章都将为你打开一扇通往更高效、更可靠软件测试的大门。
49 1

热门文章

最新文章