JMeter的七种参数化

一、CSV Data Set Config

以中信银行的基金搜索接口为例,在线程组鼠标右键选择”添加”->”配置元件”->”CSVDataSetConfig”


  1. 文件名:可以输入参数文件的绝对路径或相对路径,参数文件可以保存在txt或csv文件里。

  2. 文件编码:大部分情况下都是UTF-8,如果出现中文乱码可以尝试下GBK。

  3. 变量名:接口请求时,引用这个参数化的变量名称,多个变量用英文逗号隔开。

  4. 忽略首行:若参数文件的数据量较小,可以设置成FALSE。若较多建议设置成TRUE(实际上就是表头).

  5. 分隔符:参数文件里多个参数之间用分隔符隔开,默认情况下是英文逗号,但是如果你的参数带逗号比如第一个参数是”hello,wego”,第二个参数是”你好,我们走”,此时若使用默认分隔符,系统会认为有4个参数,第一个是hello第二个是wego,第三个是你好,第四个是我们走;这时要修改CSVDataSetConfig里的分隔符,观察发现两个参数中都不含”==”,所以我们可以把分隔符改成==,分隔符如何设置全凭个人喜好,只要参数中没有这个符号即可。

后面4个不常用,使用默认配置就行了。

输入CSV Set Config的变量名,并用${}把变量名包在大括号里,第一次请求,key会读取“股票”,type会读取“1”,5次全部读取完后,会循环读取,直到所有进程结束。

可以看到第三次请求调用的就是第三组的参数A和3。

二、用户定义变量

这次我们加一个接口,产品搜索接口,产品搜索界面如下:


用户定义变量有2个地方可以设置,第一个是测试计划,第二个是配置元件。首先看一下测试计划,点击测试计划节点,点击添加,输入变量名称和变量值,接口应用变量的方式和CSV一样,${key}

图片.png

第二个配置元件,线程组鼠标右键”添加”->”配置元件”->”用户定义变量”

两者区别在于测试计划中设置的变量,是针对所有线程,所有请求的。而配置元件添加的用户定义变量,是根据他的上级节点决定的。若上级节点是线程,则只对这个线程起作用,若上级节点是请求,则只对这个请求起作用,若上级节点是测试计划,则对所有线程的所有请求都起作用。比如图中的配置元件,就只对“Thread Group”这个线程组起作用。

三、计数器

线程组鼠标右键,”添加”->”配置元件”->”计数器”

Starting value: 开始值

Maximum value: 最大值

Increment: 递增值,每次增长值,在基金搜索接口中有一个参数是fundType,代表基金类型,取值范围是1到5,所以我们这里设置开始值是1,最大值是5,每次递增1。

Number format: 数字格式,若不填写,则会从初始值到最大值之间以自然数的方式递增,比如1,2,3,4,5。上面的截图中,我输入了00,所以系统会为我补齐到2位,在请求时会是00,01,02,03,04,05。

Exported Variable Name: 引用变量名称,这里输入count,在接口请求时,我们输入${count}。

Track counter independently for each user: 与每用户独立的跟踪计数器。我们把线程组设置线程数2,循环数2。若这里勾选用户独立计数,就是线程1循环2次,请求发送时,fundType字段分别请求的是1和2。线程2循环2次,请求发送时,fundType字段分别请求的是1和2。若这里不勾选用户独立计数,则4次请求,fundType字段分别请求的是1、2、3、4。

Reset counter on each thread Group Iteration: 在每个线程组迭代上重置计数器。若勾选则4次请求的fundType字段全都是1,这两个都勾选的时候,一般都是线程组内有循环,每次循环的时候会递增。否则这样设置就没有意义了。

四、请求默认值

线程组鼠标右键,”添加”->”配置元件”->”HTTP默认请求”

可以看到有很多种默认请求,中信银行是一个web系统,所以这里测试使用的是http或https请求,这里我就说一下http默认请求值的使用方法,其他默认请求的使用思路基本相同。不做赘述。

实际测试中,会有多个环境,比如测试环境,开发环境,生产环境A,生产环境B等等。为了实现环境的快速切换,我们不能每次切换环境,都去把所有的请求地址修改一遍。正确的做法是把所有请求的ip、端口、协议、编码都清空,添加一个http默认请求值,在默认请求值里面输入ip、端口、协议、编码。当有多个环境时,可以配置多个http默认请求值。保留一个为启用状态,其余全部禁用。

