性能专题:Locust工具实战之创建性能测试

简介: 性能专题:Locust工具实战之创建性能测试

1. 前言


在前面的文章中,我们介绍了性能测试框架Locust是什么:性能专题:Locust工具实战之开篇哲学三问,以及如何安装它:性能专题:Locust工具实战之“蝗虫”降世


接下来在本篇中,我们通过几则示例为大家展示如何利用Locust来创建性能测试。


在Locust 中没有傻瓜式的脚本录制功能,要想用它来做性能测试,必须撸起袖子来写代码。不过,它并不难!


2. 几个简单的性能脚本示例


Locust里面请求是基于requests的,每个方法请求和requests差不多,请求参数、方法、响应对象和requests一样的使用。

  • requests.get 对应client.get
  • requests.post 对应client.post



示例1:创建 load_test.py 文件,通过 Python 编写性能测试脚本。

```python
#coding=utf-8
from locust import HttpLocust, TaskSet, task
# 定义用户行为
class UserBehavior(TaskSet):
    @task
    def cnblogs_index(self):
        self.client.get("/")
class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    host = "https://www.cnblogs.com"  # 被测服务器地址
    min_wait = 3000
    max_wait = 6000
   ```
  • UserBehavior类继承TaskSet类,用于描述用户行为。

其中,cnblogs_index() 方法表示一个用户为行,用于访问博客园首页。使用@task装饰该方法为一个事务。client.get()用于指请求的路径“/”,因为是博客园首页,所以指定为根路径。


示例2:

```python
# coding=utf-8
import requests
from locust import HttpLocust,TaskSet,task
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 禁用安全请求警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
class MyBlogs(TaskSet):
    # 访问我的博客首页
    @task(1)
    def get_blog(self):
        # 定义请求头
        header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}
        req = self.client.get("/jinjiangongzuoshi",  headers=header, verify=False)
        if req.status_code == 200:
            print("success")
        else:
            print("fails")
class websitUser(HttpLocust):
    task_set = MyBlogs
    min_wait = 3000  # 单位为毫秒
    max_wait = 6000  # 单位为毫秒
if __name__ == "__main__":
    import os
    os.system("locust -f load_test.py  --host=https://www.cnblogs.com")
```


脚本说明:

1. 首先需要导入locust模块里面的三个方法,HttpLocust,TaskSet,task。


2. 创建一个类继承自TaskSet,表示在这个类里面都是Locust的任务,这个类就算Loucst的任务集,例如新建一个类`MyBlogs(TaskSet)``UserBehavior(TaskSet)`继承`TaskSet`


3. 创建任务,其实就是定义一个方法,需要注意的是,这个方法上面多了一个task的装饰器,这个装饰器是用来标是定义的这个方法会被locust识别成它需要做的任务,task装饰器后面会有参数,如果执行单任务的时候,后面这个权重随便写上什么数字都无所谓,这个数字其实就是一个权重值,但是如果有多个任务的情况下,这个时候权重值就会起作用了。


`self.client`调用get和post方法,和`requests`用法一样;


`@task`装饰该方法表示为用户行为,括号里面参数表示该行为的执行权重:数值越大,执行频率越高,不设置默认是1;


举个栗子:

```python
@task(1)
def index(self):
    r=self.client.get('/test/index.html')
    print(r.text)
@task(2)
def search(self):
    r=self.client.get('/test/search.html')
    print(r.text)
 ```


如有index和search分别设置权重1、2,如果测试时指定30个模拟用户数,那么会有10个模拟用户数执行index任务,有20个模拟用户数执行search任务。

简而言之可以把这个权重理解为执行次数的多少,数值越大,执行的频率就越高。

3. 执行性能测试


1、如果启动的locust文件名为`locustfile.py`  并位于当前工作目录中,可以在编译器中直接运行该文件,或者通过命令行,执行如下命令:


locust --host=https://www.cnblogs.com


2、如果Locust文件位于子目录下且名称不是locustfile.py,可以使用-f命令启动上面的示例locust文件:


locust -f testscript/load_test.py --host=https://www.cnblogs.com


  • -f 参数是指定运行的脚本
  • --host是指定运行项目的host地址,这里用的https://www.cnblogs.com,代码里面get访问的是"/jinjiangongzuoshi",拼接起来就是完整地址了。


3、如果要运行分布在多个进程中的Locust,通过指定-master以下内容来启动主进程 :


locust -f testscript/load_test.py --master --host=https://www.cnblogs.com


4、如果要启动任意数量的从属进程,可以通过-salve命令来启动locust文件:


locust -f testscript/load_test.py --salve --host=https://www.cnblogs.com


5、如果要运行分布式Locust,必须在启动从机时指定主机(运行分布在单台机器上的Locust时不需要这样做,因为主机默认为127.0.0.1)


locust -f testscript/load_test.py --slave --master-host=192.168.0.100 --host=https://www.cnblogs.com


6、启动locust文件成功后,编译器控制台会显示如下信息:

```shell
➜  Sample git:(master) ✗ locust -f load_test.py --host=https://www.cnblogs.com
[2019-12-01 14:31:01,595] zhoujinjiandeMacBook-Pro.local/INFO/locust.main: Starting web monitor at *:8089
[2019-12-01 14:31:01,599] zhoujinjiandeMacBook-Pro.local/INFO/locust.main: Starting Locust 0.9.0
```

8089是该服务启动的端口号,如果是本地启动,可以直接在浏览器输入http://localhost:8089打开UI界面,如果是其他机器搭建locust服务,则输入该机器的IP+端口即可。


