赞
踩
LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。企业使用LoadRunner能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。LoadRunner11也很稳定。
可适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。
LoadRunner的组件:
思考时间(Think Time):即请求间的停顿时间。实际中,用户在进行一个操作后往往会停顿然后再进行下一个操作,为了更真实的模拟这种用户行为而引进该概念。在虚拟用户脚本中用函数lr_think_time()来模拟用户处理过程,执行该函数时用户线程会按照相应的time值进行等待。
集合点(Rendezvous):设集合点是为了更好模拟并发操作。设了集合点后,运行过程中用户可以在集合点等待到一定条件后再一起发后续的请求。集合点在虚拟用户脚本中对应函数lr_rendezvous() 。
事务响应时间:事务响应时间是一个统计量,是评价系统性能的重要参数。定义好事务后,在场景执行过程和测试结果分析中即可以看到对应事务的响应时间。通过对关键或核心事务的执行情况进行分析,以定位是否存在性能问题。
LoadRunner负载测试的流程
流程:
打开LoadRunner12的Virtual User Generator,点击左上角的File>New Script and Solution,弹出Create a New Script 窗口,在窗口中选择Web-HTTP/HTML协议,后点击Create 就会创建空白脚本。
VuGen的脚本分为三个部分:Vuser_init,Action,Vuser_end。其中Vuser_init和Vuser_end都只能存在一个,而Action可分成无数多个部分,可以通过点击旁边的【new】按钮来创建Action。在迭代执行测试脚本时,Vuser_init和Vuser_end中的内容只会执行一次,迭代的是Action部分。
在脚本编辑页,Actions是编写脚本的地方。
包含Vuser_init,Actions,Vuser_end
Vuser_init:表示执行测试初始化工作,只执行一次,可设置登录。
Actions:放置需要循环执行的脚本,脚本中编写要压测的业务,如创建通知书,创建用户等,查询代办等。
Vuser_end:脚本只执行一次,可以设置退出脚本,执行测试结束清理操作。
新建空白页脚本,点击record(录制)按钮,进行录制设置。
4种录制方法:
Web Browser:启动浏览器录制,存在浏览器兼容问题。
Windows Application:录制CS客户端。
Remote Application via LoadRunnwe Proxy:通过LoadRunner代理来录制。------推荐这种。
Captured Traffic File Analysis:通过抓包文件来录制脚本。
a. 录制设置:设置IP和port。点击ok开始录制。
b. 浏览器设置代理。
测试机已安装Chrome ,且安装了SwitchyOmega插件,设置场景名称。
参数化的作用是在进行场景执行的时候,每个不同的虚拟用户可以按照参数的读取策略读取到参数值,以模拟不同用户在提交或者读取不同的数据。
每个用户在界面上读取和提交的信息都不太相同,因此一般都需要参数化,其它与输入信息对应的比如用户id之类的信息也需要参数化;另外,录制环境绝大多数情况下与执行环境不一致,因此一般需要对IP、端口或者域名做参数化。
打开脚本后,首先要确定哪些常量需要参数化。
可以看出,在web_submit_data函数中,两条语句包含了两个常量:用户名和密码。
"Name=usernam", "Value=Test123433333@sina.com", ENDITEM,
"Name=password", "Value=123456", ENDITEM,
当我们想模拟多个不同的用户来运行登录脚本的时候,需要对Value= Test123433333@sina.com和Value=123456进行参数化,以e号参数化为例,参数化过程如下:
1)选中Test123433333@sina.com à右击鼠标à在右键菜单上选择replace with a parameter。
2)在弹出窗口填写参数名称,或选择一个已经存在的参数名。
常用的参数类型:
3)单击窗口的properties按钮,设置parameter的properties。参数名称:Username;选择参数类型File,来写入已准备好的数据。
文件File:参数化结束后,脚本保存的根目录下会自动生成一个 以参数名称命名的 参数文件;也可以直接选择一个已准备好的参数文件。
选择参数列Select Column:
By number:以列号为参数列。
By name:以列名为参数列。
文件格式:
Column:参数之间的分隔符:逗号、空格、Tab。
First data:从第几行读取数据。
选择参数分配方法Select next row:
选择参数更新方法Update value on:
当超出范围时When out of values:(选择数据为unique时才可用到)
设置完成后,被参数化的值会被参数名代替
关联:关联的含义是在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,以变量的形式替换录制时的静态值,从而向服务器发出正确的请求,最典型的是用于sessionID,审批代办的请求参数待办id是待办列表中获取的。常用的关联技术有三种:录制中关联、录制后关联、手动关联。
如可以使用web_reg_save_param();方法建立关联。
录制中关联:设置录制前的recording options correlation,可以勾选LR已有的关联规则,也可以新建规则;录制过程中,关联自动在脚本体现。
插入检查点:在脚本中设置检查点函数,将返回值的结果反映在Controller的状态面板上和Analysis统计结果中,由此可以判断数据传递的正确性。如可通过web_reg_find()方法实现。
增加事务:脚本录制后插入或者录制中插入。
l 手动设计场景(Manual Scenario)最大的优点是能够更灵活地按照需求来设计场景模型,使场景能更好地接近用户的真实使用。一般情况下使用手动场景设计方法来设计场景。
l 面向目标场景(Goal Oriented Scenario)则是测试性能是否能达到预期的目标,在能力规划和能力验证的测试过程中经常使用。
定义场景—设置Schedule
在Controller的Scenario Schedule中,可以设置场景的各项计划,如虚拟用户的加载方式、释放策略等。
1.设置场景的基本信息
Schedule Name:设置场景名称。
Schedule by:选择按场景计划或按用户组计划。
Run Mode:
real-world schedule 是真实场景模式,可以通过增加Action来增加多个用户。
basic schedule 是我们以前用的‘经典模式’,只能设置一次负载的上升和下降。
2.设置场景的各类参数:双击Global Schedule中的对应行,可以设置schedule的各类参数。
Initialize:初始化是指运行脚本中的Vuser_init操作,为测试准备Vuser和Load Generator。
Start Vusers:设置场景Vuser加载方式。
Duration:设置场景持续运行的情况。
Stop Vusers:设置场景执行完成后虚拟用户释放的策略。
Start Time:设置场景启动时间。
LR的Analysis模块是分析系统的性能指标的一个主要工具,它能够直接打开场景的执行结果文件,将场景数据信息生成相关的图表进行显示。Analysis集成了强大的数据统计分析功能,允许测试员对图表进行比较和合并等多种操作,分析后的图表能够自动生成需要的测试报告文档。
通常测试报告需要给出“虚拟用户—用户响应时间”的折线图,这个折线图可以通过合并报表的形式生成,过程如下:选中Average Transaction Response Time报表,单击菜单栏的ViewàMerge Graphsà然后选择与Running Vuser图合并,生成的折线图即为“虚拟用户—用户响应时间”。
系统的性能由TPS决定,跟并发用户数没有太多的关系,在同的TPS下,可以由不同的用户数去压(通过加思考时间设置)
系统的最大TPS是一定的(在一个范围内),但是并发用户不一定,可以调整
建议测试的时候,不要设置过长的思考时间,以最坏的情况下对服务器施压,一般情况下,大型系统(业务量,机器多)做压力测试,5000个用户并发就够了,中小型系统做压力测试,1000个用户并发就足够了。
1、C语言参数转web参数
lr_save_string("aaa","param"):将字符串“aaa”或者一个字符串变量,转变成LR的参数{param}
lr_save_int(123,”param”);将数字123,转变为LR的参数param
2、web参数转C语言参数
lr_eval_string("{param}"):取出参数{param}中的值,可嵌套在其他函数里使用
3、字符串处理函数
strcmp:字符串比较函数,若两个值相等,则返回0
strcpy:字符串拷贝函数,可以把一个字符串拷贝到一个字符数组中
strcat:字符串拼接函数,可以把一个字符串拼接到一个字符数组中
4、编码转换函数
lr_convert_string_encoding(lr_eval_string("{msg}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"afterEncodeMsg");
将LR中的参数{msg},从utf-8编码转换为system_local编码(LR本地编码),最后保存到LR的参数{afterEncodeMsg}中
5、参数数组操作
lr_paramarr_random("param_arry"):从参数数组param_arry中随机取一个值,注意param_arry不需要加{}
int size;
size = lr_paramarr_len("param_arry"):获取参数数组param_arry的长度,并保存到C语言的变量size里
int value;
value = lr_paramarr_idx("param_arry",1):获取参数数组param_arry中第1个值,并保存到C语言的变量value里
6、web_url():get接口,一般通过录制生成
7、web_custom_request():post接口,可以测试http接口或者webservice接口
8、web_submit_data():post接口,可以测试文件上传类型接口
9、atoi(lr_eval_string("{param}")):将LR参数{param}转换为数字
10、web_reg_save_param:关联函数,一定要写在请求之前
11、web_reg_find:文本检查点函数,一定要写在请求之前
12、日志函数
- lr_output_message
- lr_error_message
- lr_log_message
13、 web_save_timestamp_param:将当前的时间戳保存成一个参数
14、web_add_cookie函数:新增cookie
15、web_add_header函数,新增header信息
WebService接口
web_custom_request函数,需要新增header(Content-type:text/xml)
Socket接口
1、lrs_create_socket("socket0", "TCP", "RemoteHost=127.0.0.1:8888", LrsLastArg),创建socket连接
2、lrs_send("socket0", "buf0", LrsLastArg),发送buf中的数据
3、lrs_receive("socket0", "buf1", LrsLastArg),接收服务器返回的数据,并保存到一个buf1中
4、lrs_save_param("socket0",NULL,"RecivedData",0,-1),获取服务器返回的数据,并保存到一个参数中RecivedData,最后两个参数,偏移量和length
5、lrs_save_searched_string("socket0",NULL,"RecivedData","LB/BIN=|","RB/BIN=|",1,0,-1),获取服务器返回的数据,并指定了左右边界
过滤出想要的数据,保存到一个参数中,最后三个参数分别为,取值序号、偏移量、保存长度
6、lrs_close_socket("socket0"),关闭链接
7、lrs_set_recv_timeout2:设置结束数据超时时间
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。