注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

xiguo.le ~(*^__^*)

乐呵呵.。·

 
 
 

日志

 
 

LR notes  

2010-07-02 11:18:54|  分类: learning |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

*********参数化******< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />

5迭代编号也用来作参数化的??有什么作用啊?

让参数不唯一

 

并发与迭代的区别:

LR,要测10个用户同时并发登录,在录制好脚本后,参数化用户名密码,在参数列表里准备10组参数值;然后运行Controller,设置用户数为10。即可并发10个用户。

那么这里的是否需要设置迭代次数呢?设成1和设成100有什么区别啊?如果迭代次数设置为1,则脚本就只跑10遍(因为并发10个用户);如果迭代次数设置为100,当并发数为10,那么脚本就要跑100*10=1000 遍。

不过,在没有设置Conrtoller中的durantion时间时,才按上面所说的跑。如果设置了这个场景的持续时间,那么运行的场景时间就以这个时间结束为准,和迭代次数就没有关系了。

 

服务器90%响应时间(s):

服务器90%响应时间是指采样数据中有90%的数据比它小,10%的数据比它大。举例如下:假设有一组数据(1,3,4,6,5,11,8,2,9,12),从大到小排序之后为(1,2,3,4,5,6,8,9,11,12),那么服务器90%响应时间就是11

 

Schema互串问题:

一般可以分析所测试软件,找一个方便检查的点(即检查的字段),在每个Schema中为这个字段分配为可标识的、不相同的值;然后通过页面检查,即录制脚本,插入检查点(检查使用该Schema的用户登录时,是否拿到了对应的检查字段)。

     如测试软件有多个租户,每个租户对应一个Schema。测试并发用户时,需要检查是否会有Schema互串现象。那我们可以通过每登录一个用户(一个用户只属于一个租户),就在页面检查该用户下某个员工的电话号码(该字段已作标识:跟该租户下其他员工的电话号码不同,及跟其它租户下员工的电话号码不同)是否正确,则可判断是否有Schema互串现象。

 

负载用户的加载

设计场景计划,加载负载用户时,应注意加载一个负载用户所有的时间T。因为,若所测软件并发登录存在问题,单个用户登录正常,则设计场景时,应采用每T加载一个用户,避开用户登录并发,而达成后面其它操作事务的并发。

 

 

 

合并分析图

我们在分析结果图时,应在原始图的基础上,合并/并联有关的图,进行分析,会得到很好的效果。分析图的处理方法:合并分析图、自动关联分析图。

合并分析图(Merge Graphs)
1
)叠加(OverLay):在两个图合并后,共用X轴内容,左侧的Y轴显示当前图的值,右侧Y轴显示合并过来的图的值。

2)平铺(Tile):合并后平铺布局,共用一个Y轴,合并过来的图在原图上面显示。

3)关联(Correlate):绘图时区分两个图各自的Y轴。当前图的Y轴变为合并图的X轴,合并过来的图的Y轴作为合并后新图的Y轴。

 

复制分析图:

LR上的分析图,复制到WORD等文档中。选择想复制的图,在工具栏中选择Edit--Copy to Clipboard--Graph,然后在WORD等文档粘贴即可。我们还可以先在想要复制的图上,选择要显示的数据项,或添加标注说明,再复制图。

 

分析结果:

首先,从不同的性能测试指标,分析本次所得结果。若有比较特别的数据,则应列出,并作说明,分析原因,引起报告阅读者的注意。

其次,结合各种指标,分析结果、存在问题的原因等。

最后,给出测试结论。一般顺利的性能测试(指性能数据正常、有规律),则应就所得结果,给出测试结论。若所得的性能数据跟预期不同,没有规律,也分析不出根本原因,则可以不给测试结论,只给分析过程,或建议。

 

 

6表格:

ID

1

2

3

2Vuser,按顺序向Vuser分配参数值,下面说法正确吗?

A、如果选择“每次迭代”,则Vuser1Vuser2在第一次迭代中使用1,第二次迭代中使用2

