一、关于参数的定义

在你录制程序运行的过程中,脚本生成器自动生成由函数组成的用户脚本。函数中参数的值就是在录制过程中输入的实际值。

例如,你录制了一个Web应用程序的脚本。脚本生成器生成了一个声明,该声明搜索名称为“UNIX”的图书的数据库。当你用多个虚拟用户和迭代回放脚本时,也许你不想重复使用相同的值“UNIX”。那么,你就可以用参数来取代这个常量。结果就是你可以用指定的数据源的数值来取代参数值。数据源可以是一个文件,也可以是内部产生的变量。
用参数表示用户的脚本有两个优点:

① 可以使脚本的长度变短。

② 可以使用不同的数值来测试你的脚本。例如,如果你企图搜索不同名称的图书,你仅仅需要写提交函数一次。在回放的过程中,你可以使用不同的参数值,而不只搜索一个特定名称的值。

参数化包含以下两项任务:

① 在脚本中用参数取代常量值。

② 设置参数的属性以及数据源。

参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。另外,不是所有的函数都可以参数化的。

二、参数的创建

可以指定名称和类型来创建参数。不存在对脚本中参数个数的限制。在Web程序的用户脚本中,你可以使用如下过程在基于文本的脚本视图中创建参数。或者,也可以在基于图标的树形视图中创建参数。

在Web用户脚本的树形视图中创建参数:

  • 将光标定位在企图参数化的地方,点击右键,从弹出的菜单中选择“Properties”。则相关的属性对话框打开。
  • 点击在要参数化的参量的旁边的“ABC”形状的图标。“Select or Create Parameter”对话框打开。
  • 在“Parameter name”中输入参数的名称,或者从列表中选择一个已经存在的参数。
  • 在“Parameter type”中输入参数的类型。
  • 点击“OK”关闭该对话框。用户脚本生成器会用参数来替换最初的字符串常量,并用一个表格形状的图标替换“ABC”形状的图标。
  • 要恢复参数化以前的值,点击图标,然后从弹出的菜单中选择“Undo Parameter”,则以前的值便会重现。

三、定义参数的属性

创建参数完成后,就可以定义其属性了。参数的属性定义就是定义在脚本执行过程中,参数使用的数据源。在Web用户脚本中,你既可以在基于文本的脚本视图中定义参数属性,也可以在基于图标的树形视图中定义参数属性。下面的过程将教你如何在基于本文的脚本视图中定义参数属性。

在基于文本的脚本视图中定义参数属性步骤:

  1. 在参数上点击右键,有菜单弹出。
  2. 在弹出的菜单中,选择“Parameter Properties”。参数属性对话框打开,显示和当前参数类型相关的属性。
  3. 输入参数的属性值。
  4. 点击“Close”关闭参数属性对话框。

在Web用户脚本的树形视图中定义参数的属性:

  • 将关标定位在参数上,然后点击右键,选择“Properties”。属性对话框打开。
  • 点击要定义属性的参数旁边的表格形状按钮,点击右键,选择“Parameter Properties”。参数属性对话框打开,和参数类型相关的属性显示出来。
  • 输入参数的属性。
  • 点击“Close”关闭参数属性对话框。

使用参数列表:

使用参数列表可以在任意时刻查看所有的参数,创建新的参数、删除参数,或者修改已经存在参数的属性。

  1. 点击参数列表按钮或者用“Vuser>Parameter List”。参数列表对话框打开。
  2. 要创建新的参数,点击“New”按钮。新的参数则被添加在参数树中,该参数有一个临时的名字,你可以给它重新命名,然后回车。设置参数的类型和属性,点击“OK”,关闭参数列表对话框。
    注意:不要将一个参数命名为“unique”,因为这个名称是用户脚本生成器本身的。用户脚本生成器创建新的参数,但是不会自动用该参数在脚本中替换任意选中的字符串。
  3. 要删除已有的参数,那么,要先从参数树中选择该参数,点击“Delete”,然后确认你的行为即可。
  4. 要修改已有参数,那么,要先从参数树中选择该参数,然后编辑参数的类型和属性。

四、理解参数的类型

在你定义参数属性的时候,要指定参数值的数据源。你可以指定下列数据源类型的任何一种:
     Internal Data―― 虚拟用户内部产生的数据。
     Data Files ――存在于文件中的数据。可能是已存在的文件或者是用脚本生成器新创建的。
     User-Defined Functions―― 调用外部DLL函数生成的数据

  1. Internal Data包括以下几种:
    Date/Time
    Date/Time用当前的日期/时间替换参数。要指定一个Date/Time格式,你可以从菜单列表中选择格式,或者指定你自己的格式。这个格式应该和你脚本中录制的Date/Time格式保持一致。
  2. Group Name
    Group Name 用虚拟用户组名称替换参数。在创建scenario的时候,你可以指定虚拟用户组的名称。当从用户脚本生成器运行脚本的时候,虚拟用户组名称总是None。
  3. Load Generator Name
    Load Generator Name用脚本负载生成器的名称替换参数。负载生成器是虚拟用户在运行的计算机。
  4. Iteration Number
    Iteration Number用当前的迭代数目替换参数。
  5. Random Number
    Random Number用一个随机数替换参数。通过指定最大值和最小值来设置随机数的范围。
  6. Unique Number
    Unique Number用一个唯一的数字来替换参数。你可以指定一个起始数字和一个块的大小。
  7. Vuser ID
    Vuser ID用分配给虚拟用户的ID替换参数,ID是由Loadrunner的控制器在scenario运行时生成的。如果你从脚本生成器运行脚本的话,虚拟用户的ID总是-1。

