转自【http://novasblog.blog.163.com/blog/static/43713514200901342517155/】
下面是电网公司门户网站的测试时将关联功能灵活应用,解决对整个服务器集群进行压力测试的案例。
一、背景及系统基本架构:
测试的环境已经是正式应用的生产环境,系统采用了负载均衡策略。WEB服务中间件用TOMCAT,负载均衡服务中间件用webservice。系统部署方式为:在IP为“10.180.6.100”的服务器上部署数据库服务PostgreSQL、负载均衡服务webservice及一个应用服务TOMCAT,其它四台服务器上只部署有应用服务TOMCAT。
用户端与服务器的交互过程为:用户在IE中输入“http://10.180.6.100”对网站进行访问,这是唯一对外开放的访问地址,也是域名映射到的地址。客户端浏览器访问“http://10.180.6.100”后,会将访问请求发送到负载均衡服务的入口“http://10.180.6.100/banlance”,负载均衡服务会据服务的资源及服务响应情况将负载分发到不同的服务器(当10.180.6.100上部署的TOMCAT服务资源空闲时也可以指定由10.180.6.100提供服务)。
问题:在录脚本时发现录制的脚本中所有的请求及反应资源URL中的IP地址是固定的,这样将造成在场景运行并发时,只能对脚本中录制是负载均衡指定的提供的服务的服务器造成负载,对其它服务器未造成负载,造成在并发用户是所有的用户都只会向这个地址对应的服务器发出请求。也就是脚本的遇到了硬编码问题。录制后的脚本如下:
vuser_init()
{
//客户端访问http://10.180.6.100/,这是对外提供的唯一访问IP地址,也是网站域名射到的地址。
web_url("10.180.6.100",
"URL=http://10.180.6.100/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
web_url("loadbalance", //负载均衡服务对请求据均衡策略进行分发处理
"URL=http://10.180.6.100/loadbalance",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t2.inf",
"Mode=HTML",
LAST);
web_submit_data("render_portlet", //录制此脚本时,负载均衡服务指定10.180.6.113服务器提供服务
"Action=http://10.180.6.113/c/portal/render_portlet",
"Method=POST",
"RecContentType=text/html",
"Referer=http://10.180.6.113/c/portal/layout?p_l_id=PUB.1.68",
"Snapshot=t3.inf",
"Mode=HTML",
ITEMDATA,
"Name=p_l_id", "Value=PUB.1.68", ENDITEM,
"Name=p_p_id", "Value=customizeArticles_INSTANCE_gGtp", ENDITEM,
"Name=p_p_action", "Value=0", ENDITEM,
"Name=p_p_state", "Value=normal", ENDITEM,
"Name=p_p_mode", "Value=view", ENDITEM,
"Name=p_p_col_id", "Value=column-7", ENDITEM,
"Name=p_p_col_pos", "Value=0", ENDITEM,
"Name=p_p_col_count", "Value=1", ENDITEM,
EXTRARES,
"Url=/html/images/pisoft-logo-bg.gif", "Referer=http://10.180.6.113/c/portal/layout?p_l_id=PUB.1.68",
ENDITEM,
LAST);
web_custom_request("depart",
"URL=http://10.180.6.113/depart?type=1&ou=105", //所有请求都只针对10.180.6.113进行,造成了硬编码。
"Method=POST",
"Resource=0",
"RecContentType=text/html",
"Referer=http://10.180.6.113/c/portal/layout?p_l_id=PUB.1.68",
"Snapshot=t4.inf",
"Mode=HTML",
"EncType=",
LAST);
.......
return 0;
}
二、解决方案1
开始对此系统进行性能测试时,考虑到所有的服务器的硬件资源是一样的,所以对一台服务进行压力测试,然后据一台的情况来综合的看整个集群的性能情况。也对负载均衡服务进行性能测试,目的是保证负载均衡服务不是整个集群的瓶颈。
三、目前方案2
对一台服务进行压力测试,然后据一台的情况来综合的看整个集群的性能情况这只能是以点盖全,不能反应整个集群的性能情况,如用户访问时,负载均衡对访问进行均衡处理,而不是直接访问到WEB服务,那这样的响应时间统计是有问题的,不准确的。针对此问题,想到负载均衡服务在进行负载均衡处理时,指定的提供服务的IP地址是据各服务器资源应用情况及均衡策略反馈给客户端的,而一但指定了提供的服务器IP,在其后的访问操作(如登录)就不再改变访问地址。想到应用LR提供的关联操作将负载均衡指定的IP地址进行参数化。
四、优化后的脚本
(如何关联请看“手动关联如何操作”)
vuser_init()
{
web_url("10.180.6.100",
"URL=http://10.180.6.100/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
//关联函数
web_reg_save_param("BanlancePointIP",
"LB=6.",
"RB=/c",
"Search=Headers",
LAST);
web_url("loadbalance",
"URL=http://10.180.6.100/loadbalance",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t2.inf",
"Mode=HTML",
LAST);
//输将取到的IP值输出,便于调试及确定负载均衡服务提供的IP地址
lr_message("Banlance Point IP Is:%s",lr_eval_string("{BanlancePointIP}"));
//将要关联的脚本进行关联操作
web_submit_data("render_portlet",
"Action=http://10.180.6.{BanlancePointIP}/c/portal/render_portlet",
"Method=POST",
"RecContentType=text/html",
"Referer=http://10.180.6.{BanlancePointIP}/c/portal/layout?p_l_id=PUB.1.68",
"Snapshot=t3.inf",
"Mode=HTML",
ITEMDATA,
"Name=p_l_id", "Value=PUB.1.68", ENDITEM,
"Name=p_p_id", "Value=customizeArticles_INSTANCE_gGtp", ENDITEM,
"Name=p_p_action", "Value=0", ENDITEM,
"Name=p_p_state", "Value=normal", ENDITEM,
"Name=p_p_mode", "Value=view", ENDITEM,
"Name=p_p_col_id", "Value=column-7", ENDITEM,
"Name=p_p_col_pos", "Value=0", ENDITEM,
"Name=p_p_col_count", "Value=1", ENDITEM,
EXTRARES,
"URL=/html/images/pisoft-logo-bg.gif", "Referer=http://10.180.6.{BanlancePointIP}/c/portal/layout?
p_l_id=PUB.1.68", ENDITEM,
LAST);
web_custom_request("depart",
"URL=http://10.180.6.{BanlancePointIP}/depart?type=1&ou=105",
"Method=POST",
"Resource=0",
"RecContentType=text/html",
"Referer=http://10.180.6.{BanlancePointIP}/c/portal/layout?p_l_id=PUB.1.68",
"Snapshot=t4.inf",
"Mode=HTML",
"EncType=",
LAST);
.....
return 0;
}
lr_message运行输出结果:
第一次迭代时:Banlance Point IP Is:98
第二次迭代时:Banlance Point IP Is:113
第三次迭代时:Banlance Point IP Is:113
分享到:
相关推荐
所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)数据,转变成是撷取自服务器所送的、动态的、每次都不一样的数据。 举一个常见的例子,刚刚提到有些比较聪明的服务器,这些服务器在每个浏览器第一次...
LR 教程_关联(Correlation)
Loadrunner Webservice压力测试步骤示例,有截图
自动化负载压力测试工具LR培训 包括自动化测试脚本的编写等
LR测试工具操作LR测试工具操作LR测试工具操作
新建 LR手动关联Microsoft Office Word 文档.docx测试用
使用loadrunner12设置代理,抓取app请求,调试好脚本后。使用LR11跑脚本进行压力测试,LR11破解版最大可以6.5W并发
NULL 博文链接:https://solem.iteye.com/blog/1591662
我认为讲解关联比较清楚的文档,至少我自己学过后对关联有了一个比较深刻的了解。真的相当的不错。你一定不会后悔
我搜到的资料,貌似《软件性能测试与LR实战》其中介绍内容的电子版
LR系统讲座之关联函数LR系统讲座之关联函数
新建 LR手动关联Microsoft Office Word 文档.docx
软件性能测试全集 1、LR性能软件基本操作 2、性能测试基本理论 3、参数化 4、脚本设计 5、基准测试流程 6、并发测试流程 7、负载测试流程 8、压力测试流程 9、综合场景测试流程 10、项目实操演练
LR11接口测试实例
lr性能测试基本步骤2.pdflr性能测试基本步骤2.pdf
LoadRunner脚本录制及代理录制方法+问题解决及注意点常用设置,fiddler+lr12生成LR11脚本方法步骤。(全文本人实践整理,解决几乎所有http协议不能录制问题)
loadrunner性能测试的一些列讲解,通过这部资料的学习可以快速掌握loadrunner压力测试的基本流程和重要环节
此文档是LR自带的航空票务系统性能方案设计,适合初学者使用.
使用lr_db_connect对数据库进行性能测试 ---作者云层
本文档主要描述WebGIS综合发布平台性能测试结果以及分析测试结果