B、如果选择“每次出现”,则Vuser1Vuser2在第一次出现时使用1,第二次出现时使用2

C、如果选择“一次”,则Vuser1在所有迭代中使用1Vuser2在所有迭代中使用2

----83上试下,可知

 

< xmlnamespace prefix ="st1" ns ="urn:schemas-microsoft-com:office:smarttags" />2009-2-12

1GUI VuserRTE Vuser分别是什么?

GUI Vuser:如DPOS中的收银台终端,是图形界面的。

RTE Vuser:仿真终端,看不到信息的

2、怎样选择Vuser?例如下面的选择:

< xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />

-----考虑各种情况,如不同网段的。

3每个 GUI Vuser 需要一台单独的 Windows 计算机;而一台 UNIX 计算机上则可

以运行几个 GUI Vuser。为什么这样??

用户1远程连接Windows计算机,并且在运行LR程序;用户2远程连接Windows计算机,可连接成功,但不能运行LR程序。--- GUI Vuser就像是这样的。

UNIX上,可能是多进程的,一个GUI Vuser是一个进程。

 

 

 

 

 

·············································································

1、插入事务/结束事务:度量服务器的事务性能

lr_start_transaction(“trans1”);

lr_end_transaction(“trans1”,LR_AUTO);

 

1、  集合点:模拟多用户压力

lr_rendezvous(“rendezvous1”)

 

2、  插入注释

/*

*注释语句

*/

 

3、  获取Vuser信息

lr_get_attrib_stringlr_get_host_namelr_get_master_host_namelr_whoami

:my_host = lr_get_host_name();

 

4、  将消息发送到输出

有日志消息、调试消息、错误消息和输出消息

 

5、  处理Vuser脚本在执行期间出现的错误

使用运行时设置。可以指定“出现错误时仍继续”运行时设置。

使用 lr_continue_on_error 函数。

 

6、  模拟用户思考时间

lr_think_time

 

7、  加密文本

8、  在脚本中使用C函数

 

···········································································

参数化:

1、  参数随机取值时,可在LoadRunner Controller指定随机顺序的种子数。每个种子值代表用于测试执行的一个随机值顺序。每当使用该种子值时,都会将相同顺序的值分配给方案中的 Vuser。如果在测试执行中发现问题,并且要使用相同的随机值顺序重复该测试,请启用该选项。

 

对用户名和密码进行参数化时,可以采用绑定的方式。例如:

1)对用户名进行参数化,其参数名为“USER”,添加参数值;

2)对密码进行参数化,其参数名为“PSW”,添加参数值;

3)绑定参数“USER”、“PSW”:在参数“PSW”的属性设置页面,“Select next row”设置为“Same line as USER

这样,用户登录时,就会取各用户对应的密码登录。

 

 

 ·············································································

关联语句

1、  简化或优化代码

例如,如果依次执行一系列的相关查询,代码可能会很长。可以嵌套查询,但代码会变得复杂、难解。通过关联语句,不需要嵌套就可以链接查询。

 

2、  用于动态数据

许多应用程序和网站按当前日期和时间标识会话。如果尝试重播脚本,该操作将

会失败,因为当前时间与录制时间不同。通过关联数据可以保存动态数据,并且

在整个方案运行过程中使用这些数据。

 

3、容纳唯一数据记录

例如,假设您录制了打开一个新的银行帐户的过程。每个新帐户都分配了用户未知的唯一编号。录制期间,此帐号将插入具有唯一关键字约束的表中。则运行脚本时,该操作将尝试用录制的编号而不是新的唯一编号创建帐户。结果将产生错误,因为该帐号已经存在。

 

········································

2009-2-11

LoadRunner测试过程:

1、  规划测试

2、  创建Vuser脚本

3、  创建方案

4、  运行方案

5、  监视方案

6、  分析测试结果

 

*****************************

负载测试计划

7、  分析应用程序

确定系统组件(应用程序示意图:客户机、网络、中间件、服务器);

