Loadrunner使用Oracle 的2Tier协议录制脚本模拟CS系统
测试的案例和注意事项
联系人:qinwenchuang@hotmail
案例介绍:
1.项目背景
XX空间采集处理系统的效率测试。该项目是一个典型的C/S架构的软件。
2.架构简介
Client段部署空间采集系统客户端程序,部署客户端数据库用户存储本地的地图信息,地图信息可以定期从服务器端进行更新。
服务器端部署Oracle数据库和Arcgis地图服务。
测试难点
由于是CS架构,我们日常使用Loadrunner基于Web/http协议无法进行脚本录制工作,而客户提供的客户端只有5台,我们要做100用户的测试,不能借助客户端进行人工操作模拟,必须模拟出客户端和服务器的交互进行大用户量的自动测试。
解决思路:
本次测试点中的关于查询测试点其实与服务器交互的只是Oracle的查询,查询语句可以通过相关手段获取。我们设想通过Loadrunner的相关脚本调用这些sql语句模拟执行查询操作。
处理步骤:
1.捕获语句:我们通过Oralce Enterprise Manager 捕获了SQL语句的全文。
2.验证语句:在Oracle 自带的Sql Plus工具执行这些SQL,验证表明这些
SQL返回的记录数和内容与通过Client端页面执行返回的记录数和内容一致。
3.录制修改Oracle 2Tier协议的脚本(Help手册有Demo)注意录制的程序指
向ORALCE的SQLPLUS的安装路径。
脚本Action的部分内容如下:
lr_rendezvous("1复杂查询");
l r_think_time(5);
l r_start_transaction("1复杂查询");
l rd_ora8_handle_alloc(OraEnv2, STMT, &OraStm16, 0);
l rd_ora8_stmt(OraStm16, "select t.objectname as 对象名, t.objectphase as 类型,
decode(t.iscreated,1,'已标绘','未标绘') as 标绘状态,t.waterprojectname as 所在的对
象,
t.zuoyeyuan as 作业员, ctablename.TABNAMEFATHER AS 所在专项,
t.chkman1 as 第一检查员,t.chkdate1 as 一级检查日期, t.chkman2 as 第二检查
员,t.chkdate2 as 二级检查日期
from waterobjects t left join DDCONFIGQUXIAN on
DDCONFIGQUXIAN.Ncode= substr(t.objectencode,1,6) left join ctablename on
ctablename.tablename=t.objectsource  where t.objectencode
like '%110228%' and t.objectsource like '%Q801%' and t.iscreated=0", 1, 32, 0);//蓝部
分可以直接粘贴我们捕获的语句。
l rd_ora8_exec(OraSvc2, OraStm16, 0, 0, &uliRowsProcessed, 0, 0, 0, 0,
0);
l rd_ora8_bind_col(OraStm16, &OraDef20, 1, &WATERPROJECTNAME_D10, 0, 0);oracle10g客户端安装步骤
l rd_ora8_attr_set(OraDef20, CHARSET_FORM, "2", -1, 0);
l rd_ora8_bind_col(OraStm16, &OraDef21, 2, &_D11, 0, 0);
l rd_ora8_bind_col(OraStm16, &OraDef22, 3, &_D12, 0, 0);
l rd_ora8_fetch(OraStm16, -18, 15, &uliFetchedRows, PrintRow8, 2, 0, //注意这里的15
设置和页面返回的记录数一致。
0);
G RID8(8);
l rd_handle_free(&OraStm16, 0);
l r_end_transaction("1复杂查询",LR_AUTO);
r eturn 0;
问题思考:
虽然通过上述脚本的模拟,我们成功通过Loadrunner 模拟了客户端对Oracle的请求。但是这个案例中我们碰到了一些问题值得我们今后注意。
1.Loadrunner版本问题
Loadrunner 8.0虽然提供了Oracle 2Tier的协议,但是现场验证表明用我们常用的许可证,该版本的2tier无法捕获客户端和Oracle数据库交互的信息。估计是Loadruner8对Oracle 10g版本支持不好导致的,或者是许可证的问题。Loadrunner11完美支持这个协议。
2.脚本修改的注意事项
脚本默认的fetch返回的记录是所有集合,但是客户端采用了分页技术,返回的记录数是前15行,我们要记得修改fetch值,否则脚本
执行的时候返回的所有集合记录,导致脚本响应时间超过实际客户端
的执行时间。脚本中lrd_ora8_fetch(OraStm16, -18, 15,
&uliFetchedRows, PrintRow8, 2, 0, ,注意这里的15设置和页面
返回的记录数一致。
由于本次客户端与Oracle服务器端采用的是长连接模式,所以在脚本编写的时候需要把SQL plus 的连接代码串写在Init段,关闭连接
的代码串写在End段。模拟脚本建立连接,迭代执行sql查询,场景
执行完毕后在关闭连接。长连接测试受限于Oracle Process参数的
限制,实际应用中有固定的连接池设置,并有消息队列的机制。
如果今后我们碰到的客户端与oracle是短连接模式,需要把连接代码串和关闭连接的代码串均写入Action段。模拟每个脚本运行时建
立连接,运行完毕即使释放连接。
3.脚本资源开销
2Tier协议执行时候对测试用机的资源开销较大,主要是内存开销较大,2G内存的机器估计支持200在线。相对于Web协议支持500-1000在线。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。