关于API性能测试压力模型选择的思考

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


1. 压力的本质

什么是压力?用户给系统发送的请求就是压力,因为系统需要消耗资源来处理来自用户的请求。压测本质上就是在模拟用户发送给被测系统的请求。这里有两个关键词:“用户”和“请求”。

在压测工具中,通常用“线程”来代表“虚拟用户”,一个线程就是一个用户,一组线程就是一组用户。显然,线程数越多,用户数就越多,系统压力就越大。

但是,系统压力不仅取决于线程数,还取决于请求数。线程启动后,就开始一个接着一个地发送请求。线程发送请求的频率越高,单位时间内系统需要处理的请求数(即吞吐量)就越大,系统压力就越大。

因此,压力模型本质上是在控制两个变量:

1)线程数:模拟同时在线的用户数量

2) 请求频率:模拟用户访问系统的频率。

在线用户数量越多,用户单位时间内访问系统的操作越频繁,被测系统承受的压力就越大。

2. 压力模型的本质

在对系统进行压测前,首先需要选择合适的压力模型。压力模型决定了我们在压测时,给系统施加什么类型/什么大小/什么形状/什么量级/持续多久的压力。

压力模型的选择,本质上是在回答这几个问题:

  • 压力类型:对系统施加并发用户数的压力,还是请求吞吐量的压力?

  • 压力形态:对系统施加固定大小的压力,还是阶梯递增的压力?通俗说,压力是一次性给到位,还是慢慢加上去?

  • 压力大小:对系统施加多大的压力?

  • 压力持续时间:压力持续多久?

2.1) 对系统施加并发用户数的压力,还是请求吞吐量的压力?

并发模式控制活跃的线程总数(同时在线的虚拟用户数),是控制在线总用户数的;吞吐量模式控制每秒钟的请求数,是控制在线用户请求频率的。

  • 并发数100:单位是个,同时在线的线程数/用户数是100个

  • 吞吐量100:  单位是QPS,后端接收到的请求数是每秒钟100个

在并发模式下,当API响应速度很快时,例如RT为100ms,那么每秒钟内,如果没有定时器或者发送次数的限制,单个线程可以发送10个请求。100个并发用户可以对系统施压1000QPS的压力。

2.2) 压力是一次性给到位,还是慢慢加上去?

一次性给到位,用固定压力;慢慢加上去,用阶梯压力。这里的压力既可以是并发量(同时在线的虚拟用户数),也可以是吞吐量(每秒钟的请求数)。

固定压力下,压力大小保持固定;阶梯压力下,压力大小阶梯式增加,直到一个固定值为止。

  • 固定压力100:压力大小固定为100,可以是固定100个在线用户,也可以是固定每秒钟100个请求。

  • 阶梯压力(10, 5, 4, 100):起始压力为10,每5秒钟递增一次,总共递增4次,最后达到100的固定压力。

2.3) 压力什么时候结束?

结束压力本质上就是结束线程。通常,我们可以通过控制压测时长来决定什么时候结束压测。但是控制压测时长有个问题:

  • 如果压测时长过小,可能导致请求还没有发完就被强制终止了压测

  • 如果压测时长过大,可能导致发送的请求数量超过目标值

如果想要精确控制压测发送的请求数量,有两种方式

1) 控制循环次数:限制每个用户(线程)循环执行的次数,到达一定次数后,线程自动停止。

2) 控制压测数据量:压测数据文件(通常是CSV文件)有多少条数据,就发送多少个请求,发完为止。(前提是压测时长设置得足够长,足够这些请求发完)

3. 压测模型选择实践

压力模型就是上面3个问题答案的组合。下面介绍若干常用的组合及其应用场景。

3.1)想要摸底接口QPS?

需求:想要压测接口X,看看接口最大能支持多少QPS?

分析:在不清楚应该压多大QPS的情况下,使用并发压力模型。并且为了降低风险,可以使用阶梯压力逐步增加并发量。压测的时候,观测QPS,当QPS到达一定数字不再继续增加时,就大概摸清了该接口的性能上限。

结论:使用并发 + 阶梯压力

3.2)想要做分钟/小时级的固定QPS压测?

需求:想要以1000QPS施压接口X,持续施压1个小时,观测系统是否平稳?

分析:在有明确QPS压测目标的情况下,使用吞吐量压力。

结论:使用吞吐量压力

3.3) 想要固定QPS压测异步接口?

需求:以30QPS的固定压力测试X接口,验证系统是否正常。已知:

1)X是一个异步接口,X的执行结果通过轮询Y接口得到。

2)X接口异步处理慢,通常需要数秒钟。

分析:压测用例由X + Y两个接口组成。对于每个线程,先压X接口,然后轮询Y接口获得结果,把这个过程叫做一个X事务。根据需求,我们需要控制X接口的压力,而不是X事务的压力。为了控制X接口的压力,我们需要将吞吐量配置作用于X接口而不是X事务,确保X接口的QPS是30。因此,从事务层面,我们不能使用吞吐量压力,而应该使用并发压力。并且,由于X接口实际耗时通常需要数秒钟,并发压力量应该大于30。

结论:X事务使用并发用户数压力,设置用户数 > 30,同时X接口使用吞吐量压力,吞吐量大小=30QPS

3.4)想要做秒级的固定QPS压测?

需求:模拟脉冲流量,想要在10秒内,发送10000个X请求,要求QPS尽可能均匀,接近1000QPS。

分析:由于QPS太大,通常使用分布式压测(master-slave模式)。另外由于压测时间很短,无法使用常规的只支持分钟级QPS控制的吞吐量模型。为此,可以启动多个salve,并且控制每个slave的线程启动时间来模拟所要求的脉冲流量。具体来说,可以启动20个slave,每个slave配置500个线程,每个线程发送一个请求,总共发送10000个请求。将线程组的启动时间(ramp up time)设置为10秒,这样平均每个slave每秒钟启动50个线程,并发量为50*20=1000,满足1000QPS要求。

结论:使用并发压力 + 启动时间控制

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值