描写系统配置(连接到系统的用户数、客户端PC的配置、DBWEB服务器的类型、服务器与应用程序之间的通信方式、通信设备的吞吐量第个设备的可以处理的并发用户数);

分析使用模型;

任务分布;

 

8、  定义测试目标

1)以可度量的指标制定目标:

确定了负载测试的一般性目标后,应该通过以可度量指标制订更具针对性的目标。

为了提供评估基准,应精确地确定区分可接受和不可接受测试结果的标准。

例如:

一般性目标 - 产品评估:选择 Web 服务器的硬件。

明确目标 - 产品评估:在一台 HP 服务器和一台 NEC 服务器上运行同一个包含

300 个虚拟用户的组。但 300 个用户同时浏览 Web 应用程序页面时,确定哪一

种硬件提供更短的响应时间。

 

2)确定测试的时间

计划和设计:评估新产品、度量响应时间

开发:度量响应时间、检测最优的硬件配置、检测硬件或软件升级、检查可靠性

部署:检查可靠性、度量响应时间、度量系统容量

生产:度量响应时间、确定瓶颈、

升级:度量系统容量、检测硬件或软件升级

 

9、  计划LoadRunner方案实施

1)  定义性能度量的范围

度量端到端的响应时间;

度量网络和服务器响应时间;

度量GUI响应时间;(GUI 响应时间 = 端到端响应时间 - 网络和服务器响应时间

度量服务器响应时间;

度量中间件到服务器的响应时间;

 

2009-2-12

2)  定义Vuser活动

通过定义事务(事务响应时间)、集合点(模拟峰值期活动)等来定义Vuser活动

3)选择Vuser

终端仿真 (RTE)

   RTE Vuser 操作终端仿真器,以便加载测试客户端/ 服务器系统。

   RTE Vuser 将字符输入键入终端仿真器,然后将数据提交到服务器,并等待服务器响应。例如,假设您有一台用于维护某个维修公司的客户信息的服务器。现场服务代表每次修改数据时,都通过调制解调器使用终端仿真器来访问服务器数据库。服务代表访问有关客户的信息,然后录制他执行的修理操作的详细信息。

一般性规则:

? 使用一个或几个 GUI 用户来模拟每一种类型的典型用户连接。

? 使用 RTE Vuser 来模拟终端用户。

? 运行多个非 GUI 或非 RTE Vuser 来生成每个用户类型的其余负载。

 

4)选择测试硬件/软件

? 建议在一台单独的计算机上运行 LoadRunner Controller

? 每个 GUI Vuser 需要一台单独的 Windows 计算机;而一台 UNIX 计算机上则可

以运行几个 GUI Vuser

? GUI Vuser 测试计算机的配置应该尽量与实际用户的计算机配置相同。

 

10、              检查测试目标

1)  度量最终用户响应是时间

2)  定义最优的硬件配置

例如,您可以设置三种不同的服务器配置,并针对各个配置运行相同的测试,以确

定性能上的差异:

? 配置 1200MHz64MB RAM

? 配置 2200MHz128MB RAM

? 配置 3266MHz128MB RAM

3)  检查可靠性

4)  查看硬件或软件升级

应用程序回归测试不会查看升级版的新功能;而是查看新版本的效率和可靠性是否与旧版本相同。

5)  评估新产品

您可以运行测试,以评估单个产品和子系统在产品生命周期中的计划阶段和设计

阶段的表现。例如,您可以根据评估测试来选择服务器的硬件或数据库套件。

6)  确定瓶颈

例如,文件锁定、资源争用、网络过载

7)  度量系统容量

度量系统容量,并确定系统在不降低性能的前提下能提供多少额外容量。

响应时间显著延长的位置,称为“拐点”

 

 

2009-2-23

房屋租赁管理系统登录作业

1、  查看脚本运行时,查看参数取值:

1)  设置Run-time Setting里的LogExtended log,选择Parameter substitution,则可在Replay Log处查看到全部的参数取值

2、  使用消息返回函数lr_log_message

lr_log_message("%s", lr_eval_string("{page_number}"));

 

3、  使用函数lr_eval_string,要放在参数已经执行后的脚本后。若直接放在关联语句后面,则参数取值为空。

 

4、  对列表进行翻页操作:

如,一个房屋租赁页面的房屋租赁列表有多页数据,现要进行翻页操作,一直翻到最后一页。

首先,运用关联取得该房屋租赁列表共有多少页(“ /16页”):

选择Tree View—房屋租赁页面Server Response,选择列表页数16,右键创建一个自动关联。

// 自动关联

    web_reg_save_param("page_number",

        "LB=nbsp;/",

        "RB=",

        "Ord=1",

        "RelFrameId=1",

        "Search=Body",

        "IgnoreRedirections=Yes",

        LAST);

//然后,声名变量:

int i;

    int count;

//将返回的页数保存到count

count=atoi(lr_eval_string("{page_number}"));

 

最后,使用for循环:

使用for循环时,要先找出该翻页操作里表示不同页的变量,再把每次循环的值传给该变量,以达到翻页循环。我们可以通过连续录制几页的翻页操作,来判断。在本例中,可知"Name=ec_p", "Value=2"中的“2”是要找的变量,用“houseAction1”代替。

接着,使用lr_save_int()把循环变量,赋给houseAction1,则可完成此翻页循环操作。

count=atoi(lr_eval_string("{page_number}"));

    for(i=2;i<=count;i++){

    lr_save_int(i,"houseAction1");

    web_submit_data("houseAction.do_2",

    "Action=http://192.168.102.64:8080/auth-bestPractices-1.0/HouseManage/houseAction.do?method=list",

        "Method=POST",

        "RecContentType=text/html",     "Referer=http://192.168.102.64:8080/auth-bestPractices-1.0/HouseManage/houseAction.do?method=list",

        "Snapshot=t22.inf",

        "Mode=HTML",

        ITEMDATA,

        "Name=ec_i", "Value=ec", ENDITEM,

        "Name=ec_crd", "Value=10", ENDITEM,

        "Name=ec_p", "Value={houseAction1}", ENDITEM,

        "Name=ec_a_checkbox2", "Value=id", ENDITEM,

        "Name=chkbx_1", "Value=UNSELECTED", ENDITEM,

        "Name=chkbx_2", "Value=UNSELECTED", ENDITEM,

        "Name=chkbx_3", "Value=UNSELECTED", ENDITEM,

        "Name=chkbx_4", "Value=UNSELECTED", ENDITEM,

        "Name=chkbx_5", "Value=UNSELECTED", ENDITEM,

        "Name=chkbx_6", "Value=UNSELECTED", ENDITEM,

        "Name=chkbx_7", "Value=UNSELECTED", ENDITEM,

        "Name=chkbx_8", "Value=UNSELECTED", ENDITEM,

        "Name=chkbx_9", "Value=UNSELECTED", ENDITEM,

        "Name=chkbx_10", "Value=UNSELECTED", ENDITEM,

        "Name=pages1", "Value=1", ENDITEM,

        LAST);

   

PS

使用web_reg_save_param()进行关联时,若查找到匹配的结果有多条,如页面中有What are you doing? What are they doing?:

web_reg_save_param(who,LB=are,RB=doing);

则有who_1= you who_2= they这两个结果保存在who中,同时返回一个who_count=2的参数。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

创建手动方案

使用百分比模式创建手动方案

创建面向目标的的方案

 

*******************************************************************

2009-2-25

创建场景配置方案

1、运行时设置:

Use Random Sequence with Seed(使用种子取随机顺序):每一个种子数值在测试执行的时候代表了一个随机数的顺序。无论你何时使用这个种子数值,在scenario中同样的数据顺序就被分配给虚拟用户。如果在测试执行的时候发现了一个问题并且企图使用同样的随机数序列来重复测试,那么,你就可以启动这个功能(可选项)。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=

2009-2-27

1、新增员工记录(员工编号有重复,则新增失败):

在写脚本时,若无考虑到此情况,未检查是否有重复,则执行场景时,结果报告无体现此情况,事务依然显示通过。

---可通过web_reg_find( )来查检,是否弹出报错页面,来判断事务是否真的正确执行。

在提交数据的web_submit_data前加以下语句:

web_reg_find("Text=null","Fail=Found",LAST);

/*: "Text=null"中的null是要根据运行此脚本时,弹出的报错页面里的页面元素来定的。不能拿前台报错页面的元素。因为LR运行脚本时,不经过前台的。*/

 

========================================================================

2009-3-2

运行脚本时,出现下面错误:

Error -27985: There is no context for HTML-based functions. A previous function may not have used "Mode=HTML"

是由于登录等初始化操作放在了vuser_init_transaction,把业务逻辑放在action_transaction,运行时执行5次迭代(同时Run_time setting中复选了Simulate a new user on each iteration),则会出现此错误。因为,该设置是在每执行一次迭代都会使用新的用户,而登录等操作又不会重复执行,则新的用户根本就没登录,所以不能进行后面的逻辑操作,就会出错。

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

2009-3-3

1、测试中的验证码问题的解决方法:

W         更改应用程序,屏蔽验证码

W         叫开发给一个万能验证码(即后门)

W         使用DLL的外部接口获取验证码

 

 

 

 

2009-6-11   增强脚本(准备)

 

一、插入事务

1、插入事务的开始方式:

1)选择菜单栏“插入”-“事务的开始”

2)直接点击工具栏上的“事务的开始”

3)在脚本窗口直接点击右键-选择“插入”-“事务的开始”

4)使用快捷方式:Ctrl+T

 

2、插入事务的结束方式:

1)选择菜单栏“插入”-“事务的结束

2)直接点击工具栏上的“事务的结束”

3)在脚本窗口直接点击右键-选择“插入”-“事务的结束”

4)使用快捷方式:Ctrl+D

 

3、  事务命名:一般取些易懂的名字,如登录、login

 

4、事务作用:

1)事务可度量系统性能指标

2)事务能够度量在组操作中每一步的性能指标

3)通过事务计时可实现不同压力负载下的性能指标对比

4)通过事务计时可以帮助定位性能瓶颈

 

二、插入集合点

要在系统上模拟较重的用户负载,需要同步各个 Vuser 以便在同一时刻执行任务。通过创建集合点,可以确保多个 Vuser 同时执行操作。

设置集合点是为了确保“严格意义上”的并发。从本质上看:集合点的作用是通过工具的控制,确保一个请求严格的“同时”从前台提交到后台。从微观上看:是不存在严格意义上的并发的。即使在客户端通过设置集合点的方式将100个请求同时提交到后台,经过网络上的传输消耗,可能它们并不是同时到达的。而即便100个请求同时到达服务器端,受到中间件和应用系统、数据库的各种连接池、缓冲区,CPU处理队列的限制,也可能在服务器端产生等待。因此,严格意义上的并发,可以说是不存在的,但我们需要找到一个平衡点去看待并发这个问题。

 

1、何时使用集合点

性能测试的两个目的是:评测、调优。

在以评测为目的的性能测试中,用户更关心的是业务上的并发,也就是真实业务场景的并发情况。此种情况只要模拟业务操作去设置场景即可,并不需要设置集合点。

在以调优为目的的性能测试中,有针对性地对某个可能存在的性能问题的模块施压,以便找到性能瓶颈。在这种情况下,会用到集合点。

 

2、插入集合点的方式:

1)在菜单栏选择“Insert-Rendezvous

2)在脚本需要插入集合点处,点击右键选择“Insert-Rendezvous

 

4、  集合点命名:一般取些易懂的名字,如登录、login

 

5、集合点的策略设置(在Controller设置)

 

三、模拟用户思考时间

用户在执行两个连续操作期间等待的时间称为“思考时间”-Think Time”。

Think Time用于模仿真实用户在实际操作过程的等待、思考时间。对于服务器来说,在Think Time这段时间内是没有压力的。

1、手动添加Think Time的方式:

1)在菜单栏选择“Insert-New Step-Think Time”,输入指定的思考时间,确定

2)直接在要添加思考时间的地方,输入“lr_think_time();

 

2、思考时间设置

选择“Run-time Setting-Think Time”,进入思考时间设置页面。

1Ignore think time:忽略思考时间。即使在录制的脚本中添加了思考时间,在回放脚本时,也不执行所添加的思考时间。

2Replay think time:有三个设置选项。

*         As recorded 按录制的执行;

*         Multiply recorded think time by:(系数) 按录制的思考时间乘以一个系数。如,添加的思考时间lr_think_time(2),此处设置的系数为4;则最后按2*4来执行。

*         Use random percentage of recorded think time: Min()%, Max()%  按随机设置的一个百分比,并规定上下限。如,添加的思考时间lr_think_time(2)Min50%,Max200%。那么执行的时候它就会从1秒到4秒内随机取一个数来执行。

 

一般如果在事务里添加了思考时间,在分析执行结果时,需要把思考时间去掉,即忽略思考时间。这样既可以真实模拟用户的实际操作,又不会影响测试结果。

 

2009-6-18 定义参数(准备)

 

1、创建参数:

1)在脚本视图中,选择一个字符串,点击右键,选择“Replace with a new parameter”。

2)在树视图中,选择要参数化的步骤,点击右键,选择“Properties-Data”,点击要参数化的参数旁的“ABC”图标。

3)在通过上面两种方式进入的“选择或创建参数”的对话框中,在“参数名”框中输入一个参数名,或选择一个现有的参数名。

4)在“参数类型”框中,选择一参数类型。可用的类型有日期/时间、文件、组

名、迭代编号、负载生成器名、随机编号、唯一编号、用户定义的函数或 Vuser

ID

5)点击确定。VuGen 用参数名替换脚本中选定的字符串,并用括号括起来。

 

PS:还原初始字符串

1)在脚本视图中,选择已参数化的参数,点击右键,选择“Restore original value

2)在树视图中,选择已参数化的步骤,点击右键,选择Properties-Data”,点击要还原的参数旁的“表格”图标,选择“Undo parameter”。这样初始值被还原。

2、定义参数属性

*       进入“参数属性”窗口的方式:

1)在脚本视图中,选择已参数化的参数,点击右键,选择“Parameter Properties

2)在树视图中,选择已参数化的步骤,点击右键,选择Properties-Data”,点击要还原的参数旁的“表格”图标,选择“Parameter Properties”。

*       选择更新方法:

1each iteration (每次出现)

“每次出现”方法指示 Vuser 在每次参数出现时使用新值。当使用同一个参数的

几个语句不相关时,该方法非常有用。例如,对于随机数据,在该参数每次出现

时都使用新值可能是非常有用的。

 

2each occurrence (每次迭代)

“每次迭代”方法指示 Vuser 为每次脚本迭代使用新值。如果一个参数在脚本中

出现了若干次,则 Vuser 为整个迭代中所有出现的该参数使用同一个值。当使用

同一个参数的几个语句相关时,该方法非常有用。

 

3once (一次)

“一次”方法指示 Vuser 在方案运行期间仅对参数值更新一次。Vuser 为所有出

现的该参数和所有迭代使用同一个参数值。当使用日期和时间时,该类型可能会

非常有用。

 

*       选择一个文件作为参数值的源

1)在“文件路径”框中键入数据文件的名称,或者单击“浏览”指定现有数据文件的文件位置。

2)点击“Edit with Notepad”。进入记事本编辑,第一行是参数名,第二行是参数的初始值 。当源文件有多个参数时,可使用分隔符(例如逗号)来指示列分隔。对表格中的每个新行都要另起一行开始。

  评论这张
 
阅读(33)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018