引言:函数助手的功能包含参数化、运算、字符编码格式转换、获取运行时参数等;函数的调用都是以${__function()}这种形式开始的,注意:"__"是英文半角两个下横线,function是函数名,其中的参数不同函数不同参数;
一、__BeanShell脚本语言
__BeanShell函数入参可以是BeanShell语法的程序语句或者BeanShell脚本文件。可以通过Ctrl+Shift+F1调出函数助手面板,或者在工具栏进入;
二、__char
功能:把一组数字转换成Unicode字符,比如我们输入65、65两个数字,生成__char(65,66),即转换为AB;生成的表达式,如有转义字符"\",请删除即ok;
三、__counter
__counter可以作为一个计数器使用,支持多线程(比如:有线程1与线程2,__counter计数器能分开记录线程迭代的次数,也可将两个线程迭代次数合在一起记录)。
下面我们就__counter的两种计数方式进行结果对比:
1.使用true,记录每个线程迭代次数;【前提:线程数设置:10,每个线程循环数设置:3】这里还额外调用了__threadNum函数,主要是记录运行线程的ID;
运行结果:
2.使用false,记录所有线程迭代次数和;【前提:线程数设置:10,每个线程循环数设置:3】,
运行结果:
四、__CSVRead
__CSVRead(),可以从文件中读取指定列的值;可以有4种不同情况,实现不同效果;分别是1.不同线程读取不同值;2.不同迭代读取固定值;3.不同迭代读取不同值;4,使用文件的别名调用表达式;
下面就来逐一对比:
步骤一:首先准备一个文件:E:\Jmeter\csvread.txt,来准备数据:
步骤二:使用__CSVRead()函数,生成表达式;
情况一:接下来,首先验证:在多线程的情况下(循环数:1),每个线程获取的文件内容,均是下一行的;
运行结果:
情况二:接下来,验证:在单线程的情况下,循环数大于1,每个线程循环迭代获取的文件内容,均是第一行的值,是不会变的;
java请求不变都是用${__CSVRead(E:\Jmeter\csvread.txt,0)}:${__CSVRead(E:\Jmeter\csvread.txt,1)},就不截图;
运行结果:
情况三:接下来,验证:在单线程,循环数大于1的情况下,如何使每个线程循环迭代获取的文件内容,是下一行的值?答案是序列号填写:next();另外还要指定起始列(见下面截图2描述);
调用是需注意:要先表明读取哪一列的值;
若是两列都想对应着且要读取下一行的,如name、password必须对应,但又要求是下一行;
运行结果:
所以,${__CSVRead(E:\Jmeter\csvread.txt,next())}只起到换行的作用,什么时候需要换行,就加上next()就行。
举例2:
准备数据:
运行登录jforum结果:
情况四:接下来,使用文件别名,在调用__CSVRead()时,第二个参数;
java请求中,使用别名,代表文件目录;