LoadRunner 测试Oracle数据库性能_第1页
LoadRunner 测试Oracle数据库性能_第2页
LoadRunner 测试Oracle数据库性能_第3页
LoadRunner 测试Oracle数据库性能_第4页
LoadRunner 测试Oracle数据库性能_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、LoadRunner 测试Oracle数据库及Siebel性能本次测试使用的loadrunner 版本为8.1,oracle数据库版本为,各版本的测试方法基本是一样的。这里提供loadrunner 8.1,10000个web用户的license:AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGB还有golba-1000:AEACFSJI-YASEKJJKEAHJD-BCLBR1、 打开loadrunner界面,选择创建脚本2、 选择Oracle (2tier)协议,3、 录制的程序选择sqlplus的路径,如:E:oracleproduct10.2

2、.0db_1BINsqlplus.exe注意我们录制到的操作时Action4、我们输入用户和密码,并向Test表中插入一条数据,然后提交以后输入quit退出。5、LoadRunner会自动的给我们生成脚本,这个脚本默认是采用c语言编写的,我们可以对代码根据自己的要求进行一些修改,比如我们希望每次执行的SQL语句都是不同的,或者我们需要让一个用户重复去执行N条记录以后才退出。6、下面我们对代码进行一下修改,让用户登录sqlplus之后重复执行20次insert操作之后commit;我们每次插入的值有循环次数决定,从1到20;部分脚本如下:Action()int j=0;int i=0;char

3、word50;lrd_init(&InitInfo, DBTypeVersion);lrd_initialize_db(LRD_DBTYPE_ORACLE, 2, 0);lrd_env_init(LRD_DBTYPE_ORACLE, &OraEnv1, 0, 0);lrd_ora8_handle_alloc(OraEnv1, SERVER, &OraSrv1, 0);lrd_ora8_handle_alloc(OraEnv1, SVCCTX, &OraSvc1, 0);lrd_ora8_handle_alloc(OraEnv1, SESSION, &Or

4、aSes1, 0);lrd_ora8_handle_alloc(OraEnv1, SESSION, &OraSes2, 0);lr_think_time(12);lrd_server_attach(OraSrv1, "", -1, 0, 0);lrd_ora8_attr_set_from_handle(OraSvc1, SERVER, OraSrv1, 0, 0);lrd_ora8_attr_set(OraSes1, USERNAME, "scott", -1, 0);lrd_ora8_attr_set(OraSes1, PASSWORD, lr

5、_decrypt("4a8a04d62971759a946f"), -1, 0);lrd_ora8_attr_set_from_handle(OraSvc1, SESSION, OraSes1, 0, 0);lrd_session_begin(OraSvc1, OraSes1, 1, 0, 0);lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm1, 0);lrd_ora8_stmt(OraStm1, "SELECT USER FROM DUAL", 1, 32, 0);lrd_ora8_exec(OraSv

6、c1, OraStm1, 0, 0, &uliRowsProcessed, 0, 0, 0, 0, 0);lrd_ora8_bind_col(OraStm1, &OraDef1, 1, &USER_D1, 0, 0);lrd_ora8_fetch(OraStm1, -1, 1, &uliFetchedRows, PrintRow2, 2, 0, 0);GRID8(2);lrd_handle_free(&OraStm1, 0);lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm2, 0);lrd_ora8_st

