




免费预览已结束,剩余12页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
性能经验总结Loadrunner 代码1.1 writelog(写文件)void fcwrite(char * filename ,char * str ) long file; file = fopen(filename, a); fprintf(file,str); fprintf(file,n); fclose(file); char * PassCode = c:PassCode.txt; fcwrite(PassCode,”tester”);1.2 测试https:/*增加安全证书*/ web_set_certificate_ex( CertFilePath=client_cert.pem, /个人公钥 CertFormat=PEM, KeyFilePath=client_key.pem, /个人私钥 KeyFormat=PEM, Password=111111, LAST );1.3 loadrunner测mysql (cvuser)Action()int rc; int db_connection; / 数据库连接int query_result; / 查询结果集 MYSQL_RESchar* result_row; / 查询的数据衕 char *server = localhost;char *user = root;char *password = tester;char *database = test;int port = 3306;int unix_socket = NULL; int flags = 0; / 找到libmysql.dll的所在位置.rc = lr_load_dll(libmysql.dll);if (rc != 0) lr_error_message(Could not load libmysql.dll);lr_abort(); / 创建MySQL对象db_connection = mysql_init(NULL);if (db_connection = NULL) lr_error_message(Insufficient memory);lr_abort(); / 连接到MySQL数据库rc = mysql_real_connect(db_connection, server, user, password, database, port, unix_socket, flags);if (rc = NULL) lr_error_message(%s, mysql_error(db_connection);mysql_close(db_connection);lr_abort(); / 向数据库插入数据/ 此处的 ORDER_ID 是一个参数,简单测试时可以用一个常数代替lr_save_string (lr_eval_string(INSERT INTO test_data (order_id) VALUES (ORDER_ID),paramInsertQuery); rc = mysql_query(db_connection, lr_eval_string(paramInsertQuery); if (rc != 0) lr_error_message(%s, mysql_error(db_connection); mysql_close(db_connection); /lr_abort(); / 从数据库读取一个数据并显示rc = mysql_query(db_connection, SELECT order_id FROM test_data WHERE status IS FALSE LIMIT 1);if (rc != 0) lr_error_message(%s, mysql_error(db_connection);mysql_close(db_connection);lr_abort();query_result = mysql_use_result(db_connection);if (query_result = NULL) lr_error_message(%s, mysql_error(db_connection);mysql_free_result(query_result);mysql_close(db_connection);lr_abort();/ 如果结果集包含多行数据,需要多次调用 mysql_fetch_row 直到返回NULLresult_row = (char *)mysql_fetch_row(query_result); if (result_row = NULL) lr_error_message(Did not expect the result set to be empty);mysql_free_result(query_result);mysql_close(db_connection);lr_abort();/ 保存参数,用于删除这行数据lr_save_string(result_row0, paramOrderID);lr_output_message(Order ID is: %s, lr_eval_string(paramOrderID);mysql_free_result(query_result); / 在事务里更新一行数据,需要用InnoDB引擎rc = mysql_query(db_connection, BEGIN); /启动事务if (rc != 0) lr_error_message(%s, mysql_error(db_connection);mysql_close(db_connection);lr_abort();/ 使用 FOR UPDATE 锁住要更新的数据行rc = mysql_query(db_connection, SELECT order_id FROM test_data WHERE status IS FALSE LIMIT 1 FOR UPDATE); if (rc != 0) lr_error_message(%s, mysql_error(db_connection);mysql_close(db_connection);lr_abort();query_result = mysql_use_result(db_connection);if (query_result = NULL) lr_error_message(%s, mysql_error(db_connection);mysql_free_result(query_result);mysql_close(db_connection);lr_abort();result_row = (char *)mysql_fetch_row(query_result); if (result_row = NULL) lr_error_message(没有查询到结果);mysql_free_result(query_result);mysql_close(db_connection);lr_abort();lr_save_string(result_row0, paramOrderID);lr_output_message(Order ID is: %s, lr_eval_string(paramOrderID);mysql_free_result(query_result);lr_save_string(lr_eval_string(UPDATE test_data SET status=TRUE, date_used=NOW() WHERE order_id=paramOrderID),paramUpdateQuery);rc = mysql_query(db_connection, lr_eval_string(paramUpdateQuery);if (rc != 0) lr_error_message(%s, mysql_error(db_connection);mysql_close(db_connection);lr_abort();rc = mysql_query(db_connection, COMMIT); / 提交事务if (rc != 0) lr_error_message(%s, mysql_error(db_connection);mysql_close(db_connection);lr_abort(); / 再次查找数据,应该为空了,因为前面的事务更新了标志rc = mysql_query(db_connection, SELECT order_id FROM test_data WHERE status IS FALSE LIMIT 1);if (rc != 0) lr_error_message(%s, mysql_error(db_connection);mysql_close(db_connection);lr_abort();query_result = mysql_use_result(db_connection);if (query_result = NULL) lr_error_message(%s, mysql_error(db_connection);mysql_free_result(query_result);mysql_close(db_connection);lr_abort();result_row = (char *)mysql_fetch_row(query_result);if (result_row = NULL) lr_output_message(Result set is empty as expected);mysql_free_result(query_result); else lr_error_message(Did not expect the result set to contain any rows);mysql_free_result(query_result);mysql_close(db_connection);lr_abort(); / 删除数据lr_save_string(lr_eval_string(DELETE FROM test_data WHERE order_id = paramOrderID),paramDeleteQuery);rc = mysql_query(db_connection, lr_eval_string(paramDeleteQuery);if (rc != 0) lr_error_message(%s, mysql_error(db_connection);mysql_close(db_connection);lr_abort(); / 释放MySQL资源mysql_close(db_connection);return 0; 1.4 Loadrunner MMS(media play)loadrunner中的MMS流媒体的脚本很简单.MMS ppmms=0; int rate; / Play a clip mms_play_ex(&ppmms, Welcome, URL=mms:/server/welcome.asf, duration=0, starttime=0,LAST ); mms_pause_ex (&ppmms);rate=mms_get_property_ex(&ppmms, LRMMS_STREAM_RATE) /Resume the playing of the clip mms_resume_ex( &ppmms, 300, 30); 关键是在现在很多应用中,在建的windows2003的系统中 必须在根目录下 添加一个WMLoad.asf的媒体流 (记着这个文件名字一定要写对)。否则回一直报错误 Action.c(3): Error -86801:Host access denied, mms:/0/wmload.asf not available or missing)这里很多人会问WMLoad.asf这个文件是干吗的。话说官方给的是安全机制控制流。具体没做特别分析。可以在根目录下把upgrade.asf这个文件直接更改。1.5 生成结果文件为html 需要取得的输入应预先制作了CSV文件,关在脚本参数配置中定义变量。自动化测试程序关键代码1、生成结果文件(html格式),文件名称为 test _系统时间(%Y%m%d%H%M%S)_虚拟用户编号,并写入测试结果文件的html开始标识CODE:/定义结果文件变量long file;/定义文件名种子(虚拟用户编号)变量char *vusernum;/定义测试结果变量char V_Result1024;vuser_init()/取得文件名种子(虚拟用户编号)vusernum=lr_eval_string (_vuserid);/取得文件种子(系统时间)lr_save_datetime(%Y%m%d%H%M%S, DATE_NOW, now_date);/拼结测试结果文件名称strcpy(V_Result,d:/test/Result/test);strcat(V_Result,lr_eval_string(_now_date);strcat(V_Result,vusernum);strcat(V_Result,.html);/生成并打开测试结果文件file=fopen(V_Result,at+);/写入测试文件头部html信息strcpy(V_Result,IMSI号码预期值返回值结果);fputs(V_Result,file);return 0;2、从参数化文件读取测试参数和预期结果、发送请求并获得服务器返回实际结果,比较测试结果后写入测试结果文件。CODE:Action()/测试结果文本char V_testres1024;/定义返回结果是否正确变量int result;/取得IMSI号码char *V_imsi=lr_eval_string (IMSI);/设置页面接收最大的字节数,该设置应大于服务器返回内容的大小web_set_max_html_param_len(20000);/取得服务器返回内容web_reg_save_param(filecontent,LB=,RB=,Search=Body,LAST);/发送请求web_submit_data(login, Action=http:/host:port/autonavit/search?cmd=clientlogin&termver=5&termcode=30001&termdbver=3 ,Method=POST,RecContentType=text/html,Referer=,Snapshot=t9.inf,Mode=HTTP,ITEMDATA,Name=imsi, Value=IMSI, ENDITEM,LAST);/比较预期值和实际值是否相等 result=strcmp(lr_eval_string(YQJG),lr_eval_string(filecontent);if ( result = 0 )strcpy(V_testres,通过);elsestrcpy(V_testres,失败);strcpy(V_Result,);/写入测试参数strcat(V_Result,V_imsi);strcat(V_Result,);strcat(V_Result,);/写入预期结果strcat(V_Result,lr_eval_string(YQJG);strcat(V_Result,);strcat(V_Result,);/写入实际结果strcat(V_Result,lr_eval_string(filecontent);strcat(V_Result,);strcat(V_Result,);/写入测试是否通过strcat(V_Result, V_testres);strcat(V_Result,);fputs(V_Result,file);return 0;3、写入测试结果文件尾部html信息,关闭文件并结束测试。CODE:vuser_end()/结束并关闭文件strcpy(V_Result,);fputs(V_Result,file);fclose(file);return 0;1.6 loadrunner发送邮件(smtp)脚本实现一、 使用loadrunner的vugen,选择协议为smtp录制的脚本使用loadrunner结合outlook进行发送邮件模拟1、vugen实用协议smtp录制脚本,录制程序是outlook2、脚本录制完成后如下:Action()lr_start_transaction(send);smtp1 = 0;/登录邮件系统smtp_logon_ex(&smtp1, SmtpLogon, URL=smtp:/IP, LogonUser=user, LogonPass=passwd, CommonName=LoadRunner发送者, LAST);/发送邮件smtp_send_mail_ex(&smtp1, SendMail, To=test*.com, From=test1*.com, Subject=?gb2312?B?suLK1NPKvP4=?=, ContentType=multipart/mixed;, MAILOPTIONS, X-Mailer: Microsoft Office Outlook 12.0, Thread-Index: AcmzYhrCIWh73gRGTR6sdM73OK50Iw=, MAILDATA, AttachRawFile=mailnote1_01.dat, LAST);smtp_logout_ex(&smtp1);smtp_free_ex(&smtp1);lr_end_transaction(send,LR_AUTO);return 0;3、在场景中进行调用,可以使用其它机器作为负载机(其他机器不用安装outlook)。较容易。4、存在缺点:附件参数化不太容易实现。因为均为loadrunner录制出来的文件,参数化似乎也不太好用。1.7 字符串个位设置成的整数倍/*将分钟的个位数设置成,变成的整数倍*/char tmp1100;char tmp2100; char *str; int num=0;strcpy(tmp1,lr_eval_string(second);strncpy(tmp2,tmp1,1); strcat(tmp2,5); lr_save_string(tmp2,mtime);lr_output_message(%s,lr_eval_string(mtime);1.8 取字符串中间字符1.8.1 方法(本方法:在loadrunner运行中可能出错误) char * str = 12345 ;char str1=;/假如要从第个字符开始,取个字符串strncpy(str1,(str+1),2);lr_output_message(%sn,str1);输出结果为:Starting iteration 1.Starting action Action.Action.c(13): 23Ending action Action.Ending iteration 1.也是一个很常用的方法。1.8.2 方法 char* StringSub(const char* string,int start,int number) int i = 0; int j = 0; int len = strlen(string); char* temp; if(start len) printf(Start %d is too big than string length %d!n,start,len); return NULL; if(number(len-start+1) printf(Number %d is too big!n,number); number = len - start + 1; if(number0) printf(Number %d is too small!n,number); number = len - start + 1; temp = (char*)malloc(sizeof(char)*(number+1); memset(temp,0,(number+1)*sizeof(char); while(i != number) tempi+ = string(start-1)+j+; tempnumber=0; return temp;1.9 loadrunner socket1.9.1 action()/* * Created by Mercury Interactive Windows Sockets Recorder * * Created on: Thu Nov 10 18:00:32 */#include lrs.hAction()int rc ; int flag = 10 ;int offset = 200; int length = 300; lrs_set_accept_timeout(120,0);lrs_set_connect_timeout(120,0); lrs_create_socket(socket1, TCP, RemoteHost=3:9080, LrsLastArg); lrs_send(socket1, buf1, LrsLastArg); flag=lrs_receive(socket1, buf2, LrsLastArg);if (flag = 0) /lr_error_message(操作成功!);elselr_error_message(操作失败!);lrs_save_param(socket1, NULL, param1, 206, 17);/lr_output_message (param1: %s, lr_eval_string(); rc = strcmp(lr_eval_string(),test_);/lr_error_message(比较结果是: %d,rc);if (rc =0) lr_error_message(比较结果是: 相等的);elselr_error_message(比较结果是: 不相等的);lrs_free_buffer(buf1);lrs_free_buffer(buf2);lrs_close_socket(socket1); return 0;1.9.2 Data.ws;WSRData 2 1send buf1 355GET /umsrest/rs/users/getUserByName?userName=test_ HTTP/1.1rnHost: 3:9080rnUser-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2rnAccept: text/html,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 时间动态课件
- 早稻生产工作小知识培训课件
- 早期教育知识培训总结课件
- 昆虫记文学鉴赏与价值探究:自然科学课程教案
- 黄鹤楼送孟浩然之广陵赏析与创作背景:初中语文课文教案
- 早教课程顾问销售培训
- 员工培训及考核管理协议
- 2025年汽车维修工(汽车空调维修)职业技能鉴定模拟题
- 2025年物流师(初级)职业技能鉴定试卷:物流企业物流服务创新篇
- 早产儿安全知识培训课件
- GB 11122-2025柴油机油
- 2025年广西中考语文试题卷(含答案)
- GB 2716-2018食品安全国家标准植物油
- GB 19572-2004低压二氧化碳灭火系统及部件
- 贸易公司绩效考核分配方案(暂行)1
- 劳动保障监察执法课件
- #20kV设备交接和预防性试验规定
- DB44-T 2197-2019配电房运维服务规范-(高清现行)
- 肩关节运动解剖课件
- 第2课 绘画作品中的劳动者 课件 五年级美术上册 岭南版(共15张PPT)
- 教学比武三测单的绘制课件
评论
0/150
提交评论