Jmeter 全程实战(五)参数化
一、参数化简介
为什么需要参数化?
例如录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统。这个时候就需要对用户名和密码进行参数化,使每个虚拟用户都使用不同的用户名和密码进行访问。
二、参数化的几种方式
注:引用变量使用 ${变量名}
2.1 前置处理器->用户参数
添加:线程组->添加->前置处理器->用户参数
注:还可以添加多个用户来设置不同的参数,并在线程组中设置多个“线程数”循环来发起请求
2.2 前置处理器->正则表达式用户参数
2.3 配置与案件->用户定义的变量
添加:线程组->添加->配置元件->用户定义的变量,添加变量名以及对应值;
2.4 正则表达式提取
2.5 函数助手
- 新建user.csv文件,写入id、用户名和密码
- 点击菜单栏“工具”-->函数助手对话框,看下图: CSV文件列号是从0开始的,第一列0、第二列1、第三列2、依次类推。若要使用相对路径,可直接将文件放在 bin 目录下
- 复制生成的参数化函数,修改函数中对应的参数化字段列号即可
2.6 配置元件->CSV 数据文件设置(CSV Data Set Config)-- 推荐使用
- 使用方法
(1)新建csv文件,和函数助手一致
(2)线程组->添加->配置元件->CSV Data Set Config
(3)在请求中使用 ${变量名} 获取变量
- CSV 数文件设置说明:
-
Delimiter:如文件中使用的是逗号分隔,则填写逗号;如使用的是TAB,则填写\t;(如果此文本文件为CSV格式的,默认用英文逗号分隔)
-
Recycle on EOF? :到了文件尾处,是否循环读取参数,True=当读取文件到结尾时,再重头读取文件;False=当读取文件到结尾时,停止读取文件
-
Stop thread on EOF? :到了文件尾处,是否停止线程,当Recycle on EOF为False时,当读取文件到结尾时,停止进程,当Recycle on EOF为True时,此项无意义
当Recycle on EOF 选择true时,Stop thread on EOF选择true和false无任何意义,通俗的讲,在前面控制了不停的循环读取,后面再来让stop或run没有任何意义
当Recycle on EOF 选择flase时,Stop thread on EOF选择true,线程4个,参数3个,那么只会请求3次
当Recycle on EOF 选择flase时,Stop thread on EOF选择flase,线程4个,参数3个,那么会请求4次,但第4次没有参数可取,不让循环,所以第4次请求错误
2.7 从数据库获取
从数据库中获取当参数的值没有规律且量比较大时,可以选用这种方法。例,从Mysql 中获取数据
-
下载MySQL Connector JDBC :https://dev.mysql.com/downloads/connector/odbc/
-
解压下载的zip包后,将其中的 mysql-connector-java-5.1.39-bin.jar 放到Jmeter的lib目录下
-
添加“配置元件”->“JDBC Connection Configuration”,设置下列参数:
-
Database URL:jdbc:mysql://host:port/db(如jdbc:mysql://localhost:3306/testlink)
-
JDBC Driver class:com.mysql.jdbc.Driver
-
username:连接数据库的用户名(如root)
-
password:连接数据库的密码
-
添加“Sampler”->“JDBC Request”,在SQL Query中输入查询语句,CONCAT()函数
-
可以在JDBC请求中添加“后置处理器”->“正则表达式提取器”,以提取参数:
-
引用名称:user_id
-
正则表达式:username:’(.+?)’{password:’(.+?)’
-
模板:$1$$2$
使用时,user_g1即为用户名,user_g2即为对应用户名的密码;更多正则表达式提取方法参见Jmeter正则表达式提取器