7、mt(OraStm2, "BEGIN DBMS_OUTPUT.DISABLE; END;", 1, 32, 0);lrd_ora8_exec(OraSvc1, OraStm2, 1, 0, &uliRowsProcessed, 0, 0, 0, 0, 0);lrd_handle_free(&OraStm2, 0);lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm3, 0);lrd_ora8_stmt(OraStm3, "SELECT ATTRIBUTE,SCOPE,NUMERIC_VALUE,CHAR

8、_VALUE,DATE_VALUE FROM " "SYSTEM.PRODUCT_PRIVS WHERE (UPPER('SQL*Plus') LIKE UPPER" "(PRODUCT) AND (UPPER(USER) LIKE USERID)", 1, 32, 0);lrd_ora8_exec(OraSvc1, OraStm3, 0, 0, &uliRowsProcessed, 0, 0, 0, 0, 0);lrd_ora8_bind_col(OraStm3, &OraDef2, 1, &ATTRI

9、BUTE_D2, 0, 0);lrd_ora8_bind_col(OraStm3, &OraDef3, 2, &SCOPE_D3, 0, 0);lrd_ora8_bind_col(OraStm3, &OraDef4, 3, &NUMERIC_VALUE_D4, 0, 0);lrd_ora8_bind_col(OraStm3, &OraDef5, 4, &CHAR_VALUE_D5, 0, 0);lrd_ora8_bind_col(OraStm3, &OraDef6, 5, &DATE_VALUE_D6, 0, 0);lrd_ora

10、8_fetch(OraStm3, -0, 1, &uliFetchedRows, 0, 2, 0, 0);lrd_handle_free(&OraStm3, 0);lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm4, 0);lrd_ora8_stmt(OraStm4, "SELECT CHAR_VALUE FROM SYSTEM.PRODUCT_PRIVS WHERE (UPPER" "('SQL*Plus') LIKE UPPER(PRODUCT) AND (UPPER(USER)

11、LIKE " "USERID) OR (USERID = 'PUBLIC') AND (UPPER(ATTRIBUTE) = " "'ROLES')", 1, 32, 0);lrd_ora8_exec(OraSvc1, OraStm4, 0, 0, &uliRowsProcessed, 0, 0, 0, 0, 0);lrd_ora8_bind_col(OraStm4, &OraDef7, 1, &CHAR_VALUE_D7, 0, 0);lrd_ora8_fetch(OraStm4, -0

12、, 1, &uliFetchedRows, 0, 2, 0, 0);lrd_handle_free(&OraStm4, 0);lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm5, 0);lrd_ora8_stmt(OraStm5, "BEGIN DBMS_APPLICATION_INFO.SET_MODULE(:1,NULL); END;", 1, 32, 0);lrd_assign(&P1D8, "SQL*Plus", 0, 0, 0);lrd_ora8_bind_placehol

13、der(OraStm5, &OraBnd1, "1", &P1D8, LRD_BIND_BY_POS, 0, 0);lrd_ora8_exec(OraSvc1, OraStm5, 1, 0, &uliRowsProcessed, 0, 0, 0, 0, 0);GRID0(4);lrd_handle_free(&OraStm5, 0);lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm6, 0);lrd_ora8_stmt(OraStm6, "SELECT DECODE('A

14、9;,'A','1','2') FROM DUAL", 1, 32, 0);lrd_ora8_bind_col(OraStm6, &OraDef8, 1, &DECODE_A_A_1_2_D9, 0, 0);lrd_ora8_exec(OraSvc1, OraStm6, 1, 0, &uliRowsProcessed, 0, 0, 0, 0, 0);lrd_ora8_print(OraStm6, PrintRow6);GRID0(6);lrd_handle_free(&OraStm6, 0);lrd_or

