JMeter 函数助手参数化
函数助手参数化,首先我们在开始之前的需要整理一份txt的文件,里面存放登录接口的请求参数。
上方文件中,我们记录了用户名,和密码,下面我们找到JMeter中的函数助手,找到CSVRead,将txt的文件路径放进去
- 用于获取值的CSV文件 | *别名:指的是文件路径
- CSV文件列号| next| *alias:指的是列名,如我们想要提取用户名,用户名在第一列,则输入0,下方图中我们可以看到,已经提取到用户名的数据
配置完成之后,我们复制生成的字符串,作为请求的参数值
下方我们可以看到,请求的用户名和密码参数,已经从txt文件中读取了。
CSVRead参数化特点
: CSVRead 是根据并发用户来读取数据的,跟循环次数无关。这么说可能有写抽象,下面我们来通过实验来解释CSVRead参数化的特点。
下面假设我们设置了一个并发用户数,然后循环次数设置了4次。为了方便大家查询数据,我讲登录接口的名称改成了CSV用户名参数
下面我们再来回顾一下我们设置的参数化数据,一共有四个用户名,分别是 admin、dev、test、pro
设置一个线程用户数,循环4次,我们会发现, CSVRead 会一直读取第一个用户名。
下面,我们将线程数改成4个,循环数改成1次,来看看请求数据
大家可以看到,当我们设置多个线程用户数时,CSVRead会依次读取文件中的数据,因此CSVRead 是根据并发用户来读取数据的,跟循环次数无关。
那么假设我们一共有四组登录数据,线程数设置4个,循环设置2次,CSVRead数据会如何进行处理呢?我们来看看下方的实战
我们可以看到 CSVRead 会以用户数去读取数据,并且每一组数据读取两次。
那么大家是否考虑过,比如我们一共就四组登录用户数据,但是线程组设置了5个用户数,CSVRead 会如何处理呢?
我们上方图中不难看出,当txt文件中数据不够的情况下,CSVRead 会重新从第一行读取 txt 数据。
CSV Data Set Config参数化
如果我们在实际工作中,一组数据,只想使用一次,JMeter同样也提供了方法。
- 文件名:文件存放的路径
- 文件编码:如果文件中包含中文,可以选择UTF-8
- 变量名称:如文件中有用户名和密码等数据,我们需要给数据定义一个变量名称,名称注意需要以英文逗号的形式隔开
- 忽略首行:此功能如像平时数据库文件中导出的数据,首行会展示列名称,通常我们用不到这个数据,可以选择忽略首行
- 分隔符:这个场景,比如我们有个用户昵称,那么用户昵称名称为“tester,yu”,这个昵称中包含英文符号,那么程序中可能会默认tester是用户名,yu是密码,这样在请求的时候,就会出现问题,因此JMeter提供了\t制表符,如下图为例,txt文件中的数据,我们使用tab键,去分割开每组数据,这样便于我们区分每个参数。
使用说明:
- 文件中最后一行不能有空格
- 若要进行分布式压测,可以将参数化文件放在jmeter的bin目录下,如此则不需要为了设置参数化文件的路径而苦恼
备注:需要将参数化文件和压测脚本(如 abc.jmx)放在同一个目录下
CSV Data Set Config,我们将线程用户数设置1个,循环4次,我们可以看到,他会依次读取txt文件中的数据,不受线程数的影响。
下面的图中,我们将线程数设置为2次,并且循环2次,同样我们可以看到,他会根据txt文件中的数据,依次读取
下面我们来思考一下,当我们线程组设置的线程数为5个时,CSV Data Set Config 是否会继续读取数据呢?
我们可以看到,他会重新读取第一张的数据。
那么现在是不是会有一个疑惑,工作中我们会遇到一些场景,某些数据我们只能使用一次,比如注册的账号,这个我们在参数化中如何实现呢?
下方图中,我们将遇到文件结束符时再次循环,改成False,遇到文件结束符时停止线程改成True。
此时我们线程数设置了10个,但是实际我们只有4组测试数据,我们来运行一下。
可以看到,当数据执行完成之后,Jmeter脚本会终止运行。