若多个请求中,有相同的参数,比如截图中“搜索有关的请求”线程组下的所有请求,都有两个参数pageSize和currentPage,这样的参数也可以在请求中直接删除,添加到http默认请求值。

五、Beanshell采样器或JSR223采样器

线程组鼠标右键,”添加”->”取样器”->”BeanShell取样器”,在采样器内输入vars.put("responseFormat","JSON");如下图:

括号中第一个引号内的字符串是变量名,第二个引号内的字符串是变量值,在接口发送请求时,使用${responseFormat},就可以实现参数化。

JSR223采样器功能类似,只是提供了更多的脚本语言可以选择,如果选择beanshell那么就等于是beanshell采样器了,jmeter官方的使用说明中推荐使用groovy语言,理由是性能较好,但是我实际测试过,如果只是执行赋值语句,只是把beanshell采样器当做定义参数化来使用,beanshell采样器性能还是略高于JSR223+groovy的。

六、后置处理器json和正则表达式

有时我们需要的参数是动态的,这时候就需要把第一个请求的响应结果提取出来,作为第二个请求的参数发送出去,后置处理器可以解决这个问题,常用的有正则表达式提取器,若接口返回的数据是json字符串,也可以用json提取器。以中信银行基金为例,先搜索,然后查看第一个基金的详情页。

鼠标右键第一个请求,”添加”->”后置处理器”->”正则表达式提取器”。

引用名称:就是变量名。例如输入number

正则表达式:使用正则表达式在响应结果中提取数据,例如截图中想要提取的数据是"prodNo":"000043"中的000043,那么正则表达式可以写成"prodNo":"(.*?)",这样就会把004698赋值给number,后面的请求使用${number}就可以获取到000043了。

模板:格式为1,2...以此类推,意思是若正则表达式匹配到多个值,则返回第几个值,1代表第一个。缺省值:若正则表达式没有匹配到数据,则返回缺省值中的数据。

第二种是json提取器,鼠标右键第一个请求,”添加”->”后置处理器”->”json提取器”。

Namesofcreatedvariables:是变量名,多个用分号隔开。

Jsonpathexpressions:json路径。根据请求的响应结果,输入json路径,例如基金搜索接口,使用$.content.resultList[*].prodNo可以匹配到第一页10条数据的基金代码

MathNo.:若1个路径提取了多个参数,匹配第x个参数。上面匹配到了10条数据,我们取第一条就输入1。

Defaultvalues:缺省值。

七、函数

举3个比较典型的例子,其他函数可在官网的使用说明中,自己查看学习。
第一个,线程内传参,以随机数为例:

点击菜单栏”工具”->”函数助手”,选择”Random”,这是一个随机函数,输入最小值1,最大值5,变量名R,点击生成,“{__Random(1,5,R)}”。在整个线程里,第一次使用需要输入完整的字符串{__Random(1,5,R)},之后使用则可以输入${R}。作用是随机生成1到5之间的整数。

第二个,线程内传参,函数助手里,选择setProperty(全局变量),变量名输入number,值输入0408,生成${__setProperty(number,0408,)},这样可以在不同线程之间引用这个变量了,应用方式为${__P(number)},也可以把0408改成动态获取,例如结合上面的json提取器提取到的number,想让number跨线程传参就可以写成${__setProperty(n,${number},)},就是把0408这个静态的值写成动态的${number},把第一个变量名改成n,保证2个变量不重名,其他线程应用时,写成${__P(n)}。

第三个,变量名嵌套变量名,V函数。

例如系统中有三个变量分别是number_1,number_2,number_3,设置一个计数器count,此时若想应用这3个变量,直接写{number_{count}},系统是无法识别的。要使用变量名嵌套函数,V函数。正确写法是${_V(number${count})}。

八、总结第1-4种是第一类配置元件,第5种是第二类采样器,第6种是第三类前置处理器与后置处理器,第7种是第四类函数。Jmeter参数化4类中常用的7种方法,各有各的好处。

原文:http://download.51testing.com/wenzhang/51Testing_wenzhang59_1.pdf

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