標籤:
LoadRunner測試資料庫是類比用戶端去串連資料庫伺服器,因此,需要協議(或者說驅動的支援)。LoadRunner本身直接支援Oracle、SqlServer資料庫,這兩個資料庫直接選擇相應的協議就可以錄製指令碼。而MySql資料庫只能利用ODBC協議來錄製(編寫)指令碼,所以必須要MySql的ODBC驅動,和支援ODBC的查詢分析器(錄指令碼需要,自己編寫就不需要)。
1、首先要安裝MySql的ODBC驅動,MyODBC 3.51.11 WIN。
2、從“控制台”開啟“資料來源ODBC”,如果沒有找到(我的電腦上就沒有找到)。到案頭,建立一個捷徑,目標位置:%SystemRoot%\system32\odbcad32.exe。
3、開啟ODBC管理程式,添加的驅動為“MySQL ODBC 3.51 Driver”,然後填寫一些ip、使用者名稱、密碼之類的,測試一下就可以了。(這一步其實是非必須的,如果寫串連串,就不需要,如果要用DNS資料庫名,就需要)
4、安裝一個查詢分析器,這個查詢分析器必須是支援ODBC 的(這是必須的,否則錄不上),這很不好找。我找了一個,還不好用,叫“通用資料庫查詢分析器”。http://www.onlinedown.net/soft/31366.htm。
5、啟動LoadRunner,Create Scripts;Application type選擇Win32 Applications;Program record選擇第4步的查詢分析器位置,記得查詢分析器選擇“ODBC”,才能錄得上;錄完了,運行一下是否正常。
6、Run Load Tests的時候,如果失敗,看看License是否支援,用global-100的License就可以了。
錄製的指令碼是慘不忍睹(又臭又長),所以,我試著手工編寫了一個簡單的,每行都有注釋,如果要進階的,請參考LoadRunner的協助文檔。
view plaincopy to clipboardprint?
#include "lrd.h" Action() { static LRD_INIT_INFO InitInfo = {LRD_INIT_INFO_EYECAT}; static LRD_DEFAULT_DB_VERSION DBTypeVersion[] = { {LRD_DBTYPE_ODBC, LRD_DBVERSION_ODBC_30}, {LRD_DBTYPE_NONE, LRD_DBVERSION_NONE} }; static LRD_CONTEXT FAR * Ctx1; static LRD_CONNECTION FAR * Con1; static LRD_CURSOR FAR * Csr1; //上面的定義的代碼如果錄製指令碼,在vdf.h中就有定義,同時還有一些其他檔案 //如果手寫指令碼,則需要手工添加,主要是定義各種變數 //查詢行數 unsigned long count=0; //初始 lrd_init(&InitInfo, DBTypeVersion); //開啟上下文 lrd_open_context(&Ctx1, LRD_DBTYPE_ODBC, 0, 0, 0); //申請串連的記憶體 lrd_alloc_connection(&Con1, LRD_DBTYPE_ODBC, Ctx1, 0 /*Unused*/, 0); //開啟串連,注意DRIVER就是上面安裝的 lrd_open_connection(&Con1, LRD_DBTYPE_ODBC, "", "","", "DRIVER=MySQL ODBC 3.51 Driver;UID=root;PWD=123456;SERVER=192.168.1.99;DATABASE=TestDB", Ctx1, 1, 0); //開啟遊標 lrd_open_cursor(&Csr1, Con1, 0); //Sql語句,注意1代表的意思是,立馬執行 lrd_stmt(Csr1, "select column1 from table1 where colum1 = 1", -1, 1, 0 /*None*/, 0); //統計行數到count變數中 lrd_row_count(Csr1, &count, 0); //列印訊息 lr_message("count= %d",count); //先關閉遊標 lrd_close_cursor(&Csr1, 0); //再關閉串連 lrd_close_connection(&Con1, 0, 0); //釋放串連,和alloc相呼應,否則有記憶體泄露 lrd_free_connection(&Con1, 0 /*Unused*/, 0); //再關閉上下文 lrd_close_context(&Ctx1, 0, 0); //完畢,返回0 return 0; } #include "lrd.h"Action(){static LRD_INIT_INFO InitInfo = {LRD_INIT_INFO_EYECAT};static LRD_DEFAULT_DB_VERSION DBTypeVersion[] ={ {LRD_DBTYPE_ODBC, LRD_DBVERSION_ODBC_30}, {LRD_DBTYPE_NONE, LRD_DBVERSION_NONE}};static LRD_CONTEXT FAR * Ctx1;static LRD_CONNECTION FAR * Con1;static LRD_CURSOR FAR * Csr1;//上面的定義的代碼如果錄製指令碼,在vdf.h中就有定義,同時還有一些其他檔案//如果手寫指令碼,則需要手工添加,主要是定義各種變數//查詢行數unsigned long count=0;//初始lrd_init(&InitInfo, DBTypeVersion);//開啟上下文lrd_open_context(&Ctx1, LRD_DBTYPE_ODBC, 0, 0, 0);//申請串連的記憶體lrd_alloc_connection(&Con1, LRD_DBTYPE_ODBC, Ctx1, 0 /*Unused*/, 0);//開啟串連,注意DRIVER就是上面安裝的lrd_open_connection(&Con1, LRD_DBTYPE_ODBC, "", "","", "DRIVER=MySQL ODBC 3.51 Driver;UID=root;PWD=123456;SERVER=192.168.1.99;DATABASE=TestDB", Ctx1, 1, 0);//開啟遊標lrd_open_cursor(&Csr1, Con1, 0); //Sql語句,注意1代表的意思是,立馬執行lrd_stmt(Csr1, "select column1 from table1 where colum1 = 1", -1, 1, 0 /*None*/, 0);//統計行數到count變數中lrd_row_count(Csr1, &count, 0);//列印訊息lr_message("count= %d",count);//先關閉遊標lrd_close_cursor(&Csr1, 0);//再關閉串連lrd_close_connection(&Con1, 0, 0);//釋放串連,和alloc相呼應,否則有記憶體泄露lrd_free_connection(&Con1, 0 /*Unused*/, 0);//再關閉上下文lrd_close_context(&Ctx1, 0, 0);//完畢,返回0return 0;}
寫完了,自己運行一下可以查看日誌如下:
------------------------------------------------------------------------------
Starting iteration 1.
Starting action Action.
Action.c(8): lrd_open_connection: User="", Server=""
Action.c(11): lrd_stmt: select column1 from table1 where colum1 = 1;
count= 1
Action.c(16): lrd_close_connection: User="", Server=""
Ending action Action.
------------------------------------------------------------------------------
count = 1表示查詢成功了
==========================================================================
LoadRunner利用ODBC編寫MySql指令碼(轉)