loadrunner通过使用libmysql.dll完成mysql的测试
【1】需要使用到MySQL的libmysql.dll動態(tài)鏈接庫,因此需要安裝MySQL;注:本地安裝的MySQL最好和MySQL數(shù)據庫服務器上的版本一致;(本次使用的是MYSQL 5.6)
【2】LoadRunner選擇“CVuser”協(xié)議;
?
【3】選擇“File”→“Add Files to script”,將MySQL Server 5.6/lib下的libmysql.dll載入;這樣載入,相比在腳本中采用絕對路徑,可移植性更好;
?
而后可以看到,左側文件已被加入;
?
【4】使用libmysql.dll中的函數(shù),完成腳本;
【5】當Insert SQL語句含有中文時,需要設置字符集為GBK,防止中文亂碼:mysql_query(db_connection,lr_eval_string("SET NAMES gbk"));
完整代碼:
(1)vuser_init.c文件內容
int??rc;? int??db_connection;?//數(shù)據庫連接 int??query_result;?//?查詢結果集?MYSQL_RES char?**?result_row;?//?查詢的數(shù)據行 char?*server?=?"*.*.*.*";???//壓測數(shù)據庫IP地址 char?*user?=?"test";????????//壓測數(shù)據庫登錄名 char?*password?=?"test";????//壓測數(shù)據庫登錄密碼 char?*database?=?"TESTDB";??//壓測數(shù)據庫名 int??port?=?8066;???????????//壓測數(shù)據庫端口號 int??unix_socket?=?NULL;? int??flags?=?1;?vuser_init() {//?找到libmysql.dll的所在位置.如果安裝了mysql,并將dll文件導入了腳本內,可以直接load,不需要路徑rc?=?lr_load_dll("libmysql.dll");if?(rc?!=?0)?{lr_error_message("Could?not?load?libmysql.dll");lr_abort();}//?創(chuàng)建MySQL對象db_connection?=?mysql_init(NULL);if?(db_connection?==?NULL)?{lr_error_message("Insufficient?memory");lr_abort();}//?連接到MySQL數(shù)據庫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();}//若插入數(shù)據中含有中文,則需要設置字符集為GBK,防止中文亂碼mysql_query(db_connection,lr_eval_string("SET?NAMES?gbk"));return?0; }(2)Ation.c文件內容
Action()
{
//參數(shù)化CUS_CODE等參數(shù);
? ? ?lr_save_string(lr_eval_string("INSERT INTO `so_customer` ?(`ID`, `CREATOR`, `CREATE_TIME`, `UPDATE_TIME`, `VERSION`, `SYNC_VERSION`, `REMARK`, `UDF`, `CUS_NAME`, `CUS_CODE`, `CUS_PHONE`, `CUS_FAX`, `CUS_ADDRESS`, `CUS_OWNER_ID`, `CUS_OWNER_NAME`, `CUS_OPERATION_EMPLOYEE_ID`, `CUS_OPERATION_EMPLOYEE_NAME`, `SETTLE_METHOD`, `CONTACT_PERSON`, `Z_CUS_ID`, `STATUS`, `TIME`) "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"VALUES (NULL, '性能測試Creator', '2017-05-11 19:35:58.000000', '2017-05-11 19:35:58.000000', '25', '99990000000001', NULL, NULL, "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"'{CUS_CODE}', '{CUS_CODE}',NULL, '', '', '{ID}', '{NAME}', NULL, '', NULL, '性能測試專用', "
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"'50000003{cus_id}', '1', '2017-05-05 19:13:55');"),?
? ? ? ? ? ? ? ? ? ?"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();?
? ? }?
? ? return 0;
}
(3)vuser_end.c文件內容
vuser_end() {mysql_close(db_connection);?return?0; }備注:
①直接向數(shù)據庫插入數(shù)據庫,建議“Version”字段默認給1,該字段有時是樂觀鎖的實現(xiàn)方式之一,沒有值可能導致服務器報“樂觀鎖”錯誤;
附錄-----留存:
libmysql.dll動態(tài)鏈接庫提供了很多函數(shù)來對數(shù)據庫進行操作,大致可以分為以下幾類:
函數(shù)的具體參數(shù)和使用方法也可以參考與libmysql.dll對于的頭文件mysql.h
第一部分?控制類函數(shù)
mysql_init()初始化MySQL對象
mysql_options()設置連接選項
mysql_real_connect()連接到MySQL數(shù)據庫
mysql_real_escape_string()將查詢串合法化
mysql_query()發(fā)出一個以空字符結束的查詢串
mysql_real_query()發(fā)出一個查詢串
mysql_store_result()一次性傳送結果
mysql_use_result()逐行傳送結果
mysql_free_result()釋放結果集
mysql_change_user()改變用戶
mysql_select_db()改變默認數(shù)據庫
mysql_debug()送出調試信息
mysql_dump_debug_info()轉儲調試信息
mysql_ping()測試數(shù)據庫是否處于活動狀態(tài)
mysql_shutdown()請求數(shù)據庫SHUTDOWN
mysql_close()關閉數(shù)據庫連接
第二部分?信息獲取類函數(shù)
mysql_character_set_name()獲取默認字符集
mysql_get_client_info()獲取客戶端信息
mysql_host_info()獲取主機信息
mysql_get_proto_info()獲取協(xié)議信息
mysql_get_server_info()獲取服務器信息
mysql_info()獲取部分查詢語句的附加信息
mysql_stat()獲取數(shù)據庫狀態(tài)
mysql_list_dbs()獲取數(shù)據庫列表
mysql_list_tables()獲取數(shù)據表列表
mysql_list_fields()獲取字段列表
第三部分?行列類操作函數(shù)
mysql_field_count()獲取字段數(shù)
mysql_affected_rows()獲取受影響的行數(shù)
mysql_insert_id()獲取AUTO_INCREMENT列的ID值
mysql_num_fields()獲取結果集中的字段數(shù)
mysql_field_tell()獲取當前字段位置
mysql_field_seek()定位字段
mysql_fetch_field()獲取當前字段
mysql_fetch_field_direct()獲取指定字段
mysql_frtch_fields()獲取所有字段的數(shù)組
mysql_num_rows()獲取行數(shù)
mysql_fetch_lengths()獲取行長度
mysql_row_tell()獲取當前行位置
mysql_row_seek()行定位
mysql_da ta_seek()行定位
mysql_fetch_row()獲取當前行
第四部分?線程類操作函數(shù)
mysql_list_processes()返回所有線程列表
mysql_thread_id()獲取當前線程ID
mysql_thread_safe()是否支持線程方式
mysql_kill()殺列一個線程
第五部分?出錯處理類函數(shù)
mysql_errno()獲取錯誤號
mysql_error()獲取錯誤信息
第六部分?已過時的函數(shù)
mysql_connect()
mysql_create_db()
mysql_drop_db()
mysql_eof()
mysql_reload()
mysql_escape_string()
本文轉自 小強測試幫 51CTO博客,原文鏈接:http://blog.51cto.com/xqtesting/2065920,如需轉載請自行聯(lián)系原作者
總結
以上是生活随笔為你收集整理的loadrunner通过使用libmysql.dll完成mysql的测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两台机器做互相信任 scp不使用密码
- 下一篇: linux cmake编译源码,linu