五、数据文件

数据文件包含着脚本执行过程中虚拟用户访问的数据。局部和全局文件中都可以存储数据。可以指定现有的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 <parameter>):该方法从和以前定义过的参数中的同样的一行分配数据。你必须指定包含有该数据的列。在下拉列表中会出现定义过的所有参数列表。注意:至少其中的一个参数必须是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时才可用到)

9.1、Automatically allocate block size――自动分配

9.2、Allocate()values for each Vuser――指定一个值

六、从已存在的数据库中导入数据

Loadrunner允许你利用参数化从已经存在的数据库中导入数据。可以使用下列两种方式之一:

  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. 如果从Update out of values中,选择“each iteration”,虚拟用户在每次迭代的时候会使用新的一行的数据而不是重复同样的数据。
  9. 转:LR的参数的取值,和select next row和update value on的设置都有密不可分的关系。 下表给出了select next row和update value on不同的设置,对于LR的参数取值的结果将不同,给出了详细的描述。

    Select next row Update Value on 实际运行结果
    sequential each iteration 在某次循环中所有用户取值相同。
    所有用户第一次循环取第一行值,第二次循环取第二行值
      each occurrence 在某次循环中或者脚本中使用参数的地方,所有用户取值相同。
    脚本中出现要使用参数的话,参数值就更新一次,循环一次值再更新一次。
      once 在所有的循环中所有用户取值相同。
    所有的用户所有的循环中,只用一个值(即参数中的第一行值)
         
    random each iteration 不同的用户,在不同的循环次数中,随机取值
      each occurrence 不同的用户,脚本中出现要使用参数的话,随机取值一次,循环一次再随机取值一次
      once 不同的用户,不管循环多少次,只随机取值一次。
         
    unique each iteration 若选择手工自配参数,那LR按照每用户几个参数先分配参数,然后进行循环。
    若选择自动分配参数:
    Controller中edit schedule中run until comletion:按照循环次数先分配第一个VU(例如设置的循环次数为3,那分配给第一个VU 3个参数值),然后接下来的3个参数值分配给第二个VU,依次类推…...
    Controller中edit schedule中run for:若选择自动分配,LR将按照用户数均分参数,剩余的参数不使用。
      each occurrence 只能手工分配用户,给每个用户分配好X个参数后,在脚本中有参数的地方,就使用已经分配好的X个参数。
      once 按照用户数分配给每个用户分配一个参数而已。以后的循环这个用户就使用这一个参数

    学习

    1、Select next row:Sequential(顺序执行);Random(随机执行);Unique(唯一)

    2、Update value on:Each iteration(每次迭代循环);

    可取组合:

    1、sequential each iteration 在某次循环中所有用户取值相同。
    所有用户第一次循环取第一行值,第二次循环取第二行值 (如果值不够,所有用户循环从第一行-第二行开始取值)

    2、 unique   each iteration 唯一的值并且每次循环时更新值。Controller中edit schedule中run until comletion

    注意:使用该类型必须注意数据表中要有足够的数。比如controller中设定20个Vusers进行5次循环(迭代iteration),那么第一个Vusers用户取值1-5行,第二个Vusers用户取值6-10行的数,依次类推,这样数据表中至少要有100行数据,否则Controller运行过程中会返回一个错误。

    When out of values :Abort Vuser没有那么多参数时,忽略执行其他用户;Continue in cyclic manner:从第一行起接着循环执行;continue with last value :循环执行最后一个值

    3、unique once 按照用户数分配给每个用户分配一个参数而已。以后的循环这个用户就使用这一个参数。比如:第一个用户,取第1个数据,第二个用户,取第2个数据,依次类推,以后每次循环都使用这个数据。有多少个用户就有多少行数据就ok

    第一点:在选用Unique时,在“选择下一行”选择:”each iteration"的时候可以选择“自动分配”和“分配给每个用户”;但是选择“Each occurrence的时候,只能选择”分配给每个用户“;
    第二点:each iteration和Each occurrence的区别,前者表示每次迭代,后者表示每次循环;迭代是可以在脚本中”运行设置中进行设置的,参数只有在脚本调用的时候才会更新,循环是只要脚本调用一次就会重新取一次参数,比如用for循环在脚本中实现的循环,如果选择“迭代”参数只能选择一个,而选择循环,则可以更新参数;
    第三点:在controler里边的分配方式:“自动分配”情况下会按照迭代次数分配给每个用户,比如有10个参数,脚本迭代5次,并发10个用户,这样的话,controler会将10个参数分配给前3个用户,U1,5个参数,U2,5个参数,U3一个参数,其他7个用户失败,总的参数=并发用户数×迭代次数;如果选择“按用户分配”可以让用户自定义来分配,但是也要注意总的参数和并发用户以及迭代次数的关系;总的参数=自定义数×并发用户数;比如有12个参数,每个用户分配2个参数。可以最多支持6个并发用户;选择“循环”的情况下跟选择“迭代”情况相同;

