jmeter 参数化

jmeter参数化

背景

进行接口,性能测试进行参数化是必然要考虑的场景,自从上次使用了jmeter进行接口测试后,就已经开始思考了jmerer如何进行参数化,来方便测试,通过查阅相关资料,将jmeter参数化分为两个部分进行讲解。

简单参数化

怎么定义简单呢,就是直接在jmeter中设置就可以了,不需要调用其他的东西(数据库、CSV)文件。简单的参数化设置主要有以下:

  • 用户定义变量
  • 随机变量
  • 正则表达式提取器
  • 函数助手

用户定义变量

添加用户定义变量主要有两个地方:点击测试计划-用户定义变量。进入某一线程租,右击-添加配置元件-用户定义变量。下面对定义变量的作用域进行实验:

  1. 在测试计划上添加用户变量:用户名与密码,在第一个线程组也定义用户变量,在第一个线程组的某个请求中定义变量。为了做到区分,对每一组变量定义时,key与value均不一样,具体如下。


    在不同位置用户自定义变量.png

通过运行测试计划,发现所有的请求均断言成功,说明只要定义的变量是唯一值,那这个变量就是全局的。从实际情况出发,如果真的是全局的,可以直接定义再测试计划中(域名),如果是局部使用的可以直接定义再某个线程组,因为定义在测试计划中,如果一旦停掉该线程组,则里面用户自定义的变量将不能被引用。当时还想到一个问题:如果是定义的变量重名,引用的规则是什么样的,将线程组2中的用户变量定义与线程组1中请求定义的一致(想当然的以为走最近原则还是会调用同一个线程组的变量),实际上调用的是第二个线程组的变量。其实就一个原则:不要定义两个变量名一致的变量。

随机变量

随机变量有两种方式:用户直接定义,其实就是用户定义变量,只是值不固定,还有就是借用函数助手来生成随机变量。

用户定义随机变量

用户定义随机变量,参考用户定义变量,可以在测试计划、线程组、sample中定义。关于作用域与用户定义变量一致。在线程组中自定义一个变量如下:


用户定义的随机变量.png

为了查看获取的电话号码是否为随机数,将线程的循环次数定为6,校验每次发出请求的参数是否为随机产生的。


电话号码随机获取.png

经查看我们的随机每次请求中携带的参数是不一样的,所以简单的随机变量这样设置就可以了。但是我们的随机数的设置还有一个两个设置需要说明下:
  • Seed for Random function 随机数产生器的种子,默认为当前时间(以毫秒为单位)
    
  • Per Thread(User) 如果为False,则随机数产生器在线程组的所欲线程共享,为True,则每个线程都有自己的随机数产生器
通过函数助手生成随机变量

函数助手的中对应的函数非常大,如果有需要可以查阅官方文档查看官方文档说明,这里只是要用随机函数来生成随机变量,所以对随机函数进行说明。

  1. 添加随机函数:点击选项函数助手下拉框中选择__Random函数

  2. 添加对应的的参数,最大值,最小值,变量名


    随机函数助手配置.png
  3. 点击生成会产生对应的函数字符串,请求中直接进行引用。见下图


    引用函数助手生成的变量.png
  4. 运行一下请求,查看结果,确实是正常获取了随机变量。见下图


    运行结果.png

正则表达式提取器

正则表达式提取器主要用在jmeter关联中。关联是请求与请求之间拥有数据关联。可以是同一个线程组关联,也可以是跨线程组关联。因为在使用过程中发现正则表达式会不正确,这里提供一个正则表达式在线校验地址正则表达语法校验

线程组内正则表达是提取使用

通过获取优惠券列表后,直接从返回结果进行优惠券详情查询。
整体的构造如图,有些不用的我直接禁用掉。


线程组内正则表达式提取.png
  • 查询优惠券正常发出请求,对返回结果进行提取


    正常获取提取变量优惠券ID.png
正在表达式提取useid.png

备注:对于正则表达式的配置说明,网上相应的说明比较多,可自行查阅相关资料,这里不进行阐述。

  • 进行查看优惠券请求,其中接口相关参数参考优惠券列表接口返回结果,如下


    查询优惠券引用正则表达式提取变量.png
  • 看看是否正确获取了相关参数


    正常获取提取变量.png

以上就是同一个线程组内的正则提取。

跨线程正则提取

依然是用优惠券的例子,只是这次查询优惠券的接口与获取优惠券列表不在一个线程组内。主要思路是:将在线程中的变量,设置为属性,这样就可以为全局使用。但是前提是第一个线程组要先执行,否则变量获取不到。所以在测试计划中勾选独立运行每个线程组。

  1. 测试在获取到优惠券的请求中添加BeanShell PostProcessor ,将通过正则提取获得的变量设置为JmeterProperties。具体操作如下


    变量设置为jmeter属性.png
  2. 可以通过在工作台中添加非测试元件——Property Display中查看是否设置JmeterProperties 成功


    校验是否设置jmeter属性成功.png
  3. 新建一个线程组并添加同样的查询用户券,直接引用jmeter属性,具体如下


    传入提取的jmeter变量.png

