IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Python是最好的编程语言,Locust是最好的压测工具,不服来辩 -> 正文阅读

[开发测试]Python是最好的编程语言,Locust是最好的压测工具,不服来辩

Locust?是一个易于使用,分布式,用户负载测试工具。它用于负载测试 web 站点(或其他系统),并计算出一个系统可以处理多少并发用户。在测试期间,一大群虚拟用户访问你的网站。每个测试用户的行为由您定义,集群过程由 web UI 实时监控。这将帮助您在让真正的用户进入之前进行测试并识别代码中的瓶颈。

Locust?完全是基于事件的,因此在一台机器上支持数千个并发用户是可能的。与许多其他基于事件的应用程序不同,它不使用回调。相反它通过 gevent 使用轻量级协程。这允许您用 Python 编写非常有表现力的场景,而不用回调使代码复杂化。

2、安装

?用 pip 管理工具安装:?

pip3 install locust

?检查是否安装成功,执行命令:locust --v

3、压测过程

1.编写脚本

Locust 不同于 jmeter 可以用 GUI 来创建压测脚本。Locust 需要自己编写 python 脚本,压测负载脚本主要包含两个子类UserTask和WebsiteUser,分别继承TaskSet和Httplocust类,拥有这两个父类的公共属性和方法。

from locust import HttpLocust, TaskSet, task, betweenimport os,json# 定义用户行为class UserTask(TaskSet): ? ?def on_start(self): ? ? ? ?'''初始化数据,每个虚拟用户只执行一次'''
 ? ? ? ?self.client.post("/login",{"username":"test","password":"123456"})

 ? ?@task(2) ? ?def home_index(self):
 ? ? ? ?r = self.client.get("/sz/Home/DefaultHomeV2Request") ? ? ? ?assert json.loads(r.text)['Error'] == 0

 ? ?@task(1) ? ?def sale(self):
 ? ? ? ?self.client.get("/sz/Home/FlashSaleRequest") ? ? ? ?assert json.loads(r.text)['Error'] == 0 ? ?def on_stop(self): ? ? ? ?'''销毁数据,每个虚拟用户只执行一次'''
 ? ? ? ?self.client.post("/SignOut",{"CustomerGuid":"c7d7e646-9ce2-499b-a22e-a3c98d4545fe"})class WebsiteUser(HttpLocust):
 ? ?host = 'http://10.1.62.126'
 ? ?task_set = UserTask
 ? ?wait_time = between(3, 5)if __name__ == "__main__":
 ? ?os.system('locust -f stress_test.py ')

?locust 运行时:

  • ?on_start()? :每个并发用户在开始前各执行一次

  • on_stop():每个并发用户在结束后各执行一次

  • @task:通过装饰器设置运行权重,比如上面代码中 执行任务 home_index 和 sale 的总请求为 2:1

  • assert:断言设置

  • wait_time :每个任务之间设置间隔时间,随机从3~5区间内取,单位是 s

  • locust -f:指定 .py 压测脚本路径

2. Locust 监控

顺带提一下 locust web UI监控是基于 flask 框架,不指定 port 的话,默认地址:http://localhost:8089

开始测试,Locust 提供一个简易的监控界面,可以看到 RPS、响应时间 和 部分曲线图

3.运行模式

?1.web UI 模式

locust -f stress_test.py --web-host 10.1.44.31 --web-port 8090

--web-host:指定 web UI IP,默认 localhost

--web-port:指定 web UI 端口,默认 8089

2. no web 模式

locust -f stress_test.py --no-web -c 100 -r 20 -t 120

--no-web:指定无 web UI模式

-c:起多少 locust 用户(等同于起多少 tcp 连接)

-r:多少时间内,把上述 -c 设置的虚拟用户全部启动

-t:脚本运行多少时间,单位s

在 --no-web 模式下的报告如下:

4.分布式进程

Locust 是由 python 编写的,由于GIL的限制,单进程不能利用CPU多核的优势(实际测试结果也是一样,8核心的虚拟机,只有一核达到了95%以上的使用率,其余7核只围观,不出力)。所以单台机器上想要尽可能的压榨 CPU,只能开启多进程,一般有多少个核心启多少进程。

单台多进程:

?先启一个 master

locust -f /home/script/stress_test.py --web-host 10.1.62.223 --master

?再启 8 个 slave

locust -f /home/script/stress_test.py --slave

slave 节点启动后,在 locust 监控中能看到

多台多进程:

多台机器搭建 Locust 分布式 和 单台搭建多进程差不多。只有一个区别,如果 slave 和 master 不在一台机器上, slave 需要指定 --master-host 参数:

locust -f /home/script/stress_test.py --slave --master-host 10.1.62.223

?更多功能使用请查看Locust官方文档,形成良好的习惯?:官方文档?

4、总结

Locust 基于 python 脚本定制化压测,使用 python 语言来实现 参数化、关联参数、断言和一些复杂的压测场景非常方便。Locust 使用协程来构建tcp连接,本身单机并发能力强,但内部是由requests库的httpclient 发起网络请求,requests库功能挺全面,性能却很一般,好在 Locust 支持分布式,弥补了一定的性能缺陷。根据自己做的测试,同样几台客户机,jmeter搭建分布式测出的 qps 比 Locust分布式 高1/3。如果要提升 locust 单进程性能,可以将 httpclient 的实现方式从 requests 换成 geventhttpclient。

END学习安排上!

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:26:12  更:2022-05-07 11:26:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:30:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码