15、a8_commit(OraSvc1, 0, 0);lrd_ora8_commit(OraSvc1, 0, 0);lr_think_time(25);for(j=1;j<=20;j+)i=j; /如果需要随机的插入数据的话使用i=rand();itoa(i, word, 10);lr_save_string (word ,"para");lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm7, 0);/lrd_ora8_stmt(OraStm7, "insert into test values(12,'a&

16、#39;)", 1, 32, 0);lrd_ora8_stmt(OraStm7, "insert into test values(para,'a')", 1, 32, 0);lrd_ora8_exec(OraSvc1, OraStm7, 1, 0, &uliRowsProcessed, 0, 0, 0, 0, 0);lrd_handle_free(&OraStm7, 0);lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm8, 0);lrd_ora8_stmt(OraStm8, &qu

17、ot;commit", 1, 32, 0);lrd_ora8_exec(OraSvc1, OraStm8, 1, 0, &uliRowsProcessed, 0, 0, 0, 0, 0);lrd_handle_free(&OraStm8, 0);lrd_session_end(OraSvc1, OraSes1, 0, 0);lrd_server_detach(OraSrv1, 0, 0);lrd_handle_free(&OraEnv1, 0);return 0;其中的红色部分是修改或添加的部分,最后可以执行一下,效果为:7、下面来运行负载添加我们录制的脚本8

18、、我们测试100个用户登录到数据库,重复的向test表中插入一条由随机数组成的记录,并提交和退出。这是运行后的结果以及其他相关信息。然后到数据库里面查看一下,应该是插入的记录数为:100X20=20009、然后在结果-分析结果里面分析相关数据。得出相关结论。10、下面说一下为什么我们loadrunner测试的时候需要插入随机数或者其他的不重复的数据。先来看一下数据库硬解析的数量。以sys登录,执行select * from v$sysstat where name ='parse count (hard)'查询此时的value为1746,然后我们执行重复200次的insert

19、into test values(12,'a') 然后再查询硬解析的结果为:现在是1749,没有多大的差别,其值本应该为1747,但可能由于oracle执行了其他的语句,这说明如果我们执行的是同一条SQL的话,在 测试中无法模拟真实环境的压力,因为真实环境中每个用户执行的SQL语句都可能不一样。(parse count (hard):在shared pool中解析调用的未命中次数。当sql语句执行并且该语句不在shared pool或虽然在shared pool但因为两者存在部分差异而不能被使用时产生硬解析。如果一条sql语句原文与当前存在的相同,但查询表不同则认为它们是两条不

20、同语句,则硬解析即会发生。硬解析会带来cpu和资源使用的高昂开销,因为它需要oracle在shared pool中重新分配内存,然后再确定执行计划,最终语句才会被执行。)下面我们执行200条不同SQL,其最后的结果为1950,所以使用随机数来产生sql语句并执行的话应该可以比较良好的模拟真实环境。LoadRunner 测试Siebel性能1、本次需要测试的场景是登陆Siebel web应用,创建一个客户,然后退出。协议选择Siebel-Web,特别作一下说明:从上图中可以看到有一个Siebel-Oracle 协议,其实我一直想知道这个协议是干什么用的,使用什么程序来录制脚本,但是我在网上没有查

21、到任何相关的资料。还请知道的高手指教。不过在LoadRunner的最新版本LoadRunner 9.5上面我并没有找到Siebel-Oracle协议。LoadRunner 9.5的协议截图如下:2、录制好脚本之后,我们需要对脚本进行一下改造,我现在需要每次创建的客户的名称是随机的,而且我在回放脚本的时候添加了部分代码,方便的查看到程序运行的时间。部分代码如下:(红色部分为我所修改的) int timex(int time_x,int re) re0 = time_x/(1000*60*60*24); re1 = time_x/(1000*60*60); re2 = time_x/(1000*6

22、0); re3 = time_x/1000; re4 = time_x%1000; return 0; Action() int j;int i;char word50;long a,b; int time_x; int ret5;a = clock();for(j=1;j<2;j+) i=rand();itoa(i, word, 10); lr_save_string (word ,"para"); lr_output_message(word);web_set_max_html_param_len("1024");web_url("s

23、ervice_chs", "URL=34:7777/service_chs", "TargetFrame=", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t1.inf", "Mode=HTML", LAST);/* Registering parameter(s) from source task id 5/ Siebel_sn

24、_cookie3 = "TZARmNMKjOTPxa1RoRtQSSMkGLOXvzkb4oIIlP6ETEHlGdHuse27xQ_"/ */web_reg_save_param("Siebel_sn_cookie3", "LB/IC=_sn=", "RB/IC=;", "Ord=1", "Search=headers", "RelFrameId=1", LAST);web_url("start.swe", "URL=htt

25、p:/34:7777/service_chs/start.swe?SWECmd=Start&SWEHo=34", "TargetFrame=", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t2.inf", "Mode=HTML", LAST);.由于篇幅,以下省略了,.lr_think_time(23);web_submit_da

26、ta("start.swe_19", "Action=34:7777/service_chs/start.swe", "Method=POST", "TargetFrame=", "RecContentType=text/html", "Referer=", "Snapshot=t21.inf", "Mode=HTML", ITEMDATA, "Name=s_1_1_37_0", &

27、quot;Value=", ENDITEM, "Name=SWEVI", "Value=", ENDITEM, "Name=SWERowId", "Value=1-Siebel_row_id73", ENDITEM, "Name=SWEC", "Value=Siebel_SWECount", ENDITEM, "Name=SWEMethod", "Value=WriteRecord", ENDITEM, "Name=

28、SWEReqRowId", "Value=1", ENDITEM, "Name=SWERPC", "Value=1", ENDITEM, "Name=s_1_1_70_0", "Value=", ENDITEM, "Name=s_1_1_71_0", "Value=ææ", ENDITEM, "Name=s_1_1_61_0", "Value=", ENDITEM, "Name

29、=SWEApplet", "Value=Account Entry Applet", ENDITEM, "Name=SWEActiveApplet", "Value=Account Entry Applet", ENDITEM, "Name=s_1_1_51_0", "Value=N", ENDITEM, "Name=s_1_1_62_0", "Value=", ENDITEM, "Name=SWEView", "V

30、alue=Account List View", ENDITEM, "Name=s_1_1_41_0", "Value=", ENDITEM, "Name=s_1_1_63_0", "Value=", ENDITEM, "Name=SWECmd", "Value=InvokeMethod", ENDITEM, "Name=s_1_1_65_0", "Value=家庭&q

31、uot;, ENDITEM, "Name=SWETS", "Value=SiebelTimeStamp", ENDITEM, "Name=SWEActiveView", "Value=Account List View", ENDITEM, /"Name=s_1_1_35_0", "Value=LoadRunner Test", ENDITEM, "Name=s_1_1_35_0", "Value=para", ENDITEM, &qu

32、ot;Name=SWEP", "Value=", ENDITEM, "Name=s_1_1_69_0", "Value=", ENDITEM, "Name=SWERowIds", "Value=", ENDITEM, LAST);Siebel_SWECount_var += 1;lr_save_int(Siebel_SWECount_var, "Siebel_SWECount");lr_think_time(7);web_submit_data("star

33、t.swe_20", "Action=34:7777/service_chs/start.swe", "Method=POST", "TargetFrame=", "RecContentType=text/html", "Referer=", "Snapshot=t22.inf", "Mode=HTML", "EncodeAtSign=YES", ITEMDATA, "Name=SW

34、EC", "Value=Siebel_SWECount", ENDITEM, "Name=SWEMethod", "Value=BatchCanInvoke", ENDITEM, "Name=SWERPC", "Value=1", ENDITEM, "Name=SWEActiveApplet", "Value=Account Entry Applet", ENDITEM, "Name=SWECmd", "Value=

35、InvokeMethod", ENDITEM, "Name=SWEIPS", "Value=0*0*7*0*0*3*0*2*#40*2*#00*5*SWEJI5*false2*#10*6*SWEDIC4*true2*#20*2*#30*", ENDITEM, "Name=SWEActiveView", "Value=Account List View", ENDITEM, "Name=SWEService", "Value=SWE Command Manager",

36、 ENDITEM, LAST);web_save_timestamp_param("SiebelTimeStamp", LAST);web_url("start.swe_21", "URL=34:7777/service_chs/start.swe?SWECmd=Logoff&SWETS=SiebelTimeStamp&SWEPreLd=1&SWEClearLC=1", "TargetFrame=", "Resource=0", &quo

37、t;RecContentType=text/html", "Referer=", "Snapshot=t23.inf", "Mode=HTML", LAST); b = clock(); time_x = (int)(b-a); lr_message("间隔时间为:%d 毫秒",time_x);return 0;执行脚本。可以方便的看到执行时间为12266毫秒。4、 后续的测试和前面讲的测试oracle类似。不再累述。Loadrunner 监控Linux服务器资源1、 为了使Loadrunner能够监控Linux服务器的资源,必须保证有如下的服务包被安装,rsh-0.17-25.4.i386.rpm rsh-server-0.17-25.4.i386.rpmrpc.rstatd-4.0.1.tar.gz 当然这个版本不一定非要一至,前两个安装包一般在光盘里面有,后一个可以在 下载到。2、 安装:rpm ivh rsh-0.17-25.4.i386.rpm rsh-server-0.17-2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论