用Jmeter测试时包含两种情况的参数,一种是在url中,一种是请求中需要发送的参数。
URL中的参数,如:,其中“fenggf/p/8601716”为url参数
请求中的参数,如:key-value类型的请求,key 为参数名,value 为参数值。例如: 中 categoryid 为参数,对应值为:1177604
Jmeter脚本参数化时,使用参数的地方书写格式为:${参数名}
下面利用实例来介绍Jmeter参数化的三种方法:
1、用户定义的变量
这种方法常用来解决线程组中多个请求共用相同的数据。比如进行接口测试时,一个任务有100个接口,用的是相同的服务器名称或IP;一个个写Jmeter脚本,当切换环境时,如果每个http请求里面去修改,会是一件很繁琐,所以可以利用 用户定义的变量,把 服务器或IP 作为变量提前定义好
(1)添加用户定义的变量(右击线程组-添加-配置元件-用户定义的变量)
(2)添加变量内容,变量 名称 设为:host, 值 为:api.xxxx.cn(此处定义的是服务器名称或IP,则根据自己的测试项目的服务器名称或IP填写对应的值)
(3)脚本中需要用到此变量(服务器名称或IP)的所有地方都可以引用这个变量名了,引用变量的格式为:${变量名}(此处则应为:${host}),以获取学生信息为例,Jmeter脚本如下:
2、函数生成器
- 用函数生成随机数:(__Random)
在Jmeter中点击 选项-函数助手对话框:
在弹出的对话框中选__Random,填写随机数的范围,点击生成按钮,就看到需要的字符串了,然后复制出来
在请求中使用生成的随机数,把复制的字符串粘贴到请求的参数里,如: "name":"fengfeng${__Random(1,100,)}",请求后,name的值则会在fengfeng1-fengfeng100之间随机生成
运行脚本后,可查看到该请求发送的数据中, "name":"fengfeng56"
- 用函数生成当前时间:(__time)
在Jmeter中点击 选项-函数助手对话框:
在弹出的对话框中选__time,可以默认时间戳格式也可以自定义时间格式,就看到需要的字符串了,然后复制出来
默认时间戳的格式:
自定义年月日格式:
在请求中使用生成的随机数,把复制的字符串粘贴到请求的参数里,如:"grade":"三年级${__time(yyMMddHHmmss,)}",,请求后,grade的值则会根据当前时间生成:三年级xxxxx
运行脚本后,可查看到该请求发送的数据中
3、从文件中读取(CSV Data Set Config)
(1) 以注册接口(user_reg)为例,在本地创建一个文件,添加6个username 和passwd的值,并对脚本设置6个线程或者循环6次,来对这6个用户进行注册
(2)添加CSV Data Set Config(右击“线程组” - “添加” - “配置元件” - "CSV Data Set Config"),可对该线程组所有接口适用,比如 登录接口 需要用到username 和passwd,也可以引用,假如这些数据仅应用于“注册接口”接口的话,可以直接在“注册接口”接口下面创建"CSV Data Set Config",在线程组下建,则可适用于该线程组的所有接口
(3)根据下图添加对应的,"Filename"选择填写本地准备的文件,如:D:\username.txt, "Variable Names" 输入"username" 和"passwd", 以逗号隔开,为避免插入的数据乱码
- File encoding:文件的编码格式,可以使用电脑自带的笔记本另存为时选择编码方式即可
- Variable Names(comma-delimited):参数名称(如:有几列参数,在这里面就写几个参数名称,每个名称中间用分隔符分割,分隔符在下面的“Delimitet”中定义,为了和文件中的“,”对应,这里也用“,”分割每个参数名,引用方法:${username},${passwd}
- Delimitet:定义分隔符,这里定义某个分隔符,则在“Variable Names”用这里定义的分隔符分割参数。
- Allow quote data:选项选为“true”的时候对全角字符的处理出现乱码
- Recycle on EOF:是否循环读入,因为CSV Data Set Config一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入
(4)由于"CSV Data Set Config"中的变量名为username 和passwd,因此在注册接口的参数username,pwd,cpwd的值分别设为${username}, ${passwd}