性能测试工具 抓取生产环境业务比例有啥用?

树叶 · 2022年02月23日 · 最后由 Bob 回复于 2022年02月28日 · 3302 次阅读

在做性能测试的时候,经常听到各路大佬说要模拟真实环境,那怎么模拟真实的生产环境呢?最好的办法就是统计生产环境的业务,抓取各个业务的比例,然后称之为业务模型,并按照这个业务模型,进行压测,得到 TPS 曲线。

但是经过我实际操作下来,发现这个非常难统计,因为业务每时每刻都在变化,比例也在变化。假设我们按照小时来统计,共 ABC 三个业务,那么有下图

0-9:暂未统计。。忽略

9~10:A-10 万 B-20 万 C-30 万 比例为 1:2:3
10~11: A-30 万 B-10 万 A-20 万 比例为 3:1:2

11~24:暂未统计。。忽略

那么在做性能测试的时候,如果按照小时来统计,一天 24 个小时,就有 24 个场景,一个月 30 天,就有 720 个场景,,这怎么测得完?

可能也有人说,从中抽象出几个比较有代表性的比例,但是即便这样,也是一个不小的工作量,场景太多了。。
而且这是按照小时来统计的,并不能 100% 模拟线上情况

我甚至开始怀疑这么做有啥用?线上都已经出来比例了,你再统计出来在线下做一个性能压测,有啥用?直接看线上不就好了么?
难道统计出来是为了做性能回归用?

一脸懵逼中。。

最佳回复

个人理解:

1、获取这个比例数据,主要是给性能场景设计提供一个相对有效的参考,相对比拍脑袋或者直接都二八原则靠谱。

2、至于说每个小时都不一样这种,实际绝大部分情况下不可能真的每个小时的场景都测试,需要做取舍。你这里列举了 30 天就有 720 个场景,这只是最低效的穷举。一般情况下,业务表现一周是一个周期,工作日和周末会有较大差异,然后性能测试一般只选取高峰期的场景,假设每天都有 2 次高峰期,且周末和工作日高峰期情况差异较大算,那只需要 工作日 2 次高峰期 + 周末 2 次 ,一共 4 个场景就可以了。怎么想办法把穷举的多场景,聪明地通过尽可能少的样本来完成测试,这个本身应该是测试的基本技能,是要最花功夫去思考研究的地方。

3、最后说的线上已经有比例,为何不直接看线上表现作为性能测试结果,主要原因是性能测试场景大部分情况下是为了测试出系统的瓶颈点,线上虽然比例可以参照,但流量绝大部分情况下是不会达到瓶颈点的,所以要测试出系统瓶颈点,就必须要线下做压测才行。当然你做好压测数据隔离后,凌晨直接搞个压测直接压线上也可以,全链路压测由于环境太复杂,基本也都是这么弄的。

最后总结:

楼主的思维有点朝着 1:1 模拟线上情况这个极端走了,场景要穷举全,线上有的都要测试,那自然工作量大且看起来不可能。如楼上所说,多思考,先想清楚你的目标是什么,再去针对性重点解决。应该没有老板给的性能测试目标是穷举线上所有场景的,一般都是挑重点,只要压力最大且出问题损失最大的场景性能能抗住不崩溃,就没问题。

每个小时的模型的确不同,而且可能取得有问题 (比如业务高峰 1 小时实际是出现在 9:30-10:30,假设这期间交易量为 500w,结果你按整点取 9:00-10:00,结果交易量只有 300w,那你得出处理能力就不同了,业务模型也可能不同), 1 小时颗粒度还是太粗了,要往小取,比如取高峰半小时,高峰 1 分钟等

共收到 7 条回复 时间 点赞

大佬们都不屑于回复吗?😂

理论是好的,实践成本太高

个人也很关注这个问题,已我浅显的测试经验,测试应该是针对特殊的测试场景下,脱离了场景谈性能就很宽泛了,比如说双十一这种特殊的场景

希望这个问题可以置顶看看,大佬们的看法

性能测试是要围绕性能测试需求展开的,性能测试需求是什么?没有目标一切都是空谈

个人理解:

1、获取这个比例数据,主要是给性能场景设计提供一个相对有效的参考,相对比拍脑袋或者直接都二八原则靠谱。

2、至于说每个小时都不一样这种,实际绝大部分情况下不可能真的每个小时的场景都测试,需要做取舍。你这里列举了 30 天就有 720 个场景,这只是最低效的穷举。一般情况下,业务表现一周是一个周期,工作日和周末会有较大差异,然后性能测试一般只选取高峰期的场景,假设每天都有 2 次高峰期,且周末和工作日高峰期情况差异较大算,那只需要 工作日 2 次高峰期 + 周末 2 次 ,一共 4 个场景就可以了。怎么想办法把穷举的多场景,聪明地通过尽可能少的样本来完成测试,这个本身应该是测试的基本技能,是要最花功夫去思考研究的地方。

3、最后说的线上已经有比例,为何不直接看线上表现作为性能测试结果,主要原因是性能测试场景大部分情况下是为了测试出系统的瓶颈点,线上虽然比例可以参照,但流量绝大部分情况下是不会达到瓶颈点的,所以要测试出系统瓶颈点,就必须要线下做压测才行。当然你做好压测数据隔离后,凌晨直接搞个压测直接压线上也可以,全链路压测由于环境太复杂,基本也都是这么弄的。

最后总结:

楼主的思维有点朝着 1:1 模拟线上情况这个极端走了,场景要穷举全,线上有的都要测试,那自然工作量大且看起来不可能。如楼上所说,多思考,先想清楚你的目标是什么,再去针对性重点解决。应该没有老板给的性能测试目标是穷举线上所有场景的,一般都是挑重点,只要压力最大且出问题损失最大的场景性能能抗住不崩溃,就没问题。

每个小时的模型的确不同,而且可能取得有问题 (比如业务高峰 1 小时实际是出现在 9:30-10:30,假设这期间交易量为 500w,结果你按整点取 9:00-10:00,结果交易量只有 300w,那你得出处理能力就不同了,业务模型也可能不同), 1 小时颗粒度还是太粗了,要往小取,比如取高峰半小时,高峰 1 分钟等

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册