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

10丨案例:在JMeter中如何设置参数化数据?

思考题
总结
参数化配置在LoadRunner中的使用说明
真实场景下的JMeter参数配置和执行结果
参数化配置在JMeter中的使用说明
基准测试
性能测试中的参数化数据

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

今天我们来做一个实例,看下在 JMeter 中,如何合理地设置参数化数据。

正式场景前的基准测试

在没有做业务混合场景之前,我们需要先做 Benchmark 测试,来确定一个登录业务能支持多少的业务量,这样就可以在业务混合场景中,根据场景中各业务的比例来确定登录的数据需要多少真实的数据。
我们继续用上一篇文章中用户登录的例子,单独测试登录业务,结果如下:
Java
summary + 125 in 00:00:04 = 31.0/s Avg: 28 Min: 0 Max: 869 Err: 0 (0.00%) Active: 1 Started: 1 Finished: 0
summary + 3404 in 00:00:30 = 113.2/s Avg: 31 Min: 0 Max: 361 Err: 0 (0.00%) Active: 6 Started: 6 Finished: 0
summary + 4444 in 00:00:30 = 148.4/s Avg: 57 Min: 0 Max: 623 Err: 10 (0.23%) Active: 11 Started: 11 Finished: 0
从上面的结果可以看到登录业务能达到的 TPS 是 113 左右,这里我们取整为 100,以方便后续的计算。

在测试工具中配置参数

在上面的试探性测试场景中,不需要观察系统的资源,只需要根据 TPS 做相应的数据统计即可。
前面我们知道,在这个示例中只做了近 10 万条的用户数据,为了方便示例进程。
下面我们从数据库中查询可以支持登录 5 分钟不重复的用户数据。根据前面的公式,我们需要 30000 条数据。
Java
100x5mx60s=30000条
接下来连接数据库,取 30000 条数据,存放到文本中,如下所示:
Java
username,password
test00001,test00001
test00002,test00002
test00003,test00003
test00004,test00004
test00005,test00005
test00006,test00006
test00007,test00007
...................
test30000,test30000

参数化配置在 JMeter 中的使用说明

我们将这些用户配置到测试工具的参数当中,这里以 JMeter 的 CSV Data Set Config 功能为例。配置如下:
在 JMeter 的参数化配置中,有几个技术点,在这里说明一下。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文通过实例详细介绍了在JMeter中如何合理地设置参数化数据,包括确定业务支持量、配置参数化数据、展示执行结果和LoadRunner中的参数配置页面。读者可以快速了解在JMeter中如何设置参数化数据,以及在实际场景中的应用和效果。文章还总结了性能测试中参数化的逻辑,并提出了思考题,引发读者思考。文章内容简洁明了,适合技术人员快速了解参数化数据在性能测试中的重要性和应用方法。

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