loadrunner学习笔记之参数设置的更多相关文章

  1. 软件测试之loadrunner学习笔记-02集合点

    loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ...

  2. 软件测试之loadrunner学习笔记-01事务

    loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...

  3. MVC缓存OutPutCache学习笔记 (一) 参数配置

    OutPutCache 参数详解 Duration : 缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的. Location : 缓存放置的位置; 该 ...

  4. scala 学习笔记(03) 参数缺省值、不定个数参数、类的属性(Property)、泛型初步

    继续学习,这一篇主要是通过scala来吐槽java的,同样是jvm上的语言,差距咋就这么大呢? 作为一个有.NET开发经验的程序员,当初刚接触java时,相信很多人对java语言有以下不爽(只列了极小 ...

  5. LoadRunner学习笔记

    什么是性能测试: 简单说,功能测试是软件是否能用,性能测试是看软件好不好用: 性能测试的含义,大体来讲就是通过自动化的手段,模拟生产运行的业务压力或者相应的场景,来测试协同系统是否满足生产需要. 性能 ...

  6. LoadRunner 学习笔记(2)VuGen运行时设置Run-Time Setting

    定义:在Vugen中Run-Time Setting是用来设置脚本运行时所需要的相关选项

  7. loadrunner学习笔记一

    这篇笔记主要是针对一个具体的loadrunner脚本里面出现的方法进行解释,具体脚本如下: ` Action() { char *transactionName = "Test"; ...

  8. JavaScript学习笔记 -- 带参数arguments的函数的用法

    JavaScript函数有带参数与不带参数两种形式,不带参数情况如下: function myFunction() { alert('HelloWorld!') } 在这种类型的函数中,输出值是确定的 ...

  9. curl学习之curl_setopt参数设置大总结

    CURL函数库里最重要的函数是curl_setopt(),它可以通过设定CURL函数库定义的选项来定制HTTP请求使用方法:bool curl_setopt (int ch, string optio ...

随机推荐

  1. 安装SQL Sever数据库失败的解决办法

    视频链接:https://www.bilibili.com/video/av12651739/ 我安装了SQL Sever2014.遇到了好多好多问题啊,整的我都快疯了.大致遇到的问题和解决办法如下. ...

  2. Mac下Clang编译libcurl

    使用终端进入curl的根目录下,执行 ./configre CC=clang make make install 之后前往/usr/local/lib下生成了libcurl.a和相应的动态库,头文件在 ...

  3. Ubuntu 14.04安装和3556sdk环境配置

    1.配置为固定ip: vi /etc/network/interfaces 最后添加 iface eth0 inet staticaddress 192.168.1.100netmask 255.25 ...

  4. Shell记录-Shell脚本基础(四)

    while循环,使您能够重复执行一组命令,直到某些条件发生.它通常用于当你需要反复操纵的变量值. 语法 while command do Statement(s) to be executed if ...

  5. vuejs2.0 vue实例的生命周期

    每个 Vue 实例在被创建之前都要经过一系列的初始化过程.例如,实例需要配置数据观测(data observer).编译模版.挂载实例到 DOM ,然后在数据变化时更新 DOM .下图展示的就是一个v ...

  6. 第八届蓝桥杯c/c++省赛题目整理

    第一题 标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都 ...

  7. 在Django中Session的那点事!

    1.session是什么 首先引入度娘的解释:Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 We ...

  8. linux tar 解压出错

    今天用tar -xzvf php-7.2.3.tar.gz 解压php的tar包时报错 [root@VM_72_37_centos ~]# tar -xzvf php-.tar.gz gzip: st ...

  9. 【数据库】SQL经典面试题 - 行列转换二 - 列转行

    本帖子是行转列的一个逆向操作——列转行,看下面一个面试题 面试题2: 柠檬班第30期学生要毕业了,他们的Linux.MySQL.Java成绩数据表 tb_lemon_grade_column中, 表中 ...

  10. G - Pandaland HDU - 6005 (找最小环)

    题目链接:https://cn.vjudge.net/contest/275153#problem/G 具体思路: 我们可以按照暴力的方法进行做 , 我们可以枚举每一条边,将这条边的权值设置为inf, ...