参数化概念

测试工作中,通常会使用不同的数据发送请求测试不同的场景来实现测试的全面性,这就需要对一些字段进行参数化,以使每次迭代都使用不同的数据来满足我们的测试需求。

Jmeter做为常用的功能、性能测试工具之一,其参数化方式也是相对比较灵活,主要分为4种:用户参数、用户自定义变量、CSV数据文件、函数助手,下面将详细介绍这4种参数化方式的使用方法。

参数化方式

一、用户参数

1.使用场景

适用于参数取值范围很小的场景,例如测试模拟较少用户登陆某系统交易。

2.操作步骤

(1)添加用户参数功能模块

(2)设置参数变量、用户值

注意勾选每次迭代更新一次,否则每次都使用同样的数据;

(3)配置HTTP请求中的参数值或消息体数据中参数化字段

HTTP请求中要么通过设置参数要么使用消息体数据通过报文方式发送请求,无论哪种方式,参数化值应与用户参数中变量名一致。

(4)查看结果树

线程组中的线程数设置为2,点击执行,可以通过查看结果树查看参数使用情况:

二、用户变量

1.使用场景

一般用于Test Plan中不需要随请求迭代变化的参数设置,如:服务器地址、端口。

2.操作步骤

(1)添加用户自定义变量功能模块

(2)配置用户自定义变量参数值

这里以配置不同服务器地址和端口为例:

(3)配置HTTP请求中参数值或消息体数据中参数化字段

当发送请求服务器地址发生改变时,只需要更改服务器参数化值即可向不同的服务器发送请求。当然,用户自定义变量也可以来参数化登陆用户、交易金额、账户等场景。

(4)查看结果树

当服务器名称设置为${host1},端口设置为${post1}时,访问百度服务器:

当服务器名称设置为${host2},端口设置为${post2}时,访问火狐服务器:

三、CSV数据文件

1.使用场景

适用于参数取值范围较大的场景,该方法在参数化大量数据时灵活性高、操作便捷,在需要遍历上千个账户场景时经常使用。

2.操作步骤

(1)准备参数化文件

参数化文件一般为txt或者csv格式,每一行代表一条数据,每条数据可包含多个属性,不同属性之间需用分隔符间隔,CSV数据文件对数据量无要求,当需要参数化的数量量较大时,应使用这种参数化方式:

(2)添加CSV数据文件设置功能模块

(3)配置CSV数据文件参数

文件参数配置详细说明如下:

备注说明:

遇到文件结束符再次循环与遇到文件结束符停止线程的关联关系:

当遇到文件结束符再次循环项为true时,遇到文件结束符停止线程项无意义,因为前面项控制了要一直循环读取;

当遇到文件结束符再次循环项为false时,遇到文件结束符停止线程项为true时,当线程为4个,参数值为3个时,会执行请求3次;

当遇到文件结束符再次循环项为false时,遇到文件结束符停止线程项为false时,当线程为4个,参数值为3个时,会执行请求4次,但是最后一次请求会报错,因为第4次请求无参数;

(4)配置HTTP请求中参数值或消息体数据中参数化字段

(5)查看结果树

线程组线程数设置为3,循环次数设置为1,可以看到执行结果中参数取值与CSV文中的数据一致:

四、函数助手

1.使用场景

当参数为随机数或者报文含有流水号字段(每次迭代不能重复)等场景时,可使用函数助手生成所需数据,当所需字段数据长度较长且不能重复时,通常将时间函数与计数器结合,拼接为合适长度的有效数据。

Jmeter提供了丰富的内置函数,大体可以分为以下7种类型,这里以时间函数与计数器结合为例详细介绍使用步骤。

2.操作步骤

(1)根据需要,配置函数

打开函数助手对话框后,选择时间函数,然后输入想要的时间格式,例如yyyyMMddHHmmss或者MMddHHmmss,点击生成,即可生成可引用的参数化函数:

(2)配置用户自定义变量

一般将生成的可引用参数化函数设置为用户自定义变量的值:

(3)添加计数器功能模块

(4)配置计数器模块的参数

如果我们需要一个长度为20位且不能重复的流水号,那么我们就可以用时间函数生成16位的数值,用计数器生成6位顺序值,将两者拼接起来,即可生成一个长度为20位且不重复的数据:

(5)配置HTTP请求中参数值或消息体数据中参数化字段

将时间函数与计数器组合为resqno变量,这样即使为多并发时,resqno变量也不会重复:

(6)查看结果树