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在参数化方面的用法,更多姿势,请自行探索!
欢迎斧正,that's all