性能测试实战 30 讲
高楼
前 HP 高级性能专家,7DGroup 创始人
45941 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 37 讲
性能测试实战 30 讲
15
15
1.0x
00:00/00:00
登录|注册

12丨性能场景:做参数化之前,我们需要考虑什么?

第二类
第一类
场景三
场景二
场景一
参数化数据在数据库中的直方图是否均衡?
参数多与少的选择对系统压力有什么影响?
参数化数据从哪里来?
参数化数据应该用多少数据量?
思考题
参数化数据在数据库中的直方图是否均衡?
参数取多与少对系统压力有什么影响?
参数化数据从哪里来?
根据业务场景计算参数化数据量
参数化数据的疑问
参数化数据量不足
数据不均衡
总结
参数化数据
性能场景:做参数化之前,我们需要考虑什么?

该思维导图由 AI 生成,仅供参考

在性能测试中,我们要关注的数据主要有以下几类,分别是参数化数据、监控数据和基础铺底数据。
我们今天先描述第一种参数化数据,在后面的文章中再描述其他数据。
首先我们需要了解,为什么要关注性能场景中的参数化数据呢?我以下面的两个例子说明一下。
在我的工作经历中,见过很多初级性能测试工程师不知道如何设置合理的参数化数据,以至于数据会出现这两种情况。
1. 数据不均衡
有些人直接用同一个数据执行混合场景测试,在这种情况下对服务器的压力和真实环境下的完全不一样。有时我们不得不造很多参数化数据,也有很多工程师不考虑数据库表中的数据直方图,就直接在少量的参数化数据中创建了大量的相关记录。比如说,在电商系统中造出大量的购买记录;在银行系统中造出大量的个人流水记录。
这些都不能满足真实用户场景的需要,导致的结果就是整个测试结果都毫无意义。
2. 参数化数据量不足
有时候,如果我们选择用非常少量的数据运行大量业务操作的场景,就会导致压力和真实生产环境完全不一致。比如说,用 100 个数据运行出上万甚至上亿的业务操作。
那么到底该怎样才能合理地设置参数化数据呢?

参数化数据的疑问

根据我的经验,在参数化测试数据的获取和考虑上,我们一般会有以下四个常见的疑问。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

