手把手教会使用Jmeter进行压测,涉及参数提取参数关联CSV参数化
Posted rainshi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手教会使用Jmeter进行压测,涉及参数提取参数关联CSV参数化相关的知识,希望对你有一定的参考价值。
手把手简单介绍一下Jmeter的使用方法,以某平台APP登录接口为例:
1)单接口压测。
2)依赖其它接口参数。以获取用户信息为例。
- CSV参数化。
- 参数提取。 Json提取器与正式表达式提取器。
方便初学者使用,Jmeter可以友好的选择简体中文:
一、单接口压测
步骤:
- 添加 ->线程(用户)->线程组
- 在线程组上 添加->取样器->HTTP请求
- 在HTTP请求上 添加->配置元件->察看结果树
Jmeter结果页:
操作演示:
任何接口信息都预先使用抓包工具查看接口信息。这里使用的是Fiddler:
根据抓包信息,填入HTTP请求组件:这里服务器用是的域名,某些局域网测试环境使用的是IP地址加端口,端口号不要忘记填写。内容编码utf-8
HTTP信息头管理器配置 Content-Type:application/json
运行一下,在察看结果树中,可以看到HTTP请求成功,响应数据为服务器的返回数据,后面用户信息查询需要依赖这些结果数据,并且需要通过Json提取器或正则表达式提取器进行提取后才能使用。
添加响应断言,响应数据内容可以作为这个接口的断言,而且可以自定义失败消息,设置如下:
偿试将登录的用户名11165234970,改为1116523497:
如果要对此接口进行单用户压测,需要设置线程组属性,并增加聚合报告:
注释:
线程组属性与聚合报告:
线程组属性:
名称:就如字面意思,起个有意义的名字就行 线程数:这里选择1,表示用户数,模拟多少用户请求 Ramp-Up Period:单位是秒,默认时间是1秒。它指定了启动所有线程所花费的时间,比如,当前的设定表示“在1秒内启动1个线程,每个线程的间隔时间为1秒”。如果你需要Jmeter立即启动所有线程,将此设定为0即可 循环次数:表示每个线程执行多少次请求。 调度器:选中之后可以配置启动时间,立即或者预定的时间
聚合报告中,各项指标的说明: 1.Label:每个Jmeter的元素(例如HTTP请求)都有一个Name属性,这里显示的就是Name属性值 2.样本:表示你这次测试中一共发出了多少请求,如果模拟10个用户,每个用户迭代10次,那么这是显示100 3.平均值Average:平均响应时间 4.中位数Median:也就是50%用户的响应时间 5.百分位90%Line:90%用户的响应时间 6.最小值Min:最小响应时间 7.最大值Max:最大响应时间
8.异常Error%:本次测试中出现错误的请求数量/请求的总数 9.吞吐量Throughput:吞吐量,表示每秒完成的请求数,(number of requests) / (total time) 10.KB/sec:每秒从服务器端接收、发送的数据量
二、参数依赖
为解决如下两个问题,引入CSV参数化与参数提取器:
- 如果只使用一个用户登录,缓存让登录接口的测试数据不够精准。使用CSV批量处理登录用户。
- 登录后查看用户信息时,需要依赖登录接口返回的数据。使用提取器提取相关参数。第二个接口用到登录后返回的 "accesstoken"和"customerguid"
1)CSV参数化操作如下:
参数文件:
测试账号,密码都是123456 (这是首行,配置CSV时选择忽略) 11123081796 11165234970 11140921586 11102047359 11170609243 11192610487 11169120403 11181027064 11159706481 11105198230 ...
说明, 如果有多个参数,文件可如下设置,CSV变量名称填写 usr,passwd,code 英文逗号
11123081796,123456,0512 11140921586,123456,0520
因为文件第一行是说明,因此忽略首行=Ture,
设置线程属性, 线程数10。 在HTTP请求消息体中将具体的Phone值改为 “$(usr)”,运行测试,查看结果树:
响应数据中的Phone与上传文件中的帐号依次顺序显示。
2)参数提取
添加Json提取器,正则表达式提取器:
Json提取器, 可以提取响应消息为Json格式的value值,针对此文的响应消息如下:
{
"Error": 0,
"Message": "",
"Data": {
"CustomerGuid": "f0214d55-91d5-4b42-8c24-93521ed2636a",
"Phone": "11140921586",
"AccessToken": "f1fd35a5e12a46e5"
},
"Exception": null
}
通过Json提取器可以提取Error、Message、Data、Exception的值。但不能提取值中值,比如不能提取CustomerGuid、Phone、AccessToken的值,想要提取则要用到正值表达式提取器。
正式表达式提取器页面说明:
1.主体:接口的返回body.
2.引用名称:其他地方引用提取值的变量名称,如填写的是:usr,具体的引用方式是${usr}
3.正则表达式:提取内容的正则表达式【注意:()表示提取,对于你要提取的内容需要用小括号括起来】,如, "AccessToken":"(.*?)" 此表达式可以匹配"AccessToken": "f1fd35a5e12a46e5",并将值赋值给变量atoken。其它的类似,抄抄。
4.模板:用$$引用起来,如果在正则表达式中有多个正则提取(多个括号),则可以是$2$,$3$等等,表示解析到的第几个值给usr(正常情况,填写$1$)
5.匹配数字:0代表随机,-1代表所有,其余正整数代表将在已提取的内容中,第几个匹配的内容。【注意:在使用正则表达式提取器的过程中,如果匹配数字选择的是-1,还可以通过${set_1}的方式来取第1个匹配的内容,${set_2}来取第2个匹配的内容。】
6.缺省值:正则匹配失败时,取的值.
下一个接口需要用到登录后的两个参数,设置两个正式表达试提取器。
两个HTTP请求用的HTTP信息头管理器一样的,因此将第一个HTTP请求信息头管理器上移,让两个HTTP请求共享。
第二个HTTP请求用户信息地址: https://xxx.xxx.com/sz/Profile/ProfileInfoRequest?accesstoken=839b5280143748d8&customerguid=41e3bff2-7d25-4805-a7b3-ec2816f91f70&sourcetype=9
抓包信息:get请求,用到登录后返回的 "accesstoken"和"customerguid"。 如下填写:
运行测试,第二个Http请求会自动拼接参数为一个完整的URL:
以上是关于手把手教会使用Jmeter进行压测,涉及参数提取参数关联CSV参数化的主要内容,如果未能解决你的问题,请参考以下文章
一文1500字手把手教你Jmeter如何压测数据库保姆级教程