七.locust做性能测试
(一)locust简介
locust(蝗虫):是基于Python语言的性能测试工具,它是基于协程的思想来进行设计的。Python语言是没有办法利用多核的优势,所以了Python为了解决这个问题,设计了协程,作为协程的任务,遇到IO堵塞就立刻切换。 生命是协程,协程可以简单的来说就是微线程。
主要做负载测试、稳定性测试,也可以做压力测试
安装命令:pip3 install locust(打开cmd直接安装),超时的话重新操作
安装成功。
(二)做性能测试—压力测试
步骤:
1.写好Python代码文件,假如放在桌面
2.cmd进入路径,输入命令:locust -f locustfile.py
3.端口是8089,那么本地访问:http://localhost:8089/
4.开始测试:http://101.43.158.84:5000(所给测试地址)
注意:
-
设置的用户数和requests不是一致的,一个用户可以多次请求
-
locust使用的是协程(微线程)的方式,而jmeter是线程的方式
locust注释:
(三)做性能测试—负载测试
步骤如压力测试,只是错误率变高
八.性能测试项目实战
(一)性能测试计划:
1.背景
描述做这件事的前因后果
2.前期准备
做这件事需要做哪些准备,比如服务器、数据
3.技术工具
使用什么工具、是否自己写代码(locust需要写Python代码)
4.测试范围
具体的工作内容
5.测试风险
根据实际情况,看有无风险。即有哪些依赖项
(二)具体的设计和开发:
需要和leader核对
1.一码通需要做性能测试的点
同时扫描的响应时间,多少个人扫描能扫出来,查看核算检测报告的请求会出结果吗
关注指标:
100万 90万 150万人数
-
系统资源:CPU与内存
-
响应时间:最小,最大,平均,中位数,90%,95%,99%
-
吞吐量
-
IOPS,连接数
2.上传文件最大支持2G
关注指标:
上传文件成功需要的时间;上传过程中打开jvm观察cpu、内存变化的趋势
结果:5min上传成功且无oom,那么
a.需要测试一个人上传多大文件会oom,比如2.2g时oom。为保险>2g的不允许上传
b.需要测试有几个人同时上传2G文件会导致oom。比如11人同时上传2g文件,发生oom。那么保险起见设置9人/10人可以同时上传2g文件,其余的采取队列排队形式处理。当9个同时上传的时候,最快上传和最慢上传的时间是多少,最慢的时间是否接受
怎么设置测试场景?利用locust设计代码
⽀持持续的发送API请求,post请求
import time from locust import HttpUser,task,between class QuickStartUser(HttpUser): host = 'http://47.95.142.233:8000' min_wait = 3000 max_wait = 6000 def login(self): r=self.client.post( url='/login/auth/', json={"username":"13484545195","password":"asd888"}) return r.json()['token'] @task def api(self): r=self.client.post( url='/interface/run/api/32', headers={'Authorization':'JWT {token}'.format(token=self.login())}) assert r.status_code==200
(三)性能测试报告分析
1.参与人员
2.测试结论
3.过程数据
以2G文件上传为例:
测试结论:文件大于2.2g会发生oom,11人同时上传2g文件,发生oom。建议文件大小2g,同时上传人数10人
过程数据:一个2g文件5min上传成功且无oom,那么继续测试发现
1. 当文件>2.2g时发生oom
2. 当11人同时上传2g文件,发生oom。那么保险起见设置9人/10人可以同时上传2g文件,其余的采取队列排队形式处理。当9个同时上传的时候,最快上传和最慢上传的时间是多少,最慢的时间是否接受
100万
过程数据:
系统资源
响应时间
吞吐量
IOPS
测试结论
4.错误汇总
5.测试风险
【面试】
【1.性能测试流程(模型)】
1.结合产品的需求文档和产品的用户体量和系统的架构,梳理前期测试目标,比如吞吐量多少,测试人员主导和其他相关人敲定
2.拟定性能测试计划,包含了
-
明确每个性能测试的任务开始结束时间
-
明确每个任务的负责人
-
明确性能测试的工具(如下)
-
LoadRunner:HP公司研发的工业级别的性能测试工具,是收费的一款性能测试工具
-
JMeter:100%使用Java语言研发的性能测试工具,是开源的,互联网公司基本使用的都是该性能测试工具
-
Locust:是基于Python的协程来设计的性能测试工具,需要编写Python代码来进行性能测试
-
Gatling:是微服务架构下高性能的性能测试工具: HP公司研发的(用的少)
3.与相关人员评审测试计划测试点,做进一步的修改和确认
4.执行测试,进行数据收集
-
多次测试执行,收集每次性能测试的数据。包括系统资源:CPU和内存、数据库:连接数和iops、jvm资源:内存资源。响应时间:最大、最小、中位数、平均、中位数,90%,95%,99%,吞吐量
-
收集后的数据可视化展示
5.最后做测试分析
实际收集的结果得到最终的结论,比如吞吐量响应时间等,与期望的目标进行对比,判断是否达到目标
【2.负载测试与压力测试有什么区别】
1.负载测试
目的: 1、验证服务被部署的系统出现资源瓶颈的时候,服务依然能够提供产品的特性 2、找到系统的最大饱和状态,或者是最大的处理极限,为系统后续的容量规划提供参考的数据
在被测系统上持续不断的增加压力,直到性能指标(响应时间等)超过预定指标或者某种资源(CPU&内存)使用已达到饱和状态。核心是找到系统的处理极限,为系统调优提供数据,从而达到了解系统性能的容量
2.压力测试
该方法是指系统在一定饱和状态下,具体如CPU,内存等饱和使用的情况下,系统能够处理的会话能力,以及系统是否会出现错误,比如TimeOut,OOM,OverStackExpection(堆栈异常)。压力测试的特点: • 检查系统在处于压力情况下时应用的性能表现 • 等价于负载测试,使系统的资源处于一个瓶颈的状态(建议CPU和内存在75%以上) • 这种方式一般用于测试系统的稳定性 稳定性:指的是系统在最大的极限下,依然能够正常的访问,不会对客户造成任何的影响。
验收测试流程:测试完成后产品经理进行验收,会有邮件回复
【3.性能测试关注哪些指标】
-
吞吐量、最大最小响应时间
-
系统资源:CPU、内存
-
响应时间:最小最大平均中位数、90%,95%,99%
-
数据库:iops、连接数
-
jvm的资源变化趋势
【4.性能测试通过的判断依据是什么?】
判断依据就是我们的测试目标
【5.常用的性能测试工具有哪些以及它的区别】
-
LoadRunner:HP公司研发的工业级别的性能测试工具,是收费的一款性能测试工具
-
JMeter:100%使用Java语言研发的性能测试工具,是开源的,互联网公司基本使用的都是该性能测试工具
-
Locust:是基于Python的协程来设计的性能测试工具,需要编写Python代码来进行性能测试
-
Gatling:是微服务架构下高性能的性能测试工具: HP公司研发的(用的少)
【6.常用术语分别是什么意思】
1.响应时间:
响应时间=⽹络时间+应⽤程序的处理时间,响应时间是一个http完整的请求流程时间之和,请求和响应时间之和。
2.并发用户数
性能测试的核心是验证当前系统能否支持现有用户的访问,也就是说系统可以承受在同一时间段多少用户来访问系统,描述的是同一时间同时向客户端发出请求的客户
3.IOPS
该术语主要是针对数据库的,也就是每秒发⽣的输⼊/输出操作的次数,是数据传输的⼀个度量⽅法。⽤于磁盘的读写,IOPS指的是每秒读和写的次数,反映在硬盘上,数据库读写速度。
4.TPS/QPS
事务指的是某个操作或者是⼀组操作的组合。TPS统计的是每秒处理的事务数,即系统每秒能够处理的事务的数量。QPS指的是每秒查询率,如DB服务器在规定时间内处理流量多少的衡量标准
5.吞吐量
吞吐量指的是操作的速度,也就是每秒操作数或者每秒业务数。或者也可以说单位时间内客户端请求的数量,体现的是系统每秒能处理多少请求
吞吐量与并发测试区别:【重要】
并发测试:同一时间段同时向系统发送请求
吞吐量:该时间段内系统能处理的任务数
【7.在性能测试之前需要做哪些准备】
-
梳理前期测试目标,比如吞吐量多少,测试人员主导和其他相关人敲定
-
性能测试的目标参考依据是什么?产品的需求文档和产品的用户体量和系统的架构。
*例如淘宝性能测试场景:同时多少人登录,商品响应时间,同时多少人支付、领取优惠、收到短信营销
【8.性能测试中,开发说需要加服务器怎么办】
可以加,生产、开发、测试都加,全部保持一致。如果只有开发加,是不行的。
性能测试注意事项:
1.测试环境服务器的配置与生产环境服务器的配置必须一致,这样出的结论才有参考价值
【9.什么是生产者消费者模型】
生产者消费者模式:通过队列:Queue 实现
生产者(Producer) :不断的生产数据,使用的方法是put
消费者(Consumer):不断的消费数据,使用的方法是get
队列:Queue 规范:First In First Out ----》先进先出
【10.IO密集型以及CPU密集型的区别是什么】
工作负载类型:
• CPU密集型:应⽤程序执⾏繁重的计算,通常运⾏时间⽐较⻓,会占⽤⼤量的CPU。主要指计算型的程序,程序存在海量数据筛选出具体的数据。
• IO密集型:应⽤程序执⾏I/O,计算不多,会占⽤⼤量的内存资源 系统的最⼩粒度是线程,也就是说系统调度中粒度最细的就是对线程的调度。主要指读写类程序,程序存在大量的文件Io读写,短信营销优惠券发放。
【11.一个好的系统表现应该是如何的?】
能满足各种高并发状况依然为客户提供业务能力和服务
高并发下特别容易发生死锁、线程同步,尤其是文件读写业务
死锁:
A和B两个,为了保持线程同步,那么A操作B的时候,锁定B,B操作A的时候,锁定A。
线程同步:
A和B两个任务,任务就是线程,任务发生冲突。处理方式:加锁机制 , A操作时B不能操作】
【12.怎么理解资源调度?】
crm:客户管理系统
计算机中操作系统的最小单位是进程,进程最小的运行单位是线程。比如钉钉是进程,但是可以干很多事就是多线程程序。线程在执行时,由操作系统分配资源,操作系统通过操作系统的时间分片结合调度的算法来分配资源,决定哪个线程先执行哪个先不执行。调度过程中算法有抢占式算法调度,根据任务优先级,优先级高的优先分配资源,优先级低的后分配资源。比如Linux,Mac,java。线程优先级最高是10,最低是1,默认是5
调度策略:
在操作系统级别,专业的来说,调度器可以理解为:CPU时间划分给活跃的进程和线程,⽽且维护⼀套优先级的机制,这样更重要的工 作可以更快的执⾏,调度器会跟踪所有ready-to-run状态的进程。调度策略(调度器)可以动态的优先提升工作负载的性能。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异