4. Locust Web界面模式


Locust默认使用该方式启动,启动后在本机打开http://localhost:8089/,可以看到Locust WEB页面,设置并发用户数及每秒请求数后即可开始性能测试。

微信图片_20220523202250.png

  • Number of users to simulate:设置模拟的用户总数。
  • Hatch rate (users spawned/second):每秒启动的虚拟用户数。
  • Start swarming:开始运行性能测试。


输入并发数、每秒生成的用户数,然后点击“Start swarming”开始执行压测,执行过程中,随着并发用户数逐渐增多,向设定的目标并发数靠近,达到目标值后并发数则不再继续增加。

微信图片_20220523202225.png

PS:点击STOP可以停止locust脚本运行。


  • Type:请求类型,即接口的请求方法;
  • Name:请求路径;
  • requests:当前已完成的请求数量;
  • fails:当前失败的数量;
  • Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;
  • Average:平均响应时间,单位为毫秒;
  • Min:最小响应时间,单位为毫秒;
  • Max:最大响应时间,单位为毫秒;
  • Content Size:所有请求的数据量,单位为字节;
  • reqs/sec:每秒钟处理请求的数量,即QPS;


各模块说明:

微信图片_20220523202156.png


  • New test:点击该按钮可对模拟的总虚拟用户数和每秒启动的虚拟用户数进行编辑;
  • Statistics:类似于jmeter中Listen的聚合报告;
  • Charts:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数;
  • Failures:失败请求的展示界面;
  • Exceptions:异常请求的展示界面;
  • Download Data:测试数据下载模块, 提供三种类型的CSV格式的下载,分别是:Statistics、responsetime、exceptions;


5. Locust 命令行无界面模式


Locust也可使用no-web命令行模式,使用命令如下:


locust -f load_test.py --host=https://www.cnblogs.com --no-web --csv=locust -c 10 -r 2 -t 1m


启动参数:

  • --no-web 表示不使用Web界面运行测试,使用no-web模式。
  • -c 设置虚拟用户数,即并发用户数。
  • -r 设置每秒启动虚拟用户数,即每秒请求数。
  • -t 或--run_time,设置设置运行时间。
  • --csv 表示运行结果文件名。


未完待续~


细心的读者也许会发现,仅凭这篇文章的性能示例用法介绍,是很难直接应用到真实的项目性能实施中,本篇主要还是想通过基础示例,让大家对Locust开展性能测试能先有一个直观的认识,真实项目实施过程,会涉及到更复杂的知识点,我们将在后续为大家介绍。

目录
相关文章
|
21天前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
397 10
|
2月前
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
3月前
|
数据可视化 测试技术 Go
Go 语言测试与调试:`go test` 工具用法
`go test` 是 Go 语言内置的测试工具,支持单元测试、基准测试、示例测试等功能。本文详解其常用参数、调试技巧及性能测试命令,并提供实际项目中的应用示例与最佳实践。
|
3月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
695 23
|
3月前
|
存储 关系型数据库 测试技术
拯救海量数据:PostgreSQL分区表性能优化实战手册(附压测对比)
本文深入解析PostgreSQL分区表的核心原理与优化策略,涵盖性能痛点、实战案例及压测对比。首先阐述分区表作为继承表+路由规则的逻辑封装,分析分区裁剪失效、全局索引膨胀和VACUUM堆积三大性能杀手,并通过电商订单表崩溃事件说明旧分区维护的重要性。接着提出四维设计法优化分区策略,包括时间范围分区黄金法则与自动化维护体系。同时对比局部索引与全局索引性能,展示后者在特定场景下的优势。进一步探讨并行查询优化、冷热数据分层存储及故障复盘,解决分区锁竞争问题。
377 2
|
2月前
|
人工智能 数据可视化 测试技术
UAT测试排程工具深度解析:让验收测试不再失控,项目稳稳上线
在系统交付节奏加快的背景下,“测试节奏混乱”已成为项目延期的主因之一。UAT测试排程工具应运而生,帮助团队结构化拆解任务、清晰分配责任、实时掌控进度,打通需求、测试、开发三方协作闭环,提升测试效率与质量。本文还盘点了2025年热门UAT工具,助力团队选型落地,告别靠表格和群聊推进测试的低效方式,实现有节奏、有章法的测试管理。
|
3月前
|
弹性计算 JavaScript Ubuntu
WebSocket协议相关的测试命令工具使用简介
本文介绍了针对WebSocket的测试工具wscat和websocat的基本使用方法,以及通过curl命令测试HTTP/HTTPS协议的方式。对于WebSocket,直接使用curl测试较为复杂,推荐使用wscat或websocat。文中详细说明了这两种工具的安装步骤、常用参数及连接示例,例如在ECS上开启8080端口监听并进行消息收发测试。此外,还提供了curl命令的手动设置头部信息以模拟WebSocket握手的示例,但指出curl仅能作为客户端测试工具,无法模拟服务器。
665 4
|
8月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
5月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
596 24
|
5月前
|
SQL 测试技术
除了postman还有什么接口测试工具
最好还是使用国内的接口测试软件,其实国内替换postman的软件有很多,这里我推荐使用yunedit-post这款接口测试工具来代替postman,因为它除了接口测试功能外,在动态参数的支持、后置处理执行sql语句等支持方面做得比较好。而且还有接口分享功能,可以生成接口文档给团队在线浏览。
216 2

热门文章

最新文章