参数化数据在性能测试中的重要性不言而喻。本文从参数化数据的重要性出发,分析了参数化数据不足和数据不均衡的情况,并提出了合理设置参数化数据的方法。首先,根据业务场景来计算需要的参数化数据量,包括可循环使用的数据和不可循环使用的数据。其次,讨论了参数化数据的来源,强调了数据的有效性和合理性。最后,指出了参数取多与少对系统压力的影响,强调了合理的参数化数据对于性能测试结果的意义。文章通过具体的场景分析和计算方法,为读者提供了实用的参数化数据设置指导,帮助读者更好地进行性能测试。文章还提出了两个思考题,引导读者深入思考参数化数据的分析重点和来源规则。通过本文,读者能够深入了解参数化数据在性能测试中的重要性和设置方法,为其在实际工作中提供了有益的指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能测试实战 30 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(32)

  • 最新
  • 精选
  • zuozewei
    小结一下,在性能测试中,我们关注的参数化数据主要有以下几个方面: 1)参数化数据应该用多少数据量? 我们需要保证测试时间足够长、满足测试的负载请求需求,根据「目标tps x 持续时间(秒级)」可以计算出参数化数大概的量级。 2)参数化数据从哪里来? 大概分为两大类型: - 死水数据,即out-of-box(事先创建测试数据),数据存在后台的数据库中; - 活水数据,即On-the-fly(实时创建),数据库不存在这些数据,构造参数化数据需要符合业务特点。 构造测试数据通常有以下两种方法: - 通过 API 调用生成测试数据; - 通过数据库操作生成测试数据。 3)参数多与少的选择对系统压力有什么影响? 满足测试的负载请求足够多和数据足够多样化,从而最大限度地减少或者掩盖缓存等其他因素的影响。参数取得过多,对系统的压力就会大;参数取得过少,不符合真实场景中的数据量,则无法测试出系统真实的压力。 4)参数化数据在数据库中的直方图是否均衡? 参数化数据需要符合真实业务数据分布情况,这样更符合业务真实场景。

    作者回复: 总结的很好。

    2020-01-22
    26
  • 律飛
    1.参数化数据的分析重点是哪些?在不同的场景中为什么参数化数据有如此大的差异? 分析重点是获知数据量。一是通过业务模型分析计算,获得初步的数据量要求;二是根据限制条件和业务场景,确定数据类型;三是结合上述两点,最终确定参数化数据的数据量。 不同场景中,数据使用对业务的完成是不一样的,比如某一场景中数据可以反复出现,不影响业务,自然能实现预期的场景;而另一场景中,反复出现的数据却不能多次实现同一业务,这种情况下,当时无法实现预期的场景。 2.参数化数据的来源和获取要符合哪些规则?当不符合获取规则时,会产生什么问题? 参数化时需要确保数据来源以保证数据的有效性,千万不能随便造数据。这类数据应该满足两个条件:要满足生产环境中数据的分布;要满足性能场景中数据量的要求。 产生的问题:1.不合理的数据分布,会干扰测试结果,增加后续分析和测试的工作量;2.数据取得过多,对系统的压力就会大;数据取得过少,不符合真实场景中的数据量,则无法测试出系统真实的压力。

    作者回复: 理解的很对。这样下去,看完专栏就超过我了。

    2020-01-10
    13
  • bolo
    1、参数化数据的分析重点是哪些? 在不同的场景中为什么参数化数据有如此大的差异? 参数化的数据量。 具体还是要结合具体的业务来进行分析,是否可以重复使用数据 如果仅仅是一个查询接口,没有涉及缓存,每次都是走一个DB的查询,那这样的话可以使用重复数据。 如果这个接口设计了读写,并有缓存,就要分开来进行考虑了。 2、参数化数据的来源和获取要符合哪些规则? 当不符合规则时,会产生什么问题? a)、数据来源尽可能贴近生产环境的业务逻辑 b)、满足生产的数据分布(分库分表..) 当不符合规则是,会导致性能测试意义变得不大。因为没有模拟生产的用户业务操作。 举个栗子: 一个接口是用来获取用户的VIP的状态的? 当用户符合条件,需要将用户的状态置为VIP(一次update操作),同时设置缓存。当下次查询的时候,就会直接命中缓存。 如果采用的同一个数据,只有第一个请求,会走到所有的逻辑判断,后续的请求就会直接命中缓存,TPS很高,响应时间很短。给人一种错觉,接口的性能很好,其实并不是符合实际需要的。 这是我们就需要采用参数化的不循环逻辑,构造大量的符合条件的参数化用户来进行测试。

    作者回复: 写得太好了。真正的理解了我要表达的内容。

    2021-02-25
    2
    12
  • 人心向善
    那老师登录的点来说,如果被测系统即使允许同一个用户名反复登录系统,当只用一个用户名去模拟并发需求时数据库始终是对这一条数据进行查询,如果用数据库大量的用户去参数化模拟登录,数据库除了先查询第一个,还会去先查询其它用户名是否存在,这个时候数据库的压力和查询一个用户名的压力是完全不一致的。 带来的测试结果就是这并不符合实际场景的需求 更通俗的来举个例子,外卖小哥长期对一个地址送餐,如果在这一条线上必然已轻车熟路,因为他知道哪里是哪里,如果去一个新地址送餐,压力、时间消耗自然就比以前的多得多了

    作者回复: 这个比喻好恰当!

    2020-10-09
    7
  • 小昭
    今日思考题: 参数化数据的分析重点是哪些?在不同的场景中为什么参数化数据有如此大的差异? 参数化数据分析时的重点是业务逻辑,比如数据量、数据来源、参数的多少以及数据分布是否与生产一致。 参数化数据要根据具体的场景来进行分析,比如有些数据可以重复使用,此场景中的参数化数据量就会少一些;而有些数据只能使用一次,此时就需要根据性能场景要求配置足量的数据。归根结底还是业务逻辑不同。 参数化数据的来源和获取要符合哪些规则?当下不符合获取规则时,会产生什么问题? 数据的来源和获取要满足生产环境中数据的分布,以及性能场景中数据量的要求。参数过多,会对系统造成过大的压力;参数过少,不符合真实场景,无法测出系统真实的压力。 这节的内容很重要,所谓“磨刀不误砍柴工”,必须要花时间搞清楚业务逻辑,这样才能保证最基本的数据没问题。如果连数据都没弄明白,后面的一切都是徒劳呀!

    作者回复: 你这是要上天了。理解的全对!

    2020-03-23
    5
  • 善行通
    参数化数据应该用多少数据量? 1、之前做性能测试,不会计算使用多少数据,反正找几千条数据做性能测试,如果可以重复使用,就用几个用户做压测。经过老师这样讲解,1、循环场景使用【用户数据=线程个数】2、不可循环使用的数据Tps * 持续时间如【100(pts)x30*60(时间)=180000(条用户数据】 ;明白(配置参数之前,我们需要先判断这个参数是什么类型的数据) 参数化数据从哪里来? 1、后台数据库中; 2、在脚本执行成功后会将这些数据 insert 或 update 到数据库中; 3、通过模拟业务接口把数据跑进去; 明白:参数化时需要确保数据来源以保证数据的有效性。 参数多与少的选择对系统压力有什么影响? 1、明白:如果压力工具使用的数据量少,那么应用服务器、缓存服务器、数据库服务器,都将使用少量的缓存来处理,相应消耗资源比较少,测不实际效果; 2、如果压力工具使用的数据量少,那么应用服务器、缓存服务器、数据库服务器,都将使用少量的缓存来处理,导致命中率高,响应实际块; 3、参数取得过多,对系统的压力就会大; 4、参数取得过少,不符合真实场景中的数据量,则无法测试出系统真实的压力 感谢老师总结:对一个系统来说,获取的参数化数据是否合理,会直接影响压力测试的结果有没有意义。 参数化数据在数据库中的直方图是否均衡,这一层学到【如果数据取自于数据图,我们通常要检查一下数据库中的数据直方图。 对于直接从生产上拿的数据来说,数据的分布更为精准。】性能测试,性能测试数据之间影响测试结果。 感谢老师总结的【参数化数据的合理性对性能场景有着举足轻重的作用。通常,我们在做参数化数据之前,需要先分析实际业务的逻辑】 参数化数据的分析重点是哪些? 1、参数化数据的分析重点是业务逻辑,只有符合逻辑的参数化,对性能测试结果会之间影响。 在不同的场景中为什么参数化数据有如此大的差异? 1、电商下单压测,如果用重复数据,完全不符合实际业务情况,会导致大量缓存,结果不真实; 2、如果是登录后操作其他业务,就可以用几个用户登录后,进行其重复业务操作压测 参数化数据的来源和获取要符合哪些规则? 1、通过数据库之间查出来做参数文件 2、通过接口把数据跑出来这样不会破坏表,更真实 当不符合获取规则时,会产生什么问题? 1、压测结果不真实; 2、影响压测判断;

    作者回复: 觉得真传!!

    2020-01-10
    5
  • 赵娜
    当不知道tps情况下,如何确定参数化的数据量以及设定线程数啊

    作者回复: 这里面有一个探测尝试的阶段。不知道时就加随意加,再分析出数据量的影响,然后修正场景。

    2020-03-21
    4
  • 月亮和六便士
    老师,怎么看数据库中数据分布直方图?

    作者回复: 根据关键列做groupby。

    2020-01-16
    4
  • Geek_vivian
    1、参数化数据的分析重点是哪些?在不同的场景中为什么参数化数据有如此大的差异? 重点有三个方面:业务逻辑、数据量、数据分布(数据质量) 理解业务逻辑,确定所需数据的类型、数据的数量。在参数化时,数据类型决定了哪些数据可以重复使用,哪些不可以,要根据业务逻辑尽量的接近现实情况,这样才会测试出上线后真实的情况。根据数据类型、TPS、运行时间,才能算出一个至少要准备的数据量。在准备数据时,也要考虑数据分布的直方图,这也需要对业务逻辑进行分析。比如一个搜索引擎的测试,我们需要考虑在多大的数据池中搜索,比如在全国范围内搜索和在一个城市范围内搜索这个数据的直方图不是一个级别的。同样在一个城市范围内搜索,在北京、上海搜索与在地广人稀的城市搜索也是不同的。这就说明了业务逻辑分析的重要性,业务逻辑分析的结果决定了数据量、数据分布的质量。 场景不同,数据量也不同、TPS也不同;比如,设置一个搜索范围为北京的场景,基础数据池为百万级别,TPS假设在500/秒,如果我们要运行场景10分钟,搜索关键词不能重复,我们至少需要准备500*10*60=300000个关键词,多了不限。设置一个搜索范围的基础数据为10万级别的城市,TPS假设在1000/秒,如果我们运行场景10分钟,搜索关键词不能重复,我们至少需要准备1000*10*60=600000个关键词。这仅仅是数据量的说明,还需要考虑关键词的命中率。 2、参数化数据的来源和获取要符合哪些规则?当不符合获取规则时,会产生什么问题? 个人觉得最主要的规则是尽量靠近上线系统真实情况。不无限靠近系统的真实情况时,可能会造成两种情况,一是上线后宕机,引起经济损失;二是花了重金保证了不宕机,但性价比太悬殊。其实这又回到了测试的价值上,我们是要找到一个性价比的平衡点,还是要找出所有的bug?我觉得可能在工作中,我会出于安全考虑,设置一个业务逻辑上更接近真实情况的场景、一个在接近真实情况场景上再加一定百分比的压力(最后上线的应该是这个)。【我感觉这个问题回答的有点跑偏了,但是确实是想到了这些。】

    作者回复: 想得很好,有扩展就是有更好的理解。

    2020-05-07
    3
  • Geek_081377
    10万参数化数据都放在文件里,可能的风险是,参数化文件过大、压测工具加载文件性能差,设置无法成功读取文件,这个问题有同学留言过,老师回答是“放在放数据库或者放redis里”,但是又有一个问题,跑脚本时候怎么读取到里面的数据呢?

    作者回复: redis和数据库 里都可以。 jmeter中写代码去取就行了,也有相应功能可以用。网上有很多这样做的示例。

    2020-03-26
    2
    3
收起评论
显示
设置
留言
32
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部