4.查看请求结果可以看到变量引用正常


jmeter属性获取正常.png

这样就实现了跨线程的变量引用。

函数助手

函数助手提供了很丰富的函数功能,在获取随机变量已经使用了随机变量的函数,在跨线程组的时候使用了${__P(coupon,null)},其实可以用函数助手,找到函数助手中的-p函数就行。因为函数助手中的函数偏多,这里不做详述,可以到官网查看函数助手。查看之后,自行判断是否可以使用。

复杂一点参数化

定义复杂,其实就是需要用到外部资源,比如外部文件,比如数据库。

  • 读取参数文件
  • 读取数据库

读取文件

jmeter即可以读取多种文件,这里只CSV文件进行读取说明,个人觉得这种用的比较多。读取CSV文件有两种方式,一种通过配置CSV Data Set Config 进行读取,还有一种是通过函数助手进行读取。

CSV Data Set Config方式

这里我们模拟的是不同帐号登录场景,用户名,密码均是读取CSV。

  • 准备测试数据
    建立一份csv数据,用户名为第一列,密码为第二列。如图
csv文件.png
  • 添加CSV Data Set Config
    测试计划-右击添加配置元件-选择CSV Data Set Config进行配置,配置项的说明可以自行在网上查阅。


    CSV set config配置.png

线程组的循环测试配置的8,config配置Recycle on EOF 为true,这样可以循环读取,否则读到最后一行就停止了。

  • 请求配置获取数据,变量名取的是CSV Data Set Config中的variabld Names


    请求配置.png
  • 运行,查看是否请求中读取了csv中的数据。


    正确读取csv .png
函数助手读取
  • 通过函数助手中的csvRead函数读取。首页也是准备数据,这里就用上面准备的这份数据。选项函数助手_csvRead函数,按如下配置

    csvread配置.png

  • 进行请求配置,见下图


    请求配置csvread.png
  • 查看请求参数,是否正确获取了文件内容


    csvread请求校验.png

以上就是读取csv文件的方法.必须说明的是如果线程组中配置的是线程数大于1则从第一行读取,如果大于配置文件的行数,则循环读取数据。如果线程数配置为1则只会读取第一行数据。

读数据库

csv读取是自己准备一些测试数据,很多情况下我们需要校验落库或是直接从数据库中读取数据来作为请求参数。设想场景是查询数据库,然后循环读取查询结果作为下一个请求的参数。下面就这个场景进行实践。

  • 在测试计划中添加数据库配置信息。测试计划_添加配置元件_JDBC Connection Configuration


    数据库配置.png

各个配置项信息在网上又相关资料,这里配置参数说明

  • 添加数据库请求
数据库请求配置.png

这里对返回的数据设置了两个变量article_id,id 两个变量。如果需要时引用,${article_id_1}是artilce_id 第一行,${article_id_1}取第二行,总数可以用${article_id_#}来获取。id同样也是如此。

  • 因为是需要获取循环读取,所以我们可以添加一个循环控制器
循环控制.png

循环次数直接用${article_id_#}。

  • 因为是逐行读取,所以可以添加个计数器来实现
计数器.png
  • article_id 需要拼接计数器来生成一个变量,所以需要用的函数助手中的--V函数。配置如下:


    --v函数生成变量.png
  • 所有准备工作都做好了,现在就准备添加一个请求来读取数据,配置如下


    引用数据库查询结果作为参数.png
  • 校验请求是否正常获取参数


    校验结果.png
  • 备注

配置好后进行链接发出请求,提示cannot load JDBC Driver class "com.mysal.jdbc.Driver",解决方法

jmeter的参数化就这样告一段了,下次考虑进行简单压测脚本编写。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容

  • 用Jmeter测试时包含两种情况的参数:一种是在url中,一种是请求中需要发送的参数。 URL中的参数,如:htt...
    小矮人Ethan阅读 1,243评论 0 4
  • 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个...
    菜鸟平阅读 226评论 0 0
  • 文/amy 前面 【JMeter】参数化方法(一)已简单介绍关于参数化的几种常用方法, 关于如下配置以上几种参数方...
    太阳当空照我要上学校阅读 5,502评论 0 3
  • 注:以下图片素材皆来自于网络。 由于最近工作量变大,为了保障原创文稿的质量以及避免英年早逝的悲剧,老王决定从今日起...
    娱乐圈老王阅读 138评论 0 0
  • 清晨的云雾像滚动的婴孩,包裹着我。我就站在那里,定定的看着她离开。 很长时间以后我仍会想起那双豆大的眼睛,那...
    空哈玛尼卡阅读 460评论 0 0