打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Loadrunner测试数据库性能,测试SQL语句性能的脚本例子
  1. /*需要的表结构如下 
  2. CREATE TABLE `test_data` ( 
  3.   `order_id` BIGINT UNSIGNED NOT NULL COMMENT 'Order numbers. Must be unique.', 
  4.   `status` BOOL NOT NULL DEFAULT '0' COMMENT 'Whether data has been used or not. A value of 0 means FALSE.', 
  5.   `date_used` DATETIME NULL COMMENT 'Date/time that the data was used.', 
  6.   UNIQUE ( 
  7.     `order_id` 
  8.   ) 
  9. ) ENGINE = innodb COMMENT = 'LoadRunner test data'; 
  10. */  
  11. Action()  
  12. {  
  13.   int rc;   
  14.   int db_connection; // 数据库连接  
  15.   int query_result; // 查询结果集 MYSQL_RES  
  16.   char** result_row; // 查询的数据衕  
  17.    
  18.   char *server = "localhost";  
  19.   char *user = "root";  
  20.   char *password = "123456";  
  21.   char *database = "test";  
  22.   int port = 3306;  
  23.   int unix_socket = NULL;   
  24.   int flags = 0;   
  25.    
  26.   // 找到libmysql.dll的所在位置.  
  27.   rc = lr_load_dll("C://Program Files//MySQL//MySQL Server 5.1//bin//libmysql.dll");  
  28.   if (rc != 0) {  
  29.     lr_error_message("Could not load libmysql.dll");  
  30.     lr_abort();  
  31.   }  
  32.    
  33.   // 创建MySQL对象  
  34.   db_connection = mysql_init(NULL);  
  35.   if (db_connection == NULL) {  
  36.     lr_error_message("Insufficient memory");  
  37.     lr_abort();  
  38.   }  
  39.    
  40.   // 连接到MySQL数据库  
  41.   rc = mysql_real_connect(db_connection, server, user, password, database, port, unix_socket, flags);  
  42.   if (rc == NULL) {  
  43.     lr_error_message("%s", mysql_error(db_connection));  
  44.     mysql_close(db_connection);  
  45.     lr_abort();  
  46.   }  
  47.    
  48.   // 向数据库插入数据  
  49.   // 此处的 {ORDER_ID} 是一个参数,简单测试时可以用一个常数代替  
  50.   lr_save_string (lr_eval_string("INSERT INTO test_data (order_id) VALUES ({ORDER_ID})"),"paramInsertQuery");   
  51.   rc = mysql_query(db_connection, lr_eval_string("{paramInsertQuery}"));  
  52.   if (rc != 0) {  
  53.     lr_error_message("%s", mysql_error(db_connection));  
  54.     mysql_close(db_connection);  
  55.     lr_abort();  
  56.   }  
  57.    
  58.   // 从数据库读取一个数据并显示  
  59.   rc = mysql_query(db_connection, "SELECT order_id FROM test_data WHERE status IS FALSE LIMIT 1");  
  60.   if (rc != 0) {  
  61.     lr_error_message("%s", mysql_error(db_connection));  
  62.     mysql_close(db_connection);  
  63.     lr_abort();  
  64.   }  
  65.   query_result = mysql_use_result(db_connection);  
  66.   if (query_result == NULL) {  
  67.     lr_error_message("%s", mysql_error(db_connection));  
  68.     mysql_free_result(query_result);  
  69.     mysql_close(db_connection);  
  70.     lr_abort();  
  71.   }  
  72.   // 如果结果集包含多行数据,需要多次调用 mysql_fetch_row 直到返回NULL  
  73.   result_row = (char **)mysql_fetch_row(query_result);   
  74.   if (result_row == NULL) {  
  75.     lr_error_message("Did not expect the result set to be empty");  
  76.     mysql_free_result(query_result);  
  77.     mysql_close(db_connection);  
  78.     lr_abort();  
  79.   }  
  80.   // 保存参数,用于删除这行数据  
  81.   lr_save_string(result_row[0], "paramOrderID");  
  82.   lr_output_message("Order ID is: %s", lr_eval_string("{paramOrderID}"));  
  83.   mysql_free_result(query_result);  
  84.    
  85.   // 在事务里更新一行数据,需要用InnoDB引擎  
  86.   rc = mysql_query(db_connection, "BEGIN"); //启动事务  
  87.   if (rc != 0) {  
  88.     lr_error_message("%s", mysql_error(db_connection));  
  89.     mysql_close(db_connection);  
  90.     lr_abort();  
  91.   }  
  92.   // 使用 "FOR UPDATE" 锁住要更新的数据行  
  93.   rc = mysql_query(db_connection, "SELECT order_id FROM test_data WHERE status IS FALSE LIMIT 1 FOR UPDATE");   
  94.   if (rc != 0) {  
  95.     lr_error_message("%s", mysql_error(db_connection));  
  96.     mysql_close(db_connection);  
  97.     lr_abort();  
  98.   }  
  99.   query_result = mysql_use_result(db_connection);  
  100.   if (query_result == NULL) {  
  101.     lr_error_message("%s", mysql_error(db_connection));  
  102.     mysql_free_result(query_result);  
  103.     mysql_close(db_connection);  
  104.     lr_abort();  
  105.   }  
  106.   result_row = (char **)mysql_fetch_row(query_result);   
  107.   if (result_row == NULL) {  
  108.     lr_error_message("没有查询到结果");  
  109.     mysql_free_result(query_result);  
  110.     mysql_close(db_connection);  
  111.     lr_abort();  
  112.   }  
  113.   lr_save_string(result_row[0], "paramOrderID");  
  114.   lr_output_message("Order ID is: %s", lr_eval_string("{paramOrderID}"));  
  115.   mysql_free_result(query_result);  
  116.   lr_save_string(lr_eval_string("UPDATE test_data SET status=TRUE, date_used=NOW() WHERE order_id='{paramOrderID}'"),"paramUpdateQuery");  
  117.   rc = mysql_query(db_connection, lr_eval_string("{paramUpdateQuery}"));  
  118.   if (rc != 0) {  
  119.     lr_error_message("%s", mysql_error(db_connection));  
  120.     mysql_close(db_connection);  
  121.     lr_abort();  
  122.   }  
  123.   rc = mysql_query(db_connection, "COMMIT"); // 提交事务  
  124.   if (rc != 0) {  
  125.     lr_error_message("%s", mysql_error(db_connection));  
  126.     mysql_close(db_connection);  
  127.     lr_abort();  
  128.   }  
  129.    
  130.   // 再次查找数据,应该为空了,因为前面的事务更新了标志  
  131.   rc = mysql_query(db_connection, "SELECT order_id FROM test_data WHERE status IS FALSE LIMIT 1");  
  132.   if (rc != 0) {  
  133.     lr_error_message("%s", mysql_error(db_connection));  
  134.     mysql_close(db_connection);  
  135.     lr_abort();  
  136.   }  
  137.   query_result = mysql_use_result(db_connection);  
  138.   if (query_result == NULL) {  
  139.     lr_error_message("%s", mysql_error(db_connection));  
  140.     mysql_free_result(query_result);  
  141.     mysql_close(db_connection);  
  142.     lr_abort();  
  143.   }  
  144.   result_row = (char **)mysql_fetch_row(query_result);  
  145.   if (result_row == NULL) {  
  146.     lr_output_message("Result set is empty as expected");  
  147.     mysql_free_result(query_result);  
  148.   } else {  
  149.     lr_error_message("Did not expect the result set to contain any rows");  
  150.     mysql_free_result(query_result);  
  151.     mysql_close(db_connection);  
  152.     lr_abort();  
  153.   }  
  154.    
  155.   // 删除数据  
  156.   lr_save_string(lr_eval_string("DELETE FROM test_data WHERE order_id = '{paramOrderID}'"),"paramDeleteQuery");  
  157.   rc = mysql_query(db_connection, lr_eval_string("{paramDeleteQuery}"));  
  158.   if (rc != 0) {  
  159.     lr_error_message("%s", mysql_error(db_connection));  
  160.     mysql_close(db_connection);  
  161.     lr_abort();  
  162.   }  
  163.    
  164.   // 释放MySQL资源  
  165.   mysql_close(db_connection);  
  166.     return 0;  
  167. }  
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
只需四步加快网页浏览速度
16.肿瘤组织和循环DNA基因突变检测的性能验证(verification)及性能确认(Validation)(包括NGS)-李金明
哈哈哈到底有完没完,这魔性能玩上一整天!
新品
豬場的生產目標
Q420B
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服