全部留言(25)

  • 最新
  • 精选
  • 律飛
    JMeter 的 CSV Data Set Config 功能用来从文件中读取数据行,并将它们拆分后存储到变量中。个人理解,Recycle on EOF的优先级高于Stop thread on EOF,也就是说,需要先判断Recycle on EOF,如果是Flase,直接在文件结束时就停止了线程,根本不考虑Stop thread on EOF参数值;如果是True,就要根据Stop thread on EOF参数值来确定线程是否停止运行。在明白组合逻辑关系后,可以更高效的设置参数、更准确的达到测试目的。 各种测试工具有各种测试功能,可能其中就会存在有关联的参数配置,这也需要我们特别关注。如果查阅资料还不能清晰认识,就按老师的做法,通过对不同组合进行实验,最终弄清楚组合关系,归纳总结出优先顺序,从而在平时测试中帮助我们快速有效地找到最优的组合。

    作者回复: 我觉得你写的比我写的好。哈。

    2020-01-07
    5
    16
  • 小昭
    今日思考题: 为什么参数化数据要符合生产环境的数据分布? 因为如果不符合生产环境的话,我们做这个性能测试就没有意义了。 为什么参数化数据要关注组合逻辑关系,而不是随意设置组合? 随意设置就会出现逻辑矛盾或者没有意义的组合。这样看上去节省了时间,其实反而浪费了时间。 今日感悟: CSV Data Set Config这个功能之前学过,但是只是别人告诉我怎么填,我就照着填了,没有深入思考各个参数不同组合会有什么样的效果。这节课听下来,对这个功能的理解又深入了些。超值超值,感谢老师。 看了评论为了验证Recycle on EOF和Stop thread on EOF这两个参数的关系,我去JMeter里实践了一下,我的CSV文件里有7条数据,线程数我设置的8。 得出结论是:如果Recycle on EOF是Flase,Stop thread on EOF是Flase,由于线程数比文件数据多,JMeter会继续执行,但是由于没有数据,会报错,然后停止;如果Recycle on EOF是Flase,Stop thread on EOF是True,就直接停止。所以两个参数我认为需要结合起来看,虽然Recycle on EOF的优先级高一些,但也不是能起决定性作用的。 然后回过头来再看一遍文章发现其实我练习的这两种情况老师都讲了并且举了例子。我刚学完的时候是清楚的(至少自己感觉是清楚的),但是看了评论我发现还是有点懵,然后决定自己试一试。练习过之后,是真的明白了。所以真的要动手去做呀。

    作者回复: 认真的同学。你全学会了,我可怎么混。😀😀😀

    2020-03-20
    2
    10
  • zuozewei
    第一个问题:为什么参数化数据要符合生产环境的数据分布? 在「01丨性能综述:性能测试的概念到底是什么」中已经讲过,性能模型中的业务模型是真实场景的抽象,即需要的数据通常都是从生产环境中的数据中统计来的,其关键就是「数据必须保证仿真」。 那么性能测试的时候我们需要特别注意压测流量以及相关的数据,必须保证它们的多样化和代表性,否则会导致测试结果会严重失真。 比如,当使用相同的测试数据进行重复测试时,如果压测请求不够大,那么各种缓存可能会严重影响测试结果。 第二个问题:为什么参数化数据要关注组合逻辑关系,而不是随意设置组合? 因为参数化数据要组合逻辑关系会直接影响参数化数据的分布情况,即数据是否均匀?数据是否稳定?是保否证测试时间足够长?满足测试的负载请求足够多和数据足够多样化,从而最大限度地减少或者掩盖缓存等其他因素的影响。

    作者回复: 已经理解的很深刻了。

    2020-01-20
    3
    7
  • 善行通
    感谢老师总结; 1、罗列出需要参数化的数据及相对应的关系; 2、将参数化数据从数据库中取出或设计对应的生成规则; 3、合理地将参数化数据保存在不同的文件中; 4、在压力工具中设置相应的参数组合关系,以便实模拟真实场景 之前做行测不太去理解: Recycle on EOF? :这里有三个选择,False、True 和 Edit。 Stop thread on EOF?:这里有三个选择,False、True 和 Edit。含义和上面一致。 Sharing mode : 这里有四个选择,All threads、Current thread group、Current thread、Edit。 这几个用户,经过老师这样一步一步分析,收获很大,谢谢老师分享 第一个问题:为什么参数化数据要符合生产环境的数据分布? 1、减少数据命中率; 2、减少缓存命中率; 3、符合性能压测价值,测试结果更真实; 第二个:为什么参数化数据要关注组合逻辑关系,而不是随意设置组合? 1、业务规则决定参数文件不能随便组合; 2、如果随意组合参数,会影响事务成功率;

    作者回复: 有收获我就值得了。

    2020-01-06
    5
  • 筱の简單
    1、为什么参数化数据要符合生产环境的数据分布? 因为压测本身就是服务于生产环境,为使项目满足真实用户的需要,所以做压测的宗旨都是以实际业务逻辑出发满足用户需要,所以参数化也依赖业务逻辑,故在参数化之前,需要分析真实业务逻辑中如何使用数据,再在工具中选择相对应的组合参数的方式去实现。 2、为什么参数化数据要关注组合逻辑关系,而不是随意设置组合? 因为不关注组合的逻辑关系而随意设置组合,有些组合会存在没有意义且不符合逻辑关系的情况。影响参数化设置的有效性,也侧面反映压测人员的技术专业性。

    作者回复: 理解的非常对。

    2020-02-22
    3
  • 陈陈陈小芮
    老师您好,我是刚接触性能测试没多久,所以有点疑问想请教下: 1、tps每秒100,5分钟需要的用户数据就是5x60x100,意思就是一秒钟需要的用户数据就是100个吗?举个例子,我的线程数、循环数都设置为1,一个线程组下有13个接口请求,但其中只有login这一个请求需要用到账号密码,其余的12个都不需要,此时执行显示13个请求在3秒处理完成,tps为平均每秒4.2个请求,按上面的逻辑,也就是一秒需要4.2个用户账号密码吗,但是这就跟我原本只需要一个账号密码相悖了,所以不太理解这个所需用户数的计算 2、在之前的基础篇您有讲过,tps是指的一个完整的事物,这个事物可以自己定义,若按这个理解,那么tps就应该是一个登陆操作带来的一系列请求(用我举的例子就是包含login在内的13个请求),可是此处的tps似乎是每秒处理的请求数(3秒请求数13,每秒就是4.2左右),好像又并不是事物数,这个点也不太理解

    作者回复: 1. 如果你是13个请求是一个完整的业务流,那就是13个请求是一个事务。那tps的t就是完整的业务流了,而不是请求级的了。 2. 没看懂。

    2021-08-23
    2
    2
  • 兰澜
    高楼老师,听了这个课收获很多,理清了一些思路。刚刚学习性能测试,做了一些简单的项目,有一个很问题一直很困惑,做一个项目的性能测试是我们获得了项目中需要测试性能的各接口的TPS和响应时间指标,跑基准场景测试时,使用LR工具,我要如何来设置start new iteration中的第3个选项中的每间隔多长时间迭代一次的值呢,这个可以依据什么来计算呢?或者怎么设置比较合理?还有就是start vusers中的用户数,每隔多长时间启动多少个用户,这个怎么设置比较合理呢?刚踏入性能测试,不知道如何去设置跑场景时的这些参数值,不知道怎样才是合理的

    作者回复: ”跑基准场景测试时,使用LR工具,我要如何来设置start new iteration中的第3个选项中的每间隔多长时间迭代一次的值呢,这个可以依据什么来计算呢?“ 答:我记得第二个是start new iteration at fixed/random intervals,every x second(s),如果是这个的话,就是指在设置的时间间隔之内只迭代一次。比如说,你设置为固定时长1秒,而迭代一次只需要500毫秒,那剩下的500毫秒就等待;如果再迭代一次需要400毫秒,则剩下的600毫秒就等待。 这个值的设置前提就是希望如何来控制单线程的TPS。 这个只有根据实际情况来判断合理值,比如说如何控制tps的比例。 “还有就是start vusers中的用户数,每隔多长时间启动多少个用户,这个怎么设置比较合理呢?” 答:这个设置在场景篇有描述。

    2020-03-10
    2
    2
  • 武先生爱学习
    请问,在公司里,做性能测试用的是什么负载机,用的自己的机器还是Linux负载机呢,这一块能否介绍下?

    作者回复: 这个并没有特定的。只要能压得起来,负载机本身不会成为瓶颈点就可以了。

    2020-02-24
    2
  • 小老鼠
    1,EOF处理不同对性能测试有什么影响?2,参数化用DB来获取,对性能测试结果的有无影响。

    作者回复: 我觉得你思考问题的角度和我要说的话题都不在一个层面上。 1. EOF多明显对测试有影响,那使用数据的逻辑,我都列的那么清晰了,已经说明了影响了。 2. 参数化用不用DB来做,只会影响压力工具的处理过程。我反复强调了,对什么样的工具来做压力,对性能差的好的性能工具,都无所谓。像jmeter就不是性能高的工具。但是现在还是有很多人在用,对服务器的性能测试结果肯定是没什么影响的,服务器的处理能力是服务器的,是另一个角度。

    2020-01-10
    2
  • VintageCat
    Java summary + 125 in 00:00:04 = 31.0/s Avg: 28 Min: 0 Max: 869 Err: 0 (0.00%) Active: 1 Started: 1 Finished: 0 summary + 3404 in 00:00:30 = 113.2/s Avg: 31 Min: 0 Max: 361 Err: 0 (0.00%) Active: 6 Started: 6 Finished: 0 summary + 4444 in 00:00:30 = 148.4/s Avg: 57 Min: 0 Max: 623 Err: 10 (0.23%) Active: 11 Started: 11 Finished: 0 这个登录接口的数据是怎么来的呢?我是指用什么策略执行的 ,没有很明白,看active分别是1 6 11这个是指不同的压力线程组情况下吧

    作者回复: 就是递增的压力策略。

    2023-05-26归属地:湖南
    1
收起评论
大纲
固定大纲
正式场景前的基准测试
在测试工具中配置参数
参数化配置在 JMeter 中的使用说明
显示
设置
留言
25
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部