loadrunner 資料庫測試指令碼
Action()
{
int rc;
int db_connection; // 資料庫連線
int query_result; // 查詢結果集 MYSQL_RES
char** result_row; // 查詢的資料衕
char *server = "192.168.1.142";
char *user = "root";
char *password = "123456";
char *database = "test";
int port = 3306;
int unix_socket = NULL;
int flags = 0;
// 找到libmysql.dll的所在位置.
rc = lr_load_dll("C://Program Files//MySQL//MySQL Server 5.5//lib//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 直到返回NULL
result_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_row[0], "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_row[0], "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;
}
{
int rc;
int db_connection; // 資料庫連線
int query_result; // 查詢結果集 MYSQL_RES
char** result_row; // 查詢的資料衕
char *server = "192.168.1.142";
char *user = "root";
char *password = "123456";
char *database = "test";
int port = 3306;
int unix_socket = NULL;
int flags = 0;
// 找到libmysql.dll的所在位置.
rc = lr_load_dll("C://Program Files//MySQL//MySQL Server 5.5//lib//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 直到返回NULL
result_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_row[0], "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_row[0], "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;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8078021/viewspace-1064310/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- loadrunner12.6快速實戰之透過抓包來獲取app測試指令碼APP指令碼
- 資料庫備份指令碼資料庫指令碼
- PYTHON測試指令碼Python指令碼
- 【JDBC】java連線池模擬測試連線Oracle資料庫指令碼參考JDBCJavaOracle資料庫指令碼
- LoadRunner測試結果分析(1)
- 使用Loadrunner進行效能測試
- 一鍵獲取測試指令碼,輕鬆驗證“TSBS 時序資料庫效能基準測試報告”指令碼資料庫測試報告
- 呼叫中心資料入庫指令碼指令碼
- MySQL匯出資料庫指令碼MySql資料庫指令碼
- 大資料測試與 傳統資料庫測試大資料資料庫
- 資料庫測試指南資料庫
- mssql生成資料庫字典指令碼-MarkDownSQL資料庫指令碼
- Flyway版本化管理資料庫指令碼資料庫指令碼
- PHP 單元測試與資料庫測試PHP資料庫
- 濤思資料 TDengine 徵稿— 利用python指令碼做TDengine效能測試Python指令碼
- 2.4. 測試資料庫資料庫
- 軟體測試學習教程——LoadRunner實現介面測試
- 【SCRIPT】Oracle資料庫基本資訊收集指令碼Oracle資料庫指令碼
- [資料庫]000 - ?Sysbench 資料庫壓力測試工具資料庫
- MySQL資料庫備份的shell指令碼MySql資料庫指令碼
- oracle資料庫使用rman備份指令碼Oracle資料庫指令碼
- [python] request 介面測試自動化指令碼轉化為 [locust] 效能測試指令碼Python指令碼
- Android 自動化測試及效能資料採集的 Python 指令碼AndroidPython指令碼
- Oracle 閃回資料庫測試Oracle資料庫
- PostgreSQL:資料庫連結測試SQL資料庫
- oracle測試資料庫啟用Oracle資料庫
- MySQL 資料庫生成 10000 條測試資料MySql資料庫
- 測試面試(三)--資料庫與linux面試資料庫Linux
- 介面測試(apipost、jmeter和python指令碼)——測試工具APIJMeterPython指令碼
- Go 單元測試之Mysql資料庫整合測試GoMySql資料庫
- [20190416]exclusive latch測試指令碼.txt指令碼
- iOS17 效能測試指令碼iOS指令碼
- [20190423]oradebug peek測試指令碼.txt指令碼
- oracle 資料庫徹底清除目錄指令碼Oracle資料庫指令碼
- Bash 指令碼安裝 MySQL-8.0.20 資料庫指令碼MySql資料庫
- 通過shell指令碼批量操作mysql資料庫指令碼MySql資料庫
- Liunx備份mysql資料庫的shell指令碼MySql資料庫指令碼
- 生產資料庫、開發資料庫、測試資料庫中的資料的區分資料庫
- 【Mysql】資料庫索引,百萬資料測試索引效果MySql資料庫索引