ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

jmter参数化

2022-05-16 01:34:07  阅读:150  来源: 互联网

标签:CSV 函数 jmter 线程 参数 jmeter 数据文件


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在参数化方面的用法,更多姿势,请自行探索!

标签:CSV,函数,jmter,线程,参数,jmeter,数据文件
来源: https://www.cnblogs.com/TodayWind/p/16275451.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有