Loadrunner测试数据库性能测试SQL语句性能的脚本例子.docx
- 文档编号:9940908
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:10
- 大小:16.12KB
Loadrunner测试数据库性能测试SQL语句性能的脚本例子.docx
《Loadrunner测试数据库性能测试SQL语句性能的脚本例子.docx》由会员分享,可在线阅读,更多相关《Loadrunner测试数据库性能测试SQL语句性能的脚本例子.docx(10页珍藏版)》请在冰点文库上搜索。
Loadrunner测试数据库性能测试SQL语句性能的脚本例子
此代码为Loadrunner8通过CAPI类型的Vuser测试MySQL性能,或者测试sql语句性能的脚本。
这东西很少有人用,网上资料很少,一般测试B/S的很多。
CODE:
viewplaincopytoclipboardprint?
/*需要的表结构如下
CREATETABLE`test_data`(
`order_id`BIGINTUNSIGNEDNOTNULLCOMMENT'Ordernumbers.Mustbeunique.',
`status`BOOLNOTNULLDEFAULT'0'COMMENT'Whetherdatahasbeenusedornot.Avalueof0meansFALSE.',
`date_used`DATETIMENULLCOMMENT'Date/timethatthedatawasused.',
UNIQUE(
`order_id`
)
)ENGINE=innodbCOMMENT='LoadRunnertestdata';
*/
Action()
{
intrc;
intdb_connection;//数据库连接
intquery_result;//查询结果集MYSQL_RES
char**result_row;//查询的数据衕
char*server="localhost";
char*user="root";
char*password="123456";
char*database="test";
intport=3306;
intunix_socket=NULL;
intflags=0;
//找到libmysql.dll的所在位置.
rc=lr_load_dll("C:
\\ProgramFiles\\MySQL\\MySQLServer5.1\\bin\\libmysql.dll");
if(rc!
=0){
lr_error_message("Couldnotloadlibmysql.dll");
lr_abort();
}
//创建MySQL对象
db_connection=mysql_init(NULL);
if(db_connection==NULL){
lr_error_message("Insufficientmemory");
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("INSERTINTOtest_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,"SELECTorder_idFROMtest_dataWHEREstatusISFALSELIMIT1");
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直到返回NULL
result_row=(char**)mysql_fetch_row(query_result);
if(result_row==NULL){
lr_error_message("Didnotexpecttheresultsettobeempty");
mysql_free_result(query_result);
mysql_close(db_connection);
lr_abort();
}
//保存参数,用于删除这行数据
lr_save_string(result_row[0],"paramOrderID");
lr_output_message("OrderIDis:
%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();
}
//使用"FORUPDATE"锁住要更新的数据行
rc=mysql_query(db_connection,"SELECTorder_idFROMtest_dataWHEREstatusISFALSELIMIT1FORUPDATE");
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_row[0],"paramOrderID");
lr_output_message("OrderIDis:
%s",lr_eval_string("{paramOrderID}"));
mysql_free_result(query_result);
lr_save_string(lr_eval_string("UPDATEtest_dataSETstatus=TRUE,date_used=NOW()WHEREorder_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,"SELECTorder_idFROMtest_dataWHEREstatusISFALSELIMIT1");
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("Resultsetisemptyasexpected");
mysql_free_result(query_result);
}else{
lr_error_message("Didnotexpecttheresultsettocontainanyrows");
mysql_free_result(query_result);
mysql_close(db_connection);
lr_abort();
}
//删除数据
lr_save_string(lr_eval_string("DELETEFROMtest_dataWHEREorder_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);
return0;
}
/*需要的表结构如下
CREATETABLE`test_data`(
`order_id`BIGINTUNSIGNEDNOTNULLCOMMENT'Ordernumbers.Mustbeunique.',
`status`BOOLNOTNULLDEFAULT'0'COMMENT'Whetherdatahasbeenusedornot.Avalueof0meansFALSE.',
`date_used`DATETIMENULLCOMMENT'Date/timethatthedatawasused.',
UNIQUE(
`order_id`
)
)ENGINE=innodbCOMMENT='LoadRunnertestdata';
*/
Action()
{
intrc;
intdb_connection;//数据库连接
intquery_result;//查询结果集MYSQL_RES
char**result_row;//查询的数据衕
char*server="localhost";
char*user="root";
char*password="123456";
char*database="test";
intport=3306;
intunix_socket=NULL;
intflags=0;
//找到libmysql.dll的所在位置.
rc=lr_load_dll("C:
\\ProgramFiles\\MySQL\\MySQLServer5.1\\bin\\libmysql.dll");
if(rc!
=0){
lr_error_message("Couldnotloadlibmysql.dll");
lr_abort();
}
//创建MySQL对象
db_connection=mysql_init(NULL);
if(db_connection==NULL){
lr_error_message("Insufficientmemory");
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("INSERTINTOtest_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,"SELECTorder_idFROMtest_dataWHEREstatusISFALSELIMIT1");
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直到返回NULL
result_row=(char**)mysql_fetch_row(query_result);
if(result_row==NULL){
lr_error_message("Didnotexpecttheresultsettobeempty");
mysql_free_result(query_result);
mysql_close(db_connection);
lr_abort();
}
//保存参数,用于删除这行数据
lr_save_string(result_row[0],"paramOrderID");
lr_output_message("OrderIDis:
%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();
}
//使用"FORUPDATE"锁住要更新的数据行
rc=mysql_query(db_connection,"SELECTorder_idFROMtest_dataWHEREstatusISFALSELIMIT1FORUPDATE");
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_row[0],"paramOrderID");
lr_output_message("OrderIDis:
%s",lr_eval_string("{paramOrderID}"));
mysql_free_result(query_result);
lr_save_string(lr_eval_string("UPDATEtest_dataSETstatus=TRUE,date_used=NOW()WHEREorder_id='{paramOrderID}'"),"paramUpdateQuery");
rc=mysql_query(db_connection,lr_eval_string("{paramUpdateQuery}"));
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Loadrunner 测试 数据库 性能 SQL 语句 脚本 例子