如何理解Loadrunner中集合点、事务以及检查点等概念?(2012.2.20)(获奖名单已公布)
本周的问题为“如何理解Loadrunner中集合点、事务以及检查点等概念”?如果你也有问题想提出来和大家一起讨论,请点击此处>>
说不定下期讨论的问题就是由你提出的哦,请快快参与吧!
获奖名单
奖项获奖名单奖励答案链接
三等奖jjsgdsg100论坛积分12#
集合点顾名思义就是用于集合和等待同种事务的作用,加上集合点可以测试并发的性能;事务指的是一项具体的操作,加上事务点之后可检测执行该事务的用时;检查点则是为了检验是否按照预期情况进行而加上的检验手段 集合点:在loadrunner书面解释为所有虚拟用户在同一时刻执行任务。这个从概念上来讲,好像能够真正模拟到真实情况,实际不然。对于LoadRunner来说,集合点只是一种策略,而这个策略也会有很多规则,因为实际情况中并非所有用户都会同时到达集合点;举个例子,当信息从客户端发出到网络、中间件、应用层再到数据库,这其中的每一个阶段都有延时,所以说不可能所有的用户都能到达所谓的集合点,才开始同时执行操作。
事务:指的是用户在客户端做一种或多种业务所需要的操作集,通过事务函数可以标记完成该业务所需要的操作内容;另一方面事务可以用来统计用户操作的响应时间,事务响应时间是通过记录用户请求的开始时间与服务器返回内容到客户时间的差值来计算用户操作响应时间的;
检查点:验证是否出现期望的标志信息 检查点 web_find("web_find", "What=注册", LAST); 用来对HTML中的文本进行检查 中 如果找不到,则会报错
web_image_check("web_image_check", "Src=images/default/logo2.gif","Alt=Discuz! Board", LAST); 中 对图片的src和alt属性进行检查,找不到则报错
"web_reg_find(""SaveCount=zhucecount"", ""Text=注册"", LAST);
推荐的用法,其优点在于:
1) 可以使用通配符,可指定左右边界
2) 可用SaveCount将找出的数量存入一个变量中,便于程序中调用
3) 可手工指定Fail If (Found/NotFound)" 高 "1) 更多使用SaveCount来做手工验证
2) 将该步骤写在某被查找页面的前面,调用SaveCount的变量则写在被查找页面的后面"
"练习:登录PHPWind,检查是否登录成功,要求:
1) 用户名和密码必须参数化
2) 输出结果为:1: denny/12345,失败
2: admin/admin, 成功
3) 如果登录成功,则停止脚本,否则,继续尝试用不同的密码登录
所用的知识点:参数化,参数取值,输出格式,web_reg_find,如何确认服务器返回等" 高 如果能独立完成此练习,则基础知识已经基本掌握。 为什么需要关联:如果服务器动态发送一些数据到客户端,来对客户端的合法性进行验证时
关联的基本原理是什么:从页面中查找内容,并作为变量在脚本中使用,所以其根本再于查找页面中的内容。
"四句话搞懂关联:
1) 关联是从Reponse中抓取信息
2) 关联的本质是查找,仅此而已
3) 一旦且仅当Ord=All时,才是且一定是关联数组
4) 关联数组不是数组"
"针对服务器动态返回值这一情况,关联的基本步骤:
1) 找到需要关联的值,通常是在POST请求的ITEMDATA中,且值看上去比较有随机性
2) 找到需要关联的页面,通常是提交这个POST请求的页面,也就是POST请求的Referer字段对应的页面
3) 设置左右边界,取出其中的值,左右边界的设定越简单越好,只要能找到值即可"
"如何手工关联:使用函数web_reg_save_param(), 各选项的意义:
1) LB/RB:设置左右边界,如为特殊符号,需要用\转义
2) LB/RB中的通配符:#通配一个0-9的数字,^通配一个a-z/A-Z的字母
3) Match Case: 区分大小写
4) Instance:从返回的记录中取出对应顺序的值,如为ALL,则取回所有(特殊用法)
5) Not Found:未找到关联记录后的处理方式(错误,警告)
6) Search In:从返回结果的Header, Body, Noresource还是所有中去查询关联记录
7) Save Length:对关联出来的记录只取其某一特定长度的值,通过与Save Offset进行联合使用,可取出从第几位开始(Save Offset)的几位内容(Save Length)" 事务通过将用户请求放在一个开始和结束的标志中来对该请求进行精确计时
"事务的两个函数:
lr_start_transaction(""test"");
lr_end_transaction(""test"", LR_AUTO);"
事务中只放关键的操作,不能乱放
"事务之间没有任何代码,此时也会消耗时间
lr_start_transaction(""test"");
lr_end_transaction(""test"", LR_AUTO);"
"系统函数在做运算时,也会消耗事务的时间
lr_start_transaction(""test"");
for (i=0; i<1000; i++) {}
lr_end_transaction(""test"", LR_AUTO);"
Think time会包含在事务时间里的,但是后期可以扣除的
事务时间包含:函数自身,think time, wasted time, 响应时间
"体会以下代码的作用:用来区别事务中各块的时间:
int i;
double time_elapsed, duration, waste;
merc_timer_handle_t timer;
lr_start_transaction(""test"");
timer = lr_start_timer();
for (i=0; i<500; i++) {
}
time_elapsed = lr_end_timer(timer);
waste = time_elapsed * 1000;
lr_wasted_time(waste); //手工为事务添加wasted time
lr_think_time(5);
lr_end_transaction(""test"", LR_AUTO);"
"事务的状态不要使用LR_AUTO自动判断,要根据业务需要进行手工判断,思路为:使用web_reg_find去查找返回页面中的关键字,根据关键字找到的数量进行判断:
web_reg_find(""Fail=NotFound"",
""SaveCount=chuanshuo"",
""Search=Body"",
""Text=默认"",
LAST);
lr_start_transaction(""open"");
web_url(""forum"",
""URL=http://172.168.0.200:8010"",
LAST);
if (atoi(lr_eval_string( ""{chuanshuo}"" )) < 5)
lr_end_transaction(""open"", LR_FAIL);
else
lr_end_transaction(""open"", LR_PASS);
或者我们也可以使用时间来做判断,如果该操作的执行时间大于或小于多少秒,则认为该事务是失败的。"
函数web_get_int_property(HTTP_INFO_RETURN_CODE)可获得HTTP状态码,用于对HTTP返回状态的判断
通常比较严格的性能测试中,都自定义事务来代替以Action或Step作为事务的方式
"对代码运行时间的计算还可以使用clock()计时函数来达到:
int i,starttime, endtime;
starttime = clock();
for (i=0; i<1000; i++) {
;
}
endtime = clock();
lr_output_message(""The duration is %d"", endtime-starttime);"
"熟悉以下几个与事务有关的函数的用法:
1) lr_get_transaction_duration(""Test"") -- 取得事务Test运行到该函数时持续的时间
2) lr_get_transaction_wasted_time(""Test"") -- 取得事务Test中浪费的时间
3) lr_wasted_time(millisecond) -- 为事务添加以毫秒为单位的wasted time
4) lr_stop_transaction(""Test"") -- 停止事务Test,此时所有取事务相关时间的函数将不包含此函数后面的部分,如使用lr_get_transaction_duration(""Test"")只会取stop之前的时间
5) lr_resume_transaction(""Test"") -- 恢复停止的事务,如果调用此函数,则恢复lr_stop_transaction函数后面的时间,使lr_get_transaction_duration等函数可正常取值
6) lr_start_sub_transaction() -- 在事务中开始一个子事务
7) lr_end_sub_transaction() -- 在事务中结束一个子事务" "可在Controller启用,禁用,并设置集合点策略(Policy)和哪些VUser允许使用集合点,关于集合点策略,三个选项的不同在于:
考虑一个Ramp Up场景:一共100个Vuser,每30秒钟增加10个Vuser,此时:
1) When 100% of all Vusers arrive:此时必须100个Vuser运行起来后才会释放集合
2) When 100% of all running Vusers arrive: 此时如果只有10个Vuser在线,也可释放集合
3) When 50 Vusers arrive: 设置绝对值的方式,当有50个用户到达时便释放集合"
"集合点要放在事务的外面,否则会带来时间差
因为在集合点的时候要等,如果在事务中等,是错误的"
如果有多个Load Generator,则集合数为各Load Generator相加的数量,如达到策略中设定的数量则集合
一般集合点和事务是结合使用(如以Action作为事务,在Action里放入集合点,而在Action中未自定义事务,则此Action的响应时间是不正确的,因为其包含集合点的等待时间)
如果多个脚本中包含相同名称的集合点,则可以同时使用,集合点的名称不影响其实质
可在Controller为某些Vuser设置使用集合点,某些禁用 集合并发更具有同时性,但是严格意义上的基于同一时刻的并发是不存在的 高,实在是高!:) 强哥抢楼么。。。。。 我一般把集合点成为集结点,因为集合点是设置的一个同一时刻进行的动作。 1、集合点:插入集合点是为了衡量在加重负载的情况下的性能情况。在计划中,可能会要求系统能够承受1000 人同时提交数据,在LoadRunner 中可以通过在提交数据操作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,LoadRunner 就会检查同时有多少用户运行到集合点,如果不到1000 人,LoadRunner 就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000 人时,LoadRunner 命令1000 人同时去提交数据,从而达到计划中的需求。
2、事务(Transaction):为了衡量的性能,我们需要定义事务。比如:我们在脚本中有一个数据查询操作,为了衡量服务器执行查询操作的性能,我们把这个操作定义为一个事务,这样在运行测试脚本时,LoadRunner 运行到该事务的开始点时,LoadRunner 就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在结果中会有反映。插入事务操作可以在录制过程中进行,也可以在录制结束后进行。LoadRunner 运行在脚本中插入不限数量的事务。
3、检查点为了检查Web 服务器返回的网页是否正确,VuGen 允许我们插入Text/Imag 检查点,这些检查点验证网页上是否存在指定的Text 或者Imag,还可以测试在比较大的压力测试环境中,被测的网站功能是否保持正确。推荐最好能在录制过程中添加Text/Imag 检查点。 来学些学习 我是一个新手我想问问....现有一个注册页面,它有一个图片验证码,如何才能让LR可以录制成功的注册脚本 集合点:在事务前定义集合点,达到多个用户并发操作的目的(lr_rendezvous)。
事务:根据功能或者操作定义一个事务,用来界定事务的响应时间等(lr_start_transaction)
检查点:检查服务端响应的信息是否跟预期的一致,比如用户登录时,可加入检查点来确定是否登录成功。(web_reg_find或web_find) 集合点起到瞬间加压的效果,来测试统计系统的瓶颈等性能相关的状况。
事务可以从两方面理解:首先是事务可以统计一个事务自身的响应时间;其次,事务可以验证本次事务的正确性。
检查点,我认为是验证实际的结果是否符合预期中的结果。 就看你怎么用了! 貌似大家都能牛啊 看的有些吃力啊 回复 14# 234506025
你这个问题问的好,如果我遇到这个问题,我可能会让开发人员把那个图片验证撤掉,那个图片认证防的就是无限的灌水,所以这个你只能和开发人员沟通了。如果你非要让LR自动去填写,那么LR表示无能为力。 学习了
页:
[1]
2