02_Jmeter加强之参数化

  • 首先我们了解一下什么叫做参数化

简单的举例就是:1+1=2,但是现在我把其中的一个“1”替换一个的字符“A”,这个A我们给赋值A=1,那么1+A=2成立,继续延伸一下,A是不是也可以等于3、4、5...,给A替换不同的值,结果也不一样,把其中的一个1替换成A 这个就叫做参数化

参数化是自动化测试脚本的一种常用技巧。简单来说,参数化的一般用法就是"将脚本中的某些“输入”,改为使用参数来代替",在脚本运行时指定参数的取值范围和规则;
这样,脚本在运行时就可以根据需要选取不同的参数值作为输入。这种方式通常被称为数据驱动测试,参数的取值范围被称为数据池!

  • 先创建一个jmeter脚本,创建好线程组,HTTP请求、填写好相关内容,然后来学习一下jmeter中的几个简单的参数化
  • 1. 用户自定义变量
  • 然后“添加”一个变量,然后给变量赋一个值
  • 下面我们引用这个变量,引用变量的格式:{变量名},左边是get方法的字段名,右边就是引用这个变量{userName}
  • 然后执行脚本,在查询结果数看请求的参数是否成功


  • 参数化成功,要输入数据的成功引用变量名指向的数据

  • 2. 函数助手对话框
  • 这是一个随机字符函数 __Random String
    Random string length:要随机的字符长度
    Chars to use for random string generation:要随机的字符


  • 下面把我们生成的函数放到请求中,然后运行一下查看效果,如图:右边显示的是左边函数生成的随机数据,每次随机的都不一样!
  • 3. CSV Data Set Config:导入本地CSV文件中的数据

首先我们在本地E盘中创建一个CSV文件,在CSV文件中输入数据。


  • 输入数据后,保存>然后选择CSV格式,选择替换
  • ① 在jmeter中右键线程组,选择“配置元件→CSV Data Set Config”;
  • ② 配置路径;
  • ③ 配置读取数据的编码格式;
  • ④ 配置变量,CSV文件中每列对应一个变量
:变量之间用英文逗号分隔,结尾处也不能有空格
  • 然后我们去应用这些变量,这里我选择了在http请求中的名称里引用变量,只是为了演示用!可以看到每个变量都取到值了。

  • 如果要都用到,这个时候只要在线程组里设置一下循环次数,就可以把CSV中的数据全部使用到!


  • 这里我只展现了最下面,可以看见一只使用到了G008
  • 4. 正则表达式提取器:
  • 一个接口返回值多个,每个结果都对后续的业务流程或调用的接口有影响,这个时候jmeter就需要一个(if控制器)来进行对返回值做判断.
  1. 首先需要在提取响应值的case下添加一个“后置处理器>正则表达式提取器”
  2. 对需要判断的结果做提取,格式xxx(.*?)xx提取出需要的字段
  3. 在if控制器中引用“正则表达式提取器”中声明的变量,并且==预期的结果
  4. 如果响应结果和预期结果相等,则执行“if控制器”下的case,不相等则跳过“if控制器”下的case,继续往下执行

首先创建一个if控制器,然后在要判断返回结果的接口上,添加一个后置处理器>正则表达式提取器



在正则表达式提取器中,上面的选择可以不用做修改:
① 直接设置一个提取值存放的“变量” 命名result
② 对接口的响应报文中定位,并提取出需要的数据(.*?)这里先用一个统一的正则表达式,后续单独写一篇“正则表达式”的使用
③ 模块和匹配数字可以先不管,因为我们只提取一串字符
④ 试运行一下,看有没有提取成功

  • 如下图:正则提取"respDesc":"(.*?)","respCode":"0000"}分成三个部分,respDesc":"()"}两边起到定位左右,左边要有respDesc":",右边是","respCode":"0000"},中间就是我们提取的内容!这里创建了一个空的http请求,用名称验证提取的变量,验证通过!
  • *注下图的响应报文做了修改,正则表达式改成了"respDesc":"(.*?)","respCode":"0000"}提取的字符串不变,还是“成功”

  • if控制器中条件的意思:正则表达式提取的实际结果==预期的结果
    预期的结果肯定是提前知道的。
    if判断如果成功,就执行“if控制器”下的子case,然后去执行下面的case;
    if判断如果不成功,则不执行“if控制器”下的子case,直接去执行下面的case;

  • 下图可以看到,我设置的if条件是,"${result}"=="成功",但是实际的值是另外的,所以if控制器下的case没有执行,直接执行了登录接口

  • 下图可以看到,我设置的if条件是,"${result}"=="成功",实际结果就是"成功",所以先执行if控制器下的case然后去执行了登录接口

  • 5. JDBC Request SQL查询数据库,返回测试数据

上面介绍了一个CSV的链接方法,但是如果我需要参数化的数据都在数据库中怎么办???难道我复制出来然后放到CSV文件中,然后去读取、使用?这里可以使用到JDBC Request,把要测试的数据查询出来!
① 我们需要下载一个jdbc.jar包,不同的数据库用的jar不同,需要自行百度下载
② 把jdbc存放到apache-jmeter-3.0\lib文件下,然后右键测试计划,找到这个jar包!


③ 添加一个 JDBC Connection Configuration,然后配置:

一下是:sqlserver 配置连数据库

  1. Variable Name:随便起个名称,后面的JDBC Request要用到,才能读取JDBC Connection Configuration里的配置
  2. Database URL:jdbc:sqlserver://IP:默认端口;databaseName=实例名
  3. JDBC Driver class: com.microsoft.sqlserver.jdbc.SQLServerDriver写死的,每个数据库有不同的jdbc driver
  4. Username: 数据库账号
  5. Password : 数据库密码

  • 引用JDBC Connection Configuration里的配置的Variable Name配置的Name,然后在输入框里输入要查询出数据的SQL
  • 给查询的字段设置变量名称
  • 引用变量
    因为我们查询出的数据有很多,是以数组的方式存放的,jmeter并不能直接引用,需要去指定一行一行的去拿
  • ① 单行提取数据: 这里我们可以用${FC_0}、${FC_1}......${FC_N}去拿单行的数据
  • ② case循环,全部使用: 这里我们只需要把${FC_N}的N设置一个变量数组,且不会重复就行,这里我使用了“计数器”

启动的时候是0,每次增加1,并设置了一个变量ID


  • 下面就是把两个变量拼接成一个变量就OK了! 格式:${_V(xx_${xx})} 我们的就是:{__V(FC_{ID})},后面就是把这个拼接变量放到你的case中OK啦,而且每次取的数据都不重复,具体的演示结果就不展现了!

6. 后置处理器_JSON Extractor (提取json响应结果)


如果要提取王康健:那么就是:$.countactName

{
  "matchId":200,
  "subMatchId":${subMatchId},
  "contactName":"王康健",
  "contactPhone":"${randomPhoneNum}",
  "country":"上海市",
  "school":"新东方烹饪学校",
  "extraInfo":{
      "email":"wangkangjian@126.com",
      "schoolEn":"xxxxxxxxxx",
      "detailAddress":"闵行区马桥镇",
      "postCode":"111111"
  },
  "subMatchName":"${subMatchName}"
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358

推荐阅读更多精彩内容

  • 主要文体来自 CDNS:https://www.cnblogs.com/ceshisanren/p/5639895...
    Amano阅读 11,001评论 3 27
  • 1 引言 这估计是目前国内能找到的相对比较全面的JMeter自动化测试介绍了吧。希望能给予您一点帮助。 1.1 J...
    __yanyan阅读 15,211评论 1 45
  • 生活中总有这样的人。 你出门旅游好心帮他代购,跑了无数地方花了大笔交通费,他百度算好汇率还要求抹零。 让你帮忙带饭...
    小花儿say晚安阅读 459评论 0 0
  • 手机安装Keep是一年前的事,准确地说是2016年2月26日。 自上班以来,发现身边很多朋友同事都是健身迷,上班再...
    遇见小沈儿阅读 703评论 9 6
  • 规则1.找一个人说一个成语 2.然后下一个队员以该成语的最后一个字往下接 3.接到说不出成语为止
    喻家隐士阅读 321评论 0 0