jmter参数化

about

在工作中,使用固定的参数多次测试一个接口,意义并不大,比如老是用同一个用户测试登录接口。比较好的办法是什么呢?就是使用不同的用户访问登录接口,模拟更真实的登录场景。

在jmeter中,提供了参数化函数和参数化文件两种方式来实现参数化。

来看看都是怎么玩的。

参数化函数

首先:这里需要在插件管理中心下载了Custom JMeter Functions插件,该插件扩展了函数助手对话框内的内置函数数量。

jmeter内置了很多函数来供我们使用,比如:

  • 随机数函数系列
  • 加密
  • 时间戳函数
  • UUID

怎么用呢?在你的菜单栏,有个函数助手对话框,里面包含了jmeter提供的所有的函数,内置的和自定义的都有。

我们通过几个示例来学习函数如何使用。

如下图:

  1. 在菜单栏,点击函数助手对话框
  2. 在弹出的窗口中,下拉选择随机数函数。
  3. 对于随机数范围的限制,和将随机数函数赋值给一个变量(可选参数,可以不写),方便别的地方引用。
  4. 点击生成,左侧的输入栏就是jmeter生成的随机数函数,把它拷贝走即可。
  5. 当你点击生成的时候,自动的执行了该函数,随机生成了一个随机数。

来看怎么用,我们现在访问下面的URL,而stock值需要随机生成。

http://www.neeo.cc:6002/get?stock=10   # get

在线程组(线程数设置为2)新建"HTTP请求"取样器:

如上的随机数中,将会从1~100内随机取值。来看"察看结果树"中的结果:

可以看到,两次请求携带的stock值都是随机生成的。

那么,如果有这样一个场景,就是一个生成的随机数要被多处引用怎么办?你可能会说,这么干:

哪里用到就放到哪里!但是这么着不行,因为当jmeter调用一次该函数,就会重新生成一个值:

由上图可以看到,每次的值都不一样,这怎么才能一样呢?这就用到在函数助手中的某个参数了:

没错,就是"存储结果的变量名(可选)"这个参数,这个参数就是将函数执行的结果保存到变量中,然后我们就可以直接别处使用这个变量了,来看怎么用:

看结果:

一个字,好使!原理是啥呢?jmeter在执行内置函数后,会将结果保存到到变量中,而这个变量在哪看呢?其实这个变量被保存到了jmeter的全局中了,不信你看"调试取样器":

OK,完美!

其他的内置函数用法都类似,所以这里就不一一细表了。

但是,还有个重要而内置函数要说,它就是内置的"CSVRead"函数,这个函数用来读取外部的CSV文件。

所谓“CSV”,是Comma Separated Value(逗号分隔值)的英文缩写,通常指的都是纯文本文件,可以以txt方式或者Excel表打开,更多参考:https://baike.baidu.com/item/CSV/10739

在参数化中,文件参数化是非常重要的一个点。比如做登录参数化,登录的用户名和密码总不能都是随机的,而是要从数据库或者文件中读取出来的真实的用户。

首先,我们需要在本地创建一个data.csv文件,注意以逗号分隔:

zhangsan,111
lisi,222
wangwu,333
zhaoliu,444

怎么用呢?上URL:

http://www.neeo.cc:6001/get  # get

上面这个链接想必你也很熟悉了,可以携带用户和密码参数。

首先,由于上面data.csv文件有4个用户,所以,我们这里配置线程组的线程数为4,表示一个线程代表一个用户;然后,在线程组内创建一个"HTTP请求"取样器:

来看"察看结果树"中的结果:

如上图,这完全没有问题,一个线程获取一个用户的信息;但是,我由于在设置线程组的线程数时,手一抖,多设置了一个线程,现在有5个线程数了,也就是数据文件是4个用户,而线程数是5了, 那么第5个线程获取的信息是什么?我们有必要来看下:

哦,是第一个用户的用户信息,这就意味着,当数据文件到末尾时,线程并没有结束,而是从头开始循环着再次从头取值了。

来个小结:__CSVRead函数规定每个线程都只读取一行数据。

那,遇到当数据文件到末尾时,就结束线程的这种操作该怎么办?

很明显__CSVRead函数,有一定的局限性,我们需要更灵活的控制。

参数化文件

"CSV数据文件设置"这个元件对__CSVRead函数做了一定的扩展,使其更加的灵活,来看如何添加"CSV数据文件设置":

如上图新建一个配置元件"CSV数据文件设置":

我们可以对"CSV数据文件设置"做如下配置:

  • 文件名:就是我们要使用的CSV文件。
  • 文件编码就不多说了。
  • 变量名称这里,之前我们都是用0代表第一列,1代表第二列,现在我们可以为这些列起一个变量名。
  • 忽略首行的意思是,在第一行是否有title。有title就忽略它。
  • 分割符默认是西文逗号,也可以自己指定分隔符。
  • 你的数据是否带引号?
  • 当文件所有行读取完毕后,遇到文件结束符后再次循环?和遇到文件结束符停止线程?的关系是互斥的,也就是一个如果设置为true则另一个要设置为false。
  • 线程共享一般设置为所有线程(汉化的没那么精准)。也就是这个CSV文件可以被所有线程使用。

然后,HTTP请求取样器中直接引用变量名即可:

由于在"CSV数据文件设置"中设置了遇到文件结束符时结束循环,所以,5个线程执行了4个就停止了。

以上就是jmeter在参数化方面的用法,更多姿势,请自行探索!

posted @ 2022-05-16 00:58  断浪狂刀忆年少  阅读(155)  评论(0编辑  收藏  举报