jmeter 脚本增强(参数化)

jmeter 之中通常场景需求需要很多不同的数据作为请求的一部分参数,所以需要将这些不同的数据做为参数使用变量传递给每次请求

脚本的参数化主要有以下几种方式

1. 使用配置元件CSV Data Set Config
配置解析:
  • Filename: 读取的文件,文件里有自己准备为可变参数的赋值数据,多参数可使用多列,文件后缀也不限制,可以写相对路径也可以写绝对路径。
  • File encoding: 读取文件时的编码类型,默认是UTF-8,所以如果你的文件不是这个编码方式,那就需要与自己的文件编码方式一致
  • Variable Names(comma-delimited):参数变量名称,参数文件里有几列这里就有几个变量,并且顺序与参数文件里的每一列相对应,是以逗号分隔(半角),变量名是自定义的,但是定义一个比较有意义的变量名会使脚本具有更好的可读性。
  • Delimiter(use '\t' for tab): 文件中每一列的分隔符,默认是逗号 (半角),但是注意这里是配置参数文件里的分隔符,而不是定义变量名的分隔符,变量名的分隔符只能是逗号。
  • Allow quoted data?:  此字段表示是否允许参数文件中的参数值已经被引用,比如参数文件中的值在双引号里,那么这里需要设置True才能正常读取参数文件中的值,这里默认是False,比如下图的参数文件中的第一列均有双引号,那么这里就需要设置为True才能正常读取

  • Recyle on EOF:设置参数文件读到末尾的时候是否从头再读,默认是True
  • Stop thread on EOF:线程读取文件到末尾是是否停止,默认False,如果这里设为True, Recyle on EOF 这个设置也是True时,则脚本运行线程数会以线程数和参数文件的行数中数值最小的为准
  • Sharing mode:这个配置元件共享给哪些线程,All threads测试计划中所有线程,假如说有3个线程,则每个线程读取分别对应参数文件里的行;Current thread group:当前线程组,假设有线程组A、线程组BA组内有线程A1到线程A3,线程组B内有线程B1到线程B3。取值情况是:线程A1取到了第1行,线程A2取第2行,现在B1取第1行,线程B2取第2行等等;Current thread:当前线程,假设测试计划内有线程1到线程3,则每个线程都取参数文件的第一行。
  • 注:对于 Allow quoted data 和 Sharing mode中的edit选项目前还没搞明白
配置完成后就可以在脚本中使用定义好的变量,使用方法是${变量名},如下:
在请求中使用
在响应断言中使用
2. 使用jmeter自带函数获取参数值
jmeter中可以获取参数值的有 __Random( , , ) __threadNum __CSVRead( , ) __StringFromFile( , , , )四个函数
  • __Random(,,):使用函数助手对话框,打开此函数设置如图,最后一个字段是选填的,定义随机取到的值存储的变量名,比如请求的时候使用了随机函数,然后响应断言的时候需要用到此随机值,即可使用自定义的变量,${Rvalue},将生成的字符串拷贝到用到的地方,可以看到此函数的使用形式为$__Random(param1,param2,param3),前两参数是随机数的开始和结束值,最后一个参数是此函数随机生成的值所保存的变量,熟悉了构成就可以直接手动去写了,不用再使用函数助手对话框

请求中使用
响应断言中使用随机函数生成的值

  • __threadNum:这个函数使用时没有任何参数,只是生成当前线程的线程编号,使用方法${__threadNum},如响应断言中加入这个函数,在断言结果中查看到如图

  • __CSVRead(,):通过列读取文件,打开函数助手对话框,第一行是要读取的参数文件路径,注意这里必须是绝对路径,第二行是要读取的文件列,从第0列开始,即视觉可见的文件的第一列,0即文件中第一列,所以要读取文件中的第二列是需要设置为1
请求中使用此函数
  • __StringFromFile( , , , ):从文件读取内容,打开函数助手对话框如图,有四个参数,第一个是参数文件路径,注意也是绝对路径;第二个参数是此函数读取的值所保存的变量,可以用在后续脚本里比如${Svalue};第三个和第四个参数分别是文件开始和结束的序列号(用在从多个文件读取参数值的时候),只有第一个参数是必填,其他根据情况选填。
                读取多个文件的用法为${__StringFromFile(D:\performancetest\jmeter\script\user#.dat,Svalue,1,3)} ,其中文件路径参数中的#号代表后面两个参数从1到3的取值,所以读取的文件就是user1.dat、user2.dat、user3.dat,读取规则为按照次序先读完第一个文件的所有行,如果已经满足线程需要,则之后的文件就不会读取,如果第一个文件的行数不能满足线程需要,则读取第二个文件,以此类推;如果所有文件的行数都不能满足线程需要,那么脚本会继续运行,但是很多线程都没有取到值,不会循环读取。
                多次循环读取一个文件时 ${__StringFromFile(D:\performancetest\jmeter\script\user.dat,Svalue,,)} ,后面两个参数都为空就可以。
                指定循环次数读取一个文件时, ${__StringFromFile(D:\performancetest\jmeter\script\user.dat,Svalue,,2)},通过最后一个参数进行设置就行,设置为2就是参数文件所有行被读取完毕后 依然没能满足线程需要会继续从文件第一行再次循环读取。
                此函数没有提供按列读取的参数,所以使用这个函数的时候的参数文件只能读取一列
在请求中使用:
在响应断言中使用函数读取的值所保存的变量Svalue:
3. 从数据库中取值作为参数化
在测试计划中加入数据库配置及请求,在请求下添加后置处理器-->正则表达式提取器,jdbc请求
正则表达式提取器的设置:引用名称即为后续需要用到变量名,正则表达式必须包含在()里,我这里用户都是字母和数字的组合,所以使用([0-9a-z]+),可以根据自己的实际情况进行,缺省值是如果没有匹配到任何内容就使用缺省值作为username的值
登陆请求中使用在数据库中查询到的用户名进行登陆
响应断言中使用数据库中查询到的用户名作为登陆成功后的验证点
0
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值