[83] LR测试积累
一、hits per second/throughput的由来
1、每秒点击率是客户端向服务器发送的请求数,也就是说如果客户端进入了软件系统的界面,那么该界面上的所有图片和控件都会分别作为一次点击数。
2、吞吐量是服务器发送给客户端的数据量,而不包括客户端发送给服务器的请求等。
二、迭代方式
1、 Iteration Number
Iteration Number用当前的迭代数目替换参数。
2、 Random Number
Random Number用一个随机数替换参数。通过指定最大值和最小值来设置随机数的范围。
3、 Unique Number
Unique Number用一个唯一的数字来替换参数。你可以指定一个起始数字和一个块的大小。
三、迭代中使用关联参数化方法
注:一定要在参数的文本文档中有回车符
1、 建立一个参数A后,欲使另一参数B与之关联,在参数表中的select next row设置为the same line as A
2、 如图设置
图1
四、标准偏差值STD
标准偏差(Std Dev,Standard Deviation) - 统计学名词。
一种量度数据分布的分散程度之标准,用以衡量数据值偏离算术平均值的程度。标准偏差越小,这些值偏离平均值就越少,反之亦然。标准偏差的大小可通过标准偏差与平均值的倍率关系来衡量。
标准偏差公式:S = Sqr(∑(xn-x拨)^2 /(n-1))
公式中∑代表总和,x拨代表x的算术平均值,^2代表二次方,Sqr代表平方根。
例:有一组数字分别是200、50、100、200,求它们的标准偏差。
x拨 = (200+50+100+200)/4 = 550/4 = 137.5
S^2 = [(200-137.5)^2+(50-137.5)^2+(100-137.5)^2+(200-137.5)^2]/(4-1) =[62.5^2+(-87.5)^2+(-37.5)^2+62.5^2]/3 =[3906.25+7656.25+1406.25+3906.25]/3 = 16875/3 = 5625
标准偏差 S = Sqr(5625) = 75
该值用于衡量LR的曲线图中所选取的若干点的值之间的偏差大小,如果超过一定标准,则说明软件过于不稳定。
五、SAP/SDP
SAP (Session Announcement Protocol )::会话通告协议。RFC2974,主要的作用就是告诉接收者,要多播一些什么内容。没有定义描述的格式
SDP:(Session Description Protocol):会话描述协议。 规定了格式,就是对会话的必要信息如何编码,不过不包括传输机制和协商参数。 SDP语法,采用文字,而不是ASN.1。一个SDP会话描述以会话级信息 和 媒体级信息开始,如果出现一个,另外一个接着后面出现。
六、合并图和关联图
将两个图联系起来,就会看到一个图的数据会对另一个图的数据产生影响。这称为将两
个图关联。例如,您可以将正在运行的 Vuser 图和平均事务响应时间图相关联,来了解
大量的 Vuser 对事务的平均响应时间产生的影响。
1 在图树中单击“正在运行的 Vuser”,查看正在运行的 Vuser 图。
2 右键单击正在运行的 Vuser 图并选择“合并图”。
3 在“选择要合并的图”列表中,选择“平均事务响应时间”。
4 在“选择合并类型”区域中,选择“关联”,然后单击“确定”
七、录制脚本方法
1、Sniffer方法:利用以太网的广播特性。嗅探器。但要求客户机与服务器在同一网段。
2、Proxy方法(代理):客户端发送到Vugen,再由Vugen发送给服务器。在客户端与服务器之间增加了LR。
八、客户端永远是发送请求,而服务器处理
LR录制的record log里面与工具charles以及实际网页文件的大小都是一致的。
九、录制模式HTTP/URL
Html-based script(browser/context sensitive)把隶属于一个页面的数据放在一个模块中。
URL(http/analog)真实记录C/S之间全部过程。
2种方式的使用:WEB或B/S结构控件过多的flash等,应使用HTML方式。可以浓缩。可读性好。实质上是一样的。
HTML记录的是web_submit_form
URL是web_submit_data,且支持控件。
十、常见错误
1、录制的脚本为空/录制出错/无法打开首页等:
空:协议选择错误/非B/S操作/打开页面时页面从缓存取出的,也是无法录制下来的/
使用代理/IE使用选项/有恶意代码(检测使用工具:AD-AWARD)/bofu防火墙或防病毒软件
录制出错:出错时使用CODE VIEW,即使出错也能把代码记录下来,而使用TREE VIEW则会停止记录
打开空网页:VUGEN有问题/LR安装路径BIN下Registe_vugen.bat(重新注册一次可能修复)
2、脚本出错
十一、协议选择
LR8中单协议HTTP,在IE中设置一个7777localhost端口,C与B之间都由7777连接,采集所有信息;多协议中单选HTTP协议,指定端口的影射
判断协议工具:PROCESSSPY(正在使用的.DLL分析使用的协议)
十二、关联
是服务器到客户端的动态产生的数据,当客户端发送请求时,需要包括关联的内容再次访问服务器
1、自动关联
2、手动关联
步骤:
a)在Run Time Setting 中选择Data returned by server,并回放脚本检查哪些脚本是因为关联问题导致失败的;
b)确定哪些数据需要关联;
出现错误:Error -27979:Requested form not found,这个问题说明发送到Server端的请求非法,找不到
这时可以使用LR自带工具:compare with Vuser...,在tools中可以找到,它可以进行2个脚本的区别对比,使用这个工具需要注意,它只能识别路径相对较短、名字中没有空格、路径与名字中不能存在中文等的文件。
c)找出动态数据的左右边界值及出现位置;
d)在脚本中添加web_reg_save_param参数
函数web_reg_save_param(“param name”,<list of attributes>*,last)
“param name”是参数名,list of attributes分为三部分:“LB=”“RB=”“ORD=”,分别指左边界、右边界和符合条件的第一个,最后一个可以写ORD=ALL,意为全部取出来。而LAST没有,写LB/RB时,写入引号需要转义符。
e)在脚本中参数化脚本中的动态值;
f)校验动态关联的正确性。
十三、思考时间
没有:压力会大一些
有:压力会小一些但会比较符合实际等待时间
十四、.net内存分析
1、堆栈——放的是局部变量、方法参数、返回值和其他临时值
2、托管堆——0级、1级、2级,用于分配托管对象的区域,也是垃圾回收器区域
3、非托管堆——用于运行时数据结构、方法表、microsoft中间语言(MSIL)、JITed代码
垃圾回收器只是回收了托管堆的内存,堆栈是自动释放的,非托管堆由非托管堆内代码自动控制,而托管堆也有可能内存泄露
.net常用性能测试指标:
1、Process/Private bytes一个进程所独占的内存是多少,无法跟其他进程共享
2、.net CLR Memory/#Bytes in All Heaps托管堆内总使用内存数
3、.net CLR LocksAnd Threads/# of current logical Threads,在.net运行过程中所使用的线程,注意:线程里面所使用的内存是在堆栈里面分出来的
举例:
a)1不让其增长,2没变,可能是非托管堆性能有问题,因为整个内存增加,而托管堆内存的没有变的
b)3增长,1增长,线程泄露,导致内存泄露
c)
堆栈内存泄露(StackOverflowException)
可能引起堆栈内存泄露的原因:
1、栈资源并且从不返回的方法调用
2、线程泄露
每分配一次堆栈后没有回收回来,就是线程泄露,严重会出现StackOverflowException异常
最新的桌面机与服务器版的WINDOWS堆栈大小为1MB
3、托管堆的内存泄露
大对像的内存碎片——如果在栈中申请有9千个字节,它不会放在堆栈中,而是在堆中。.net不会做压缩处理,不断地申请回收,可能会出现内存碎片问题导致泄露
不必要的根引用
中年危机
使用工具CLEprofiler.exe,不断申请回收大字节进行监控
十五、LR解密
Lr_decrypt,把加密函数进行解密
Action()
{
Char *str=”abc”
Char *str1;
lr_load_dll(“encode1.dll”)// 加载动态连接库,encode1.dll是.dll文件名
str1=(char *)crypt_encrypt(str)//调用接口将字符变量str放到.dll文件中去,crypt_encrypt //Dll文件发布了一个接口
lr_output_message(“encrypted=%s”,str1);
lr_out_message(“%s world”,lr_decrypt(str1); //解密
加密的话需要用外部的加密方法,使用LR自带工具或自己编写.DLL文件。
十六、写入错误的用户名和密码不出错
加检查点
要insert的地方右键addstep/ web_reg_find/增加search test/
文件。
web_find 函数在 HTML 页中搜索指定的文本字符串 web_reg_find 函数注册一个请求,以在下一个操作函数(如 web_url)检索到的网页上搜索一个文本字符串 web_global_verification属于注册函数,注册一个在web页面中搜索文本字符串的请求,与web_reg_find只在下一个Action函数中执行搜索不同的是它在之后所有的Action类函数中执行搜索的。 web_find函数使用时,使用在查找页面后面“插入”。 参数“其右侧”、“其左侧”是针对要查找的文本而言。 如,Web Tours site,要查找Tours,“其右侧”应该为“Web”,“其左侧”应该为“site”。 另加一个链接,是Zee的文章,可以帮助理解,当然,看到这里的朋友多数都是初学不久或是已经对LR生疏的朋友,看看Zee的博客可以学到很多东西。 |
解决方法:在transaction页面中调整set Granularity值(右键)summary默认为20秒,只要将transaction的值也调为20秒就一样了
十八、如果在回放脚本或加载场景文件时出错,很有可能是存放路径不正确的问题造成的,保存时要尽量存放在没有中文、没有空格及不常用字符以及不是多重子目录的文件夹下,感谢“求知”的问题以及对问题答案的执着寻求。
原文地址:http://blog.163.com/mmhao_54/blog/static/69570810200801661727607/