手把手教会使用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如何压测数据库保姆级教程

jmeter压测学习5-XPath提取器

jmeter压测学习3-提取json数据里面的token参数关联

手把手教你jmeter压测--适合入门

jmeter 跨线程传参获取不到值

jmeter 跨线程传参获取不到值