51Testing软件测试论坛

标题: loadrunner 参数化 [打印本页]

作者: 风过无痕    时间: 2008-4-3 17:38
标题: loadrunner 参数化
一、关于参数的定义
函数中参数的值就是在录制过程中输入的实际值。
例如,你录制了一个 Web 应用程序的脚本。脚本生成器生成了一个声明,该声明搜索名称为 “软件测试” 的图书的数据库。当你用多个虚拟用户和迭代回放脚本时,也许你不想重复使用相同的值“ 软件测试”,还需要其他的值如“项目管理” 。例如平常经常用到的,登陆界面输入用户名和密码,那么,你就可以用参数来取代这个常量。结果就是你可以用指定的数据源的数值来取代参数值。数据源可以是一个文件,也可以是内部产生的变量。
用参数表示用户的脚本有两个优点:① 可以使脚本的长度变短。② 可以使用不同的数值来测试你的脚本。例如,如果你企图搜索不同名称的图书,你仅仅需要写提交函数一次。在回放的过程中,你可以使用不同的参数值,而不只搜索一个特定名称的值。
参数化包含以下两项任务:① 在脚本中用参数取代常量值。② 设置参数的属性以及数据源。
参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。另外,不是所有的函数都可以参数化的
二、参数的创建
可以指定名称和类型来创建参数。不存在对脚本中参数个数的限制。在 Web 程序的用户脚本中,你可以使用如下过程在基于文本的脚本视图中创建参数。或者,也可以在基于图标的树形视图中创建参数。
在基于文本的脚本视图中创建一个参数:
1
将光标定位在要参数化的字符上,点击右键。打开弹出菜单。
2
在弹出菜单中,选择 “Replace with a Parameter” 。选择或者创建参数的对话框弹出。
3
“Parameter name” 中输入参数的名称,或者选择一个在参数列表中已经存在的参数。
4
“Parameter type” 下拉列表中选择参数类型

1) Date/Time    Date/Time 用当前的日期 / 时间替换参数。要指定一个 Date/Time 格式,你可以从菜单列表中选择格式,或者指定你自己的格式。这个格式应该和你脚本中录制的 Date/Time 格式保持一致。你可以设置一个时间参数的偏移量,如果你打算测试下个月的日期,你就可以选择偏移量为30。你也可以设置前偏移量和后偏移量,默认的是前偏移量。另外你可以命令vguen在工作日使用date值,不包括周六和周日(没有明白这个的具体用处,明白的请告知)
c
complete date and time in digits
#c
complete date as a string and time
H
hours (24 hour clock)
I
hours (12- hour clock)
M
minutes
S
seconds
p
AM or PM
d
day
m
month in digits (01-12)
b
month as a string - short format (e.g. Dec)
B
month as a string - long format (e.g. December)
y
year in short format (e.g. 03)
Y
year in long format (e.g. 2003)

  char *c =" {NewParam}";
  lr_output_message("current  time %s",lr_eval_string (c));试试结果吧,呵呵

2 ) Group Name    Group Name 用虚拟用户组名称替换参数。在创建 scenario 的时候,你可以指定虚拟用户组的名称。当从用户脚本生成器运行脚本的时候,虚拟用户组名称总是 None
   char *c =" {NewParam}"; //%05s
   char *d="{NewParam_1}";//%07s

  lr_log_message("group(5s) is %s,group(7s)is %s",lr_eval_string (c),lr_eval_string (d));
显示的结果为:group(5s)is 0None,group(7s)is 000None
3). Iteration Number    Iteration Number 用当前的迭代数目替换参数
设置迭代次数为3
   char *c =" {NewParam}"; //%05s
   char *d="{NewParam_1}";//%07s

  lr_log_message("Iteration(5s) is %s,Iteration(7s)is %s",lr_eval_string (c),lr_eval_string (d));
结果为:Iteration(5s) is  00001,Iteration(7s)is 0000001
Iteration(5s) is  00002,Iteration(7s)is 0000002
Iteration(5s) is  00003,Iteration(7s)is 0000003
4) Load Generator Name    Load Generator Name 用脚本负载生成器的名称替换参数。负载生成器是虚拟用户在运行的计算机。
5) Random Number    Random Number 用一个随机数替换参数。通过指定最大值和最小值来设置随机数的范围。
6
Unique Number    Unique Number 用一个唯一的数字来替换参数。你可以指定一个起始数字和一个块的大小。

7 Vuser ID    Vuser ID 用分配给虚拟用户的 ID 替换参数, ID 是由 Loadrunner 的控制器在 scenario 运行时生成的。如果你从脚本生成器运行脚本的话,虚拟用户的 ID 总是 -1
8、User-Defined Functions ―― 调用外部 DLL 函数生成的数据 ,函数必须是如下格式:
__declspec(dllexport) char *<functionName>(char *, char *) 例如:
__declspec(dllexport) char *UF_GetVersion(char *x1, char *x2) {return "Ver2.0";}

9、table或file 从已存在的数据库中导入文件
可以使用下列两种方式之一:
1. 使用 Microsoft Query (要求在系统上先安装 MS Query )。
2. 指定数据库连接字符串和 SQL 语句。
用户脚本生成器在从数据库中导入数据的过程中提供了一个向导。在向导中,你指明如何导入数据-通过 MS Query 创建查询语句或者直接书写 SQL 语句。在导入数据以后,以 .dat 为后缀并作为正规的参数文件保存。
要开始导入数据库中数据的过程,在参数属性对话框中点击“ Data Wizard ”,则,数据库查询向导弹出。
要创建新的查询
1. 选择“ Create new query ”。如果需要 MS Query 的帮助,选择“ Show me how to use Microsoft Query ”,然后点击“ Finish ”。
如果你还没有安装 Microsoft Query Loadrunner 会提示你这个功能不可用。在进行之前,从 Microsoft Office 中安装 MS Query
2. Microsoft Query 中遵循以下步骤,导入期望的表和列。
3. 在完成数据的导入后,选择“ Exit and return to Virtual User Generator ”,然后点击“ Finish ”。在参数属性对话框中数据库记录以 data 文件的形式显示出来。
要在 MS Query 中编辑并查看数据,选择“ View data or edit in Microsoft Query ”。若要结束,则选择“ File>Exit and return to Virtual User Generator ”返回到脚本生成器。
4. 在“ Select Column ”部分,指定包含当前参数数据的列可以指定列号或者列名。注意:列标题默认为第 0 行( row 0 )。
5. 从“ Select next row ”列表中选择一个更新方法来告诉虚拟用户在脚本指定的过程中如何选择表中的数据。可选项是: Sequential Random Unique 或者 Same Line As
6. 如果选择“ Advance row each iteration ”,虚拟用户在每次迭代的时候会使用新的一行的数据而不是重复同样的数据。
要指定数据库连接或者 SQL 语句
1. 选择“ Specify SQL Statement ”,然后点击“ Next ”。
2. 点击“ Create ”指定一个新的连接字符串。选择数据源的窗口弹出。
3. 选择已有的数据源,或者点击“ New ”创建一个新的数据源。向导将提示你穿过创建 ODBC 数据源的过程。在完成后,连接字符串就会在连接字符串框中显示出来。
4. SQL 框中,输入或者粘贴 SQL 语句。
5. 点击“ Finish ”继续 SQL 语句并导入数据。数据库记录将以 data 文件的形式显示在参数属性框中。
6. 在“ Select Column ”部分中,指定包含当前参数数据的列。你可以指定列号或者列名。
7. 从“ Select next row ”列表中选择一个更新方法来告诉虚拟用户在脚本指定的过程中如何选择表中的数据。可选项是: Sequential Random Unique 或者 Same Line As
8. 如果选择“ Advance row each iteration ”,虚拟用户在每次迭代的时候会使用新的一行的数据而不是重复同样的数据。
数据文件   数据文件包含着脚本执行过程中虚拟用户访问的数据。局部和全局文件中都可以存储数据。可以指定现有的 ASCII 文 件、用脚本生成器创建一个新的文件或者引入一个数据库。在参数有很多已知值的时候数据文件非常有用。数据文件中的数据是以表的形式存储的。一个文件中可以包含很多参数值。每一列包含一个参数的数据。列之间用分隔符隔开,比如说,用逗号。  对数据文件设置参数属性  如果使用文件作为参数的数据源,必须指 定以下内容:文件的名称和位置、包含数据的列、文件格式,包括列的分隔符、更新方法。  如果参数的类型是“ File” ,打开参数属性( Parameter Properties )对话框,设置文件属性如下:
1
“File path” 中输入文件的位置,或者点击 “Browse” 指定一个已有文件的位置。缺省情况下,所有新的数据文件名都是 “parameter_name.dat” ,注意,已有的数据文件的后缀必须是 .dat
2
点击 “Edit” 。记事本打开,里面第一行是参数的名称,第二行是参数的初始值。使用诸如逗号之类的分隔符将列隔开。对于每一新的表行开始一行新的数据。  注意:在没有启动记事本的情况下如果想添加列,就在参数属性对话框中点击“ Add Col” ,那么 “Add new column” 对话框就会弹出。输入新列的名称,点击 “OK” 。脚本生成器就会添加该列到表中,并显示该列的初始值。
3
“Select Column” 部分,指明包含当前参数数据的列。你可以指定列名或者列号。列号是包含你所需要数据的列的索引。列名显示在每列的第一行( row 0 )。
4
“Column delimiter” 中输入列分隔符,你可以指定逗号、空格符等等。
5
“First data line” 中,在脚本执行的时候选择第一行数据使用。列标题是第 0 行。若从列标题后面的第一行开始的话,那就在 “First data line” 中输入 1 。如果没有列标题,就输入 0
6
“Select next row” 中输入更新方法,以说明虚拟用户在脚本执行的过程中如何选择表中的数据。方法可以是:连续的、随机的、唯一的、或者与其它参数表的相同行。
6.1
顺序( Sequential ):该方法顺序地给虚拟用户分配参数值。如果正在运行的虚拟用户访问数据表的时候,它会取到下一行中可用的数据。
6.2
随机( Random ):该方法在每次迭代的时候会从数据表中取随机数
6.3
使用种子取随机顺序( Use Random Sequence with Seed ):如果从 Loadrunner 的控制器来运行 scenario ,你可以指定一个种子数值用于随机顺序。每一个种子数值在测试执行的时候代表了一个随机数的顺序。无论你何时使用这个种子数值,在 scenario 中同样的数据顺序就被分配给虚拟用户。如果在测试执行的时候发现了一个问题并且企图使用同样的随机数序列来重复测试,那么,你就可以启动这个功能(可选项)。
6.4
唯一( Unique ): Unique 方法分配一个唯一的有顺序的值给每个虚拟用户的参数。
6.5
、与以前定义的参数取同一行( Same Line As ):该方法从和以前定义过的参数中的同样的一行分配数据。你必须指定包含有该数据的列。在下拉列表中会出现定义过的所有参数列表。注意:至少其中的一个参数必须是 Sequential Random 或者 Unique
如果数据表中有三列,三个参数定义在列表中: id1 name1 title1 ,如下:。
ID Name Title
132 Kim Manager
187 Cassie Engineer
189 Jane VP
对于参数 id1 ,你可以指示虚拟用户使用 Random 方法,而为参数 name1 title1 就可以指定方法 “Same Line as id1” 。所以,一旦 ID“132” 被使用,那么,姓名( Name “Kim” 和职位( Title “Manager” 同时被使用。
7
Updta value on 数据的更新方法
7.1 Each iteration ――每次反复都要取新值。
7.2
Each occurrence ――只要发现该参数就要重新取值。
7.3
Once ――在所有的反复中都使用同一个值
8 When out of values 超出范围:(选择数据为 unique 时才可用到)
8.1
Abort Vuser ――中止
8.2
Continue in a cyclic manner ――继续循环取值
8.3
Continue with last value ――取最后一个值
9
Allocate Vuser values in the Controller 在控制器中分配值:(选择数据为 unique 时才可用到)


作者: vickiren    时间: 2008-4-17 09:33
标题: 回复 1# 的帖子
太好了 ,正在 进行中
作者: hades_yue    时间: 2008-4-17 19:28
看了这么多还是不明白
例如 我现在要测试一个删除功能的操作,要参数化的内容为ID,如果我在场景中设置100个vuser,运行场景5Minite,然后我数据库中的数据为1-1000000,我的ID取值要从1取到1000000,那我应该怎么参数化这个ID
作者: hongying1982    时间: 2008-4-20 19:17
非常感谢
作者: yhq_1210    时间: 2008-4-25 18:06
真是篇好东西
感谢楼主
作者: yzztt    时间: 2008-4-28 08:31
标题: 回复 3# 的帖子
如果是我,我会这样参数化:
假设脚本里删除的ID号为1000,我会将1000参数化,范围为1~1000000,就OK了啊。
作者: dujun    时间: 2008-4-28 09:20
呵呵 需要呢
作者: 燕子东南飞    时间: 2008-7-2 09:57
非常不错
作者: Fiona_zhang    时间: 2008-7-2 10:07
非常好
谢谢!~
作者: Maisie_09    时间: 2012-11-16 12:32
请教,
     Date/Time参数类型,如果我想得到上个月的日期,该如何设置偏移量呢?好像不能用负数啊




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2