基于web界面的locust性能测试

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 前言    做为一个压测工具(库),[locust](http://locust.io/) 其实解决这么一个问题:AB 之类压测工具不能编写复杂的因果逻辑,而现实场景中,待压的服务往往是有一套完整执行流程的,比如 APP 要访问一个 API,是需要先鉴权(验明不是非 APP 访问),再登录换 Token,然后才是 API 调用……这一切,在 locust 中都很容易实现,本质上,应用 locust 做压测,就是在写 Python 程序,只是它集成了一套不错的 UI,外加并发的benchmark功能。

前言

    做为一个压测工具(库),[locust](http://locust.io/) 其实解决这么一个问题:AB 之类压测工具不能编写复杂的因果逻辑,而现实场景中,待压的服务往往是有一套完整执行流程的,比如 APP 要访问一个 API,是需要先鉴权(验明不是非 APP 访问),再登录换 Token,然后才是 API 调用……

这一切,在 locust 中都很容易实现,本质上,应用 locust 做压测,就是在写 Python 程序,只是它集成了一套不错的 UI,外加并发的benchmark功能。

至于写个压测为什么要用Python,是因为:这玩意心智负担低,你谷歌SO复制粘贴一把梭,直接上手就能写,大脑无需切换context,调试成本也低,没有比这语言更棒的了。

一、locust介绍

  Locust是一个容易使用、分布式的压力测试工具。它是用于网站压力测试(或其它系统)并找出多少用户一个系统可以承载。

在测试过程中,策略就是一个Locust的蠕虫将会攻击你的网站。每一个locust的行为(或你使用的测试用户)是你自己定义的,并且蠕虫进程从一个网页视图中被实时监测。这样会帮助你来实现测试,在真实用户使用前定义系统的瓶颈。

    Locust是完全基于事件的,因此可以在单台机器中支持数以千计的用户在线。和其它基于事件的程序相比较,它是不需要使用回调的。相反,它通过[gevent](https://link.juejin.im?target=http%3A%2F%2Fwww.gevent.org%2F)使用轻量级的进程。每一个locust测试你的网站时,实际上是真实的在内部运行它自己的进程(或greenlet,准确的说)。这样就允许你不使用复杂的回调方法,而是使用Python编写复杂的场景。

    正如官网【https://docs.locust.io/en/latest/writing-a-locustfile.html】所说,[Locust](http://locust.io/)是一个 open source load testing tool,Define user behaviour with Python code,哈,一看是 Python 就对它有天然的好感。

    Locust 的使用很简单也很方便,它提供了一个 python lib、一个命令行工具和一个 web UI,用户通过自己写 code 来定义测试用例,通过运行 locust cli 来执行测试,通过 web 界面查看测试结果。

对于程序员(特别是 Python 程序员)来讲,Locust另外一个优势就是,你不用去学不同工具为了定义测试用例而设计的不同的 DSL,直接写 code,通俗易懂。

二、locust骨架

一个 locust 压测程序的最简配置就是一个 .py 程序文件,按照约定,我们给它命名为 locustfile.py,它大概由这么两部分组成:

*  一个 [TaskSet 类](http://docs.locust.io/en/latest/writing-a-locustfile.html#taskset-class):里面放置你需要测试的各种任务,这些任务用 @task 装饰器来标记(洋气)

*  一个 [Locust 类](http://docs.locust.io/en/latest/writing-a-locustfile.html#the-locust-class):它的一个实例就代表一个了用户,同时它提供了用户并发访问的能力;它的 task_set 成员需要引用  TaskSet 类,那是它要执行的任务。

当然,locustfile.py 还有很多实用的配置,如 父子任务/等待时长/权重 等设置,细节可参见 [官网文档](http://docs.locust.io/en/latest/writing-a-locustfile.html)。

三、loucst的安装和使用

安装

使用 pip install locustio安装 locustio。

img_33988af26d03cfe0c267094542742c71.png
loucst安装

但是pip没有安装成功,前往https://pip.readthedocs.io/en/stable/installing/#install-pip 下载pip并安装。

在osx 中,需要手动安装libevent, brew install libevent.

使用

使用locust -h查看帮助,我们编写一个测试,需要编写一个locustfile.py文件,如下面的简单实例:

随机执行

img_5ac85ef8cad3a714b0f8dfd2e8dc8e25.png
随机执行代码

代码分析:

定义了一个Locust任务,里面定义了两个类,一个UserBehavior类,用于定义测试业务,一个WebsiteUser类,用于定义模拟用户,我们定义一个模拟用户在执行任务之间应该等待多长时间

顺序执行:用@task 构造器

img_3cc13a278a51ab23b9bf151303e0c5f4.png
顺序执行

四、启动运行locust

1.输入如下指令

进入cmd

进入到项目所在的目录,执行以下命令,然后按回车键

        locust -f d:/work/test/locustio.py --host=https://www.baidu.com

locustio.py为测试脚本,https://www.baidu.com为测试的网站。

img_273d084fa297f1d2867d66739b695030.png
启动locust

2.打开locust的web界面,浏览器访问:http://127.0.0.1:8089或localhost:8089 

img_c5575fcf3ad23ed10b127a3e1db2896f.png
locust的web界面

locust的web界面分析:

第一行Number of users to simulate是模拟用户的数量(虚拟用户数)

第二行Hatch rate (users spawned/second)表示产生模拟用户的速度

填写完成后点击“Start swarming”即可开始测试

五、分析测试结果

img_e1abe9faf55b941afd35695e583410e0.png
locust性能参数界面

性能测试参数

Type: 请求的类型,例如GET/POST。

Name:请求的路径。这里为百度首页,即:https://www.baidu.com/

request:当前请求的数量。

fails:当前请求失败的数量。

Median:中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值。

Average:平均值,单位毫秒,所有请求的平均响应时间。

Min:请求的最小服务器响应时间,单位毫秒。

Max:请求的最大服务器响应时间,单位毫秒。

Content Size:单个请求的大小,单位字节。

reqs/sec:是每秒钟请求的个数。

在这个过程中,可以随时停止测试,调整参数,当然,也可以在测试数据收集完成后,导出测试结果:

img_a396b1739ce7147fe4c19e31c538d8d4.png
测试结果

图形界面显示

img_49659ff43e02f0b67dab61945ad71d86.png
图形界面显示

停掉python命令后,也可以看到一些测试数据:

img_f0dc3e399a698f100f69c7ad147d6467.png
测试数据

六,命令行执行(取消web显示界面)

命令行执行

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

启动参数:

–no-web 表示不使用Web界面运行测试。

-c 设置虚拟用户并发数。

-r 设置每秒启动虚拟用户数执行的次数。

-t 设置设置运行时间。

Locust也可以做分布式执行,需要装一个pyzmq。

性能测试首先而在于分析性能测试的需求,设计性能测试场景,尽可能的模拟真实环境中的压力(正常和异常情况)。然后结果是考察并发用户数、响应时间、tps这类指标。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
12天前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
34 2
|
9天前
|
前端开发 机器人 测试技术
【RF案例】Web自动化测试弹窗处理
在进行Web自动化测试时,常会遇到不同类型的弹窗,如ajax、iframe、新窗口及alert/Confirm等。这些弹窗可通过Selenium进行定位与处理。其中,ajax弹窗直接定位处理;iframe需先选中再操作;新窗口类似iframe处理;而alert/Confirm则需特殊方法应对。在Robot Framework中,需先定义并获取窗口后使用特定关键字处理。此外,还有部分div弹窗需在消失前快速定位。希望本文能帮助大家更好地处理各类弹窗。
18 6
【RF案例】Web自动化测试弹窗处理
|
11天前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【9月更文挑战第10天】随着软件应用的不断扩展,性能测试成为确保系统稳定运行的关键环节。本文通过对比Apache JMeter和Locust,探讨了如何在Python环境中利用这两款工具挖掘更多性能测试潜力。JMeter是一款成熟且功能强大的开源工具,支持多种协议,适用于各种应用的测试;而Locust则基于Python,通过简单脚本模拟HTTP请求,更适合Web应用测试。
28 2
|
16天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【9月更文挑战第5天】性能测试是确保应用在高负载下稳定运行的关键。本文介绍Apache JMeter和Locust两款常用性能测试工具,帮助识别并解决性能瓶颈。JMeter适用于测试静态和动态资源,而Locust则通过Python脚本模拟HTTP请求。文章详细讲解了安装、配置及使用方法,并提供了实战案例,帮助你掌握性能测试技巧,提升应用性能。通过分析测试结果、模拟并发、检查资源使用情况及代码优化,确保应用在高并发环境下表现优异。
42 5
|
13天前
|
消息中间件 监控 测试技术
惊呆了!Python性能测试高手都用这些神器:JMeter+Locust,效率翻倍📈
【9月更文挑战第8天】在软件开发中,性能测试对确保应用稳定性和高效运行至关重要。对于Python开发者而言,选择合适的性能测试工具能显著提升测试效率并精准定位性能瓶颈。本文深入探讨了JMeter和Locust这两款工具的独特优势。JMeter作为跨平台的性能测试工具,支持多种协议,具备高度可定制性和扩展性;而Locust则专为Python应用设计,利用协程实现高并发,提供实时监控和分布式测试功能。两者结合使用,可在实际项目中实现1+1>2的效果,帮助开发者构建全面高效的测试方案,保障应用稳定运行。
42 1
|
15天前
|
测试技术 Apache 数据库
从慢如蜗牛到飞一般的感觉!Python性能测试实战,JMeter&Locust助你加速🏃‍♂️
【9月更文挑战第6天】你的Python应用是否曾因响应缓慢而让用户望而却步?借助JMeter与Locust,这一切将迎刃而解。JMeter作为Apache基金会的明星项目,以其强大的跨平台和多协议支持能力,成为性能测试领域的魔法师;而Locust则以Python的简洁与高效,让性能测试更加灵活。通过实战演练,你可以利用这两款工具轻松识别并解决性能瓶颈,优化数据库查询、网络配置等,最终使应用变得敏捷高效,轻松应对高并发挑战。
12 1
|
17天前
|
测试技术 持续交付 Apache
性能测试不再愁!Python+JMeter+Locust,三步打造高性能应用
【9月更文挑战第4天】随着互联网的发展,软件性能成为衡量应用成功的关键。性能测试确保应用稳定高效运行,但复杂环境和多样需求带来了挑战。Python、JMeter和Locust三款工具可构建高效全面的性能测试方案。Python语法简洁,库丰富;JMeter提供图形界面,支持多种协议;Locust基于Python,简单易用且高度可扩展。结合三者,能满足复杂需求,保证灵活性与高效性。无论初学者还是资深工程师,都能确保应用高性能运行。
22 1
|
7天前
|
jenkins 测试技术 持续交付
自动化测试的高效之路:如何利用Python进行Web应用测试
【9月更文挑战第13天】在软件开发的快节奏中,自动化测试是确保质量和效率的关键。本文将引导你了解如何使用Python语言及其强大的测试框架来提升Web应用的测试效率。我们将一起探索编写简洁而强大的测试脚本的技巧,以及如何通过持续集成(CI)实现自动化测试流程。准备好让你的测试工作飞一般的感觉!
|
15天前
|
前端开发 JavaScript 开发者
现代前端框架激烈交锋,高效响应式 Web 界面的归属扑朔迷离!
【9月更文挑战第6天】本文通过实际案例,比较了主流前端框架 Vue.js、React 和 Angular 的特点与优势。Vue.js 以简洁的语法和灵活的组件化架构著称,适合小型到中型项目;React 强调性能和可扩展性,适用于大型应用;Angular 凭借全面的功能和严格架构,适合企业级开发。开发者应根据项目需求和技术栈选择合适的框架。
31 0
|
20天前
|
数据库 开发者 Python
web应用开发
【9月更文挑战第1天】web应用开发
34 1