Jmeter笔记4_参数化

上一篇 / 下一篇  2010-11-08 18:22:37 / 个人分类:Jmeter相关

参数化Jmeter脚本时,使用参数的地方书写格式为${参数名}---- 很简单,也很重要

今天整理了一下Jmeter添加参数的方式,有如下几种:

1、用户自定义变量
选中需要添加变量控件的父节点,右键à添加à配置元件à用户自定义的变量,截图如下:

在用户定义的变量列表中分别填入:名称,对应的值,在其他地方就可以以${变量名}”的方式引用了。(引用的时候,需要注意一下变量的作用范围)

2、使用Jmeter自带函数获取参数值

Jmeter中可以产生值的函数有:__Random( , , )__threadNum__CSVRead( , )__StringFromFile( , , , )    [补充各函数调用方法如下:

1__Random( , , ),获取值的方式:${__Random( param1,param2 ,param3 )}param1为随机数的下限,param2为随机数的上限,param3为存储随机数的变量名,是选填项。所以,也还可以这样调用此函数:_Random(param1,param2,param3),然后再取param3的值。

2__threadNum,获取值的方式:${__threadNum},这个函数没有任何参数,它用于得到当前运行的线程编号。

3__CSVRead( , ),获取值的方式:${__CSVRead(param1,param2)}param1是文件名,param2是文件中的列(列数从0开始)。具体操作见csv数据提取部分的说明。

4__StringFromFile( , , , ),获取值的方式:${__StringFromFile(param1,param2,param3)}param1是文件名,param2param3为选填项:param2—存储结果的变量,param3—文件开始列,网上找到一点此函数的用法,来自:http://www.cnblogs.com/morebetter/archive/2005/03/04/112871.html

1.函数:${_StringFromFile(文件名.dat)}

2.外部文件的格式必须为.dat

3.默认读取位置为/bin下,也可以自己设定文件存放路径,如:${_StringFromFile(e:user.dat)},从e盘下读取user.dat文件中的数据

4.每次读取文件中的一行

5.如果我有多个user文件,想一起读取,文件名分别为user1  user2。函数写为:${_StringFromFile(user#.dat,,1,2)},从默认目录下读取user1user2的文件

6.如果一个文件想读取多次,可以写成:${_StringFromFile(user.dat,,,2)},user1文件读取2

]

【说明】关于Jmeter的函数使用,可以用Jmeter的函数助手对话框:点击Jmeter的“选项”,选择“函数助手对话框”(或者使用快捷键“Ctrl+F”),在“选择一个功能”的下拉框中选择你所要是有的函数,在函数参数列表的“值”这一栏,填写好相应的参数值,点击按钮【生成】,就可以拷贝生成的函数字符串进行使用了。用函数助手生成函数__Random字符串的截图如下:

3、从csv文件中读取

先说一下csv文件的数据格式:1、文件后缀为.csv2、每一个参数占一列,列与列直接用英文逗号(通常情况下是用英文逗号作分割符,其他符合应该也行,暂没试过。);3、第一行就开始写参数值,不需要些参数名。

使用CSV文件数据前,先要添加CSV Data Set Config,选中要添加节点(一般是线程组或Sampler元件,区别是作用范围的大小不一致),右键à添加à配置元件àCSV Data Set Config,填写好了的CSV Data Set Config截图如下:

填写项说明:

1、名称、注释:元件的名称及注释

2Config the CSV Data Source

1Filenamecsv文件的名称(包括绝对路径,当csv文件在bin目录下时,只需给出文件名即可)

2File encodingcsv文件编码,可以不填

3Variable Names(comma-delimited)csv文件中各列的名字(有多列时,用英文逗号隔开列名),这个变量名称是在其他处被引用的,所以为必填项。

4Delimiter(use “\t” for tab)csv文件中的分隔符(用”\t”代替tab键)(一般情况下,分隔符为英文逗号)

5Allow quoted data?:是否允许引用数据,---这个目前还未弄明白,设置成True或者False都能正常引用数据。

6Recycle on EOF?:到了文件尾是否循环,True—继续从文件第一行开始读取,False—不再循环

7Stop thread on EOF?:到了文件尾是否停止线程,True—停止,False—不停止,注:当Recycle on EOF设置为True时,此项设置无效。

8Sharing mode:共享模式,All threads –所有线程,Current thread group—当前线程组,Current thread—当前线程。这个地方和LoadRunner中的迭代取之相反,经试验得出来的结果是:

Ø All threads测试计划中所有线程,假如说有线程1到线程n (n>1),线程1取了一次值后,线程2取值时,取到的是csv文件中的下一行,即与线程1取的不是同一行。

Ø Current thread group:当前线程组,假设有线程组A、线程组BA组内有线程A1到线程An,线程组B内有线程B1到线程Bn。取之情况是:线程A1取到了第1行,线程A2取第2行,现在B1取第1行,线程B2取第2行。

Ø Current thread:当前线程。假设测试计划内有线程1到线程n (n>1),则线程1取了第1行,线程2也取第1行。

【在试验的过程中,发现:线程循环时,去取csv值时,也算入迭代。例如,当设置为Current thread时,线程11次取了第1行,第2次取的就是第2行】

配置好CSV Data Set Config后,就可以在需要调用参数的地方进行调用了,如上图中配置的pp.csv文件,就可以用${passport},进行调用了。

4、从数据库中获取

(此方法暂未尝试使用,先说下大概思路:用jdbc Request从数据库中提取数据,然后再在JDBC请求中添加“后置处理器”à“正在表达式提取器”,提取查询所得数据)

以上参考:

1、Jmeter参数化的4种方法:http://www.alldaytest.com/sns/forum.php?mod=viewthread&tid=2313

2、Jmeter脚本的参数化:http://www.cnblogs.com/Carrie_Liang/archive/2008/12/22/1325889.html

3、Jmeter变量参数化及函数应用:http://hi.baidu.com/ctest/blog/item/fb5eb51776a088054a90a7ae.html


TAG:

fredwithme的个人空间 引用 删除 fredwithme   /   2013-04-02 09:40:02
您好,请教个问题,对同一个请求地址,jmeter显示的throughout=256.871/minute,apache ab中显示的Time per request:  19365.715 [ms] (mean),这两个参数的数据差得很远,能帮我解释一下吗,谢谢
引用 删除 yang19830520   /   2011-04-01 13:16:50
见证牛人成长
引用 删除 yang19830520   /   2011-04-01 13:16:21
5
 

评分:0

我来说两句

Open Toolbar