我们在使用JMeter进行测试的时候,测试数据是一项重要的准备工作,当每次迭代的数据不一样的时候,就需要进行参数化,也就是从参数化数据文件中来读取测试数据。
JMeter中的参数化方式有多种,我们之前讲过了使用CSV 数据文件设置组件,从.cvs
和.txt
文件中读取数据。
今天我们来说一下,使用函数助手实现JMeter的参数化,其实方法很类似,只是调用数据的方式略有不同。
需求:我们以一个登陆接口为例。
发送登录请求的时候,我们需要传递两个参数:phone
和password
。
针对这个登录接口设计5条用例,如下:
- 正常登录。
- 手机号未注册,即:手机号填写错误。
- 手机号不合法,即:手机号填写错误位数不对或为空。
- 手机号或密码错误,即:密码错误。
- 密码不合法,即:密码为空。
1、测试计划中的元件
添加元件操作步骤:
- 创建测试计划。
- 创建线程组:
选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
。 - 在线程组里面,添加取样器“HTTP请求”组件:
选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求
。 - 在线程组里面,添加监听器“察看结果树”组件:查看结果,
选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树
。
最终测试计划中包含的元件如下:
点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。
2、数据文件内容
创建一个.csv
文件,名为login_data.csv
,然后根据需求编辑数据文件内容。使用函数助手实现参数化的时候,我们不在数据文件的第一行添加列表明,这样方便我们取值。
然后使用Notepad++
打开该文件,点击“编码” —> 转为UTF-8编码,防止中文乱码。
最终所得到的.csv
格式文件的内容如下:
3、函数助手配置
(1)函数助手的打开方式
在JMeter中打开函数助手界面的方式有两种:
第一种:选项 ——> 函数助手对话框
。
第二种:在工具栏中常用功能的快捷按钮,如下图:
(2)函数助手界面介绍
界面说明:
- 选择一个功能:这里是选择你要使用的函数。
- 函数参数:每个函数需要的函数参数都是不一样的。
我们以__CSVRead
函数为例:
1)CSV file to get values from | *alias
:填写数据文件路径。
2)CSV文件列号| next| *
:标识在CSV文件中读取第几列中的数据,从0开始,第一列0、第二列1、第三列2,依次类推。 - 点击生成按钮,生成获取参数值的函数表达式,可以在下方中看到生成的结果,生成的结果即为从数据文件中拿到的参数值。
-
Reset Variables
:重置变量。 -
The result of the function is
:当我们文件路径和参数值的列号填写后、点击“生成”按钮,就会将读取到的值显示在这里。 -
Current JMeter Variables
:当前的JMeter变量相关信息。
说明:
Current JMeter Variables
中的内容说明。(1)预定义变量
大多数变量都是通过函数调用和测试元件(如用户自定义变量)来设置的,在这种情况下用户拥有对变量名的完整控制权。
但是有些变量是JMeter内置的,例如:
JMeterThread.last_sample_ok
:最近的采样是否可以(true/false)。(2)预定义变量属性
JMeter属性集是在JMeter启动时通过系统属性初始化的,还有其他补充的JMeter属性来自于
jmeter.properties
、user.properties
或者命令行中。JMeter还另外定义了一些内置属性,从方便的角度考虑,属性START的值会被复制到同名变量中去。
下面是具体列表:
START.MS
:以毫秒为单位的JMeter启动时间;START.YMD
:JMeter启动日期格式yyyyMMdd
;START.HMS
:JMeter启动时间格式HHmmss
;TESTSTART.MS
:以毫秒为单位的测试启动时间;请注意:START变量/属性表征的是JMeter启动时间,而非测试的启动时间,它们主要用于文件名之中。
(3)编辑后的函数助手界面
因为我们使用函数助手实现JMeter中的参数化,所以我们要使用__CSVRead
函数。
然后我们需要把数据文件的绝对路径填入第一个输入框中,在第二个输入框选择取第几列的数据。
最后我们点击“生成”按钮,就会生成一个函数表达式。
如下图所示:
提示几点:
- 在
The result of the function is
的输入框中要看到参数文件中的值,算是成功。 - 把生成函数字符串,复制到请求元件中需要参数化的地方。
- 文件数据中的每一列数据,都要生成一个函数字符串。(其实就是最后的列数不一样)
4、HTTP请求组件内容
编辑HTTP请求组件中的内容,然后把需要使用参数化变量的地方,引用函数助手中生成的函数字符串表达式。
如下图所示:
5、线程组元件内容
如果需要使用CSV文件中所有的数据,需要设置线程数。
因为没有了CSV数据文件设置组件的参与,所以这里只能使用线程数进行设置,才能实现变量的循环应用。
如果使用循环次数进行设置,效果就是使用同一用户,执行几次登陆操作。
6、脚本运行结果
该测试脚本运行结果如下图所示:
我们可以看到,一个发送了5次请求,每次请求使用的参数值都是不同的,并且返回结果的预期也与我们设想的一样。
这样就演示了,使用函数助手实现JMeter中的参数化。
7、总结JMeter函数助手使用步骤
- 点击JMeter页面的函数助手。
- 选择需要使用的函数。
- 设置函数相关参数。
- 点击生成可被引用的函数字符串。
- 复制函数字符串。
- 粘贴到需要使用的位置。