jmeter使用心得

在这里插入图片描述

一、jmeter实现定量测试

在接口测试中,我们常常需要控制某次测试进行请求的总次数,在jmeter中,控制请求次数有多种实现方式,小编常用的有3种:

1、设置线程组的循环次数(精确控制)
2、设置的线程组的执行时间(非精确控制)
3、通过设置参数化列表(CSV Data)来限制请求数量(精确控制)

这3种方式都可以控制请求的次数,大家在使用jmeter的过程中想必也会有所应用。但其实这3种方式在效果上却有着很大区别,并不是哪种用着方便我们就随意选择一种来使用,还需要结合实际情况来决定具体使用的控制方式,以实现我们想达到的效果,同时避免对测试结果造成额外的影响。下面小编结合自身经验,来介绍下这几种控制方式的特点和如何进行选择。

首先,这3种方式中,只有设置线程组循环次数和通过设置参数化列表来限制请求数量可以实现对请求次数的精确限制,而设置线程组的执行时间是不能做到这一点的,因为它控制的是时间而不是具体次数。因此,在需要严格控制请求执行次数的测试场景下,设置线程组的执行时间显然就不能采用了。设置执行时间这种限制方式通常应用在对测试次数要求不精确或是不限制次数,只限制请求时间的场景下,比如在一段时间内,对接口进行不同并发数的性能测试。

而对于同样可以精确限制请求次数的两种方式,设置线程组的循环次数看上去是比较简单的一种,最终请求次数=线程数*循环次数,但其实这种方式却存在两个问题,我们必须要格外注意。第一个问题是,请求的总次数只能是线程数和循环次数的公倍数,这样可能造成无法正好达到我们想要的次数。第二个问题比较隐蔽,却可能对测试结果产生较大影响:在这里,我们限制的是每个线程的循环次数,而在实际测试中,每次请求有快有慢,这样有可能造成某个线程达到循环次数的时间远远超前其他线程,在后面一段时间中,线程组实际没有达到预期的并发线程数,从而对测试结果,尤其是性能结果造成影响(如图所示,某次设置了循环次数的测试中,后面一段时间实际使用的线程数Active,比设置的线程数Started要小)。

jmeter使用心得_第1张图片

因此,限制线程组循环次数这种方式不太适用于大量密集请求场景下的性能测试,多用于请求次数固定,且单次请求时间相对固定的场景,比如定长音频的语音识别请求等。

最后一种设置参数化列表来限制请求数量的方式,可以有效避免设置线程组循环次数方式中存在的两个问题,首先,列表中有多少个请求,实际就进行多少次请求,不会受到线程数倍数之类的限制,再有,只要设置了线程组中所有线程共享一份参数列表,那么就不会出现到后面由于某个线程循环次数到了,实际并发数下降的问题,只要列表中还有值,那么就会分配给空闲的线程。这里要注意的是,如果列表中参数值的数量不是线程数的倍数,在最后一轮请求中,还是可能造成并发数下降,但只会影响最后一轮请求,影响程度会大大降低。因此参数化列表的方式基本适用于各种场景的测试。而使用参数化列表的方式最大的问题是比较麻烦,只要请求次数不同,每个分组我们都要准备不同的参数化列表,这对测试效率和测试数据管理会产生较大影响,因此还是要结合实际情况酌情使用。

二、jmeter随机函数的使用

在上期的文章中,小编介绍了jmeter中的时间函数,相比于时间函数的“确定性”,本期要给大家介绍的则是几个常用的“随机性”函数,它们同样在jmeter的使用中起着关键作用。

打开jmeter的函数助手,我们可以看到有如下几个以Random开头的,这些便是jmeter的随机函数:

jmeter使用心得_第2张图片

这几个随机函数基本能满足我们的日常使用。他们各有特点:

__Random
生成随机整数的函数,通过指定一个范围,随机产生整数值。
__RandomDate
生成随机日期的参数,通过指定日期格式和范围来随机生成一个日期。
__RandomString
生成随机字符串的函数,通过给出一系列备选字符和长度,来随机生成一个定长字符串。
__RandomFromMultipleVars
从指定的若干个变量中随机选取一个作为返回值。

其中,Random、RandomDate、RandomString这三个函数比较相近,都是从一个固定的范围中取值,这几个函数的用法相对比较固定,大家应该都比较熟悉。而RandomFromMultipleVars有些区别,是取随机变量。因为是取随机变量,RandomFromMultipleVars这个函数非常有意思,可以完成一些其他随机函数不能完成的特殊操作。下面就来简单说说。

RandomFromMultipleVars函数可以实现从一些完全不连续的值中随机取值、从小数中随机取值、甚至按不同的概率随机取值等等。比如,按不同概率随机取值,这个功能非常实用,可一般实现起来会相对麻烦,而在jmeter中,单独使用这一个函数即可完美实现:

假设有3个变量v1,v2,v3,现在要随机从3个变量中取出一个,并要求取到v1的概率是1/2,v2的概率是1/3,v3的概率是1/6,那么就可以通过以下方式实现:

${__RandomFromMultipleVars(v1|v1|v1|v2|v2|v3|)}
是不是非常方便~
关于随机函数的使用方式还有很多,合理使用随机函数可以有效提高测试覆盖度,使得一些测试场景与实际场景更加接近。

小结

本文主要分享了在使用jmeter进行测试时的一些心得体会。以上内容均来自小编自身在测试中所遇到的问题以及总结的经验,后续还会继续为大家带来这方面的分享,如果大家有不同的看法或更好的建议,欢迎一起讨论~

下面是测试资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
在这里插入图片描述

最后: 可以在公众号:伤心的辣条 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

你可能感兴趣的:(IT,软件测试,程序员,压力测试,程序人生,测试工程师,软件测试,python)