LoadRunner 測試 Mysql

準備文件

1. 下載 MySQL LoadRunner libraries。mysql

下載地址:http://files.cnblogs.com/files/xiaoxitest/MySQL_LoadRunner_libraries.zipsql

2. 能夠看到 MySQL LoadRunner libraries 裏面有兩個文件夾:bin 以及 include。數據庫

將 bin 文件夾裏的文件拷貝到 LoadRunner 安裝路徑下的 bin 文件夾下。數組

將 include 文件夾裏的文件所有拷貝到 LoadRunner 安裝路徑下的 include 文件夾下。函數

LoadRunner安裝路徑通常都是 C:\Program Files (x86)\HP\LoadRunner 或者 C:\Program Files \HP\LoadRunner測試

準備測試用的數據庫

新建test數據庫spa

在test數據庫下新建表格 people:包含以下3個字段。code

id須要勾選自動遞增。blog

image

簡單版

1. 編寫 vuser_init文件

//引入mysql lib的h文件
#include "Ptt_Mysql.h"

MYSQL *Mconn;

vuser_init()
{
    #define MYSQLSERVER "xx.xx.xx.xx"//mysql的ip
    #define MYSQLUSERNAME "root"//用戶名
    #define MYSQLPASSWORD "xxxxxx"//密碼
    #define MYSQLDB    "test"//數據庫
    #define MYSQLPORT "3306"//端口 
    
    //引入libmysql的dll
    lr_load_dll("libmysql.dll");

    //鏈接mysql
    Mconn = lr_mysql_connect(MYSQLSERVER, MYSQLUSERNAME, MYSQLPASSWORD, MYSQLDB, atoi(MYSQLPORT));

    return 0;
}

Ptt_MySql.h 這個文件是剛剛拷貝到LoadRunner的include文件夾裏面的文件之一。ip

能夠打開看到 Ptt_MySql.h  這個文件主要包含3個函數:lr_mysql_connect 、lr_mysql_query、lr_mysql_disconnect。這都是咱們後邊要用到的,因此拿出來放到 vuser_init() 初始化函數以前 。

而後就是定義鏈接數據庫所須要的東西:IP、用戶名、密碼等。經過下面的 lr_mysql_connect()函數來鏈接數據庫。

鏈接數據庫前,須要加載  libmysql.dll 文件。

2. 編寫action文件

Action()
{
    
    char chQuery[128];
    int result;

    //把字符存到chQuery[]中
    sprintf(chQuery, "INSERT INTO people (username,password) VALUES('user11','111111')");

    //執行sql
    result = lr_mysql_query(Mconn, chQuery);

    if(result == 0){
        lr_output_message("insert 成功");
    }
    else{
        lr_error_message("insert 失敗");
    }

    return 0;
}

這裏進行的是插入操做。

數據庫常見的增刪改查,這裏只須要把 sprintf裏面的字符串替換掉就能夠。

3. 編寫vuser_end文件

vuser_end()
{
    //關閉數據庫鏈接
    lr_mysql_disconnect(Mconn);
    return 0;
}

這裏就是關閉數據庫鏈接。

複雜版

1. 編寫 vuser_init文件

這裏添加了一些文件是否存在的驗證,以及屢次鏈接Mysql 的嘗試。

#include "Ptt_Mysql.h"
#include "mysql.h"
#include "mysql_com.h"
#include "mysql_time.h"
#include "mysql_version.h"
#include "typelib.h"
#include "my_list.h"
#include "my_alloc.h"

#define MYSQLSERVER "localhost"
#define MYSQLUSERNAME "root"
#define MYSQLPASSWORD "xxxxxx"
#define MYSQLDB    "test"
#define MYSQLPORT "3306"

int statu=1;
MYSQL *Mconn;
int conn_fail=0, conn_iter=0;

vuser_init()
{
    // Load libmysql.dll
    int rc;
    rc = lr_load_dll("libmysql.dll");
    if (rc != 0) {
        lr_error_message("Could not load libmysql.dll");
        lr_abort();
    }

    lr_start_transaction("mysql_connection");

    //Initialise MySQL
    if(!(Mconn = mysql_init(NULL)))
        {
        lr_message("Error -1: Cannot initialize MySQL - %s", mysql_error(Mconn));
        statu = 0;
        lr_end_transaction("mysql_connection", LR_FAIL);
        }

    do{
        // Connect to database
        if (!mysql_real_connect(Mconn, MYSQLSERVER, MYSQLUSERNAME, MYSQLPASSWORD, MYSQLDB, atoi(MYSQLPORT), NULL, 0))
            {
                conn_fail = -2;
                conn_iter++;
                sleep(100);
            }
            else
                conn_fail = 0;
        }
    while(conn_fail < 0 && conn_iter < 10); 

    if (conn_fail < 0) 
        { 
            lr_message("Error : %s", mysql_error(Mconn)); 
            statu = 0; 
            lr_end_transaction("mysql_connection", LR_FAIL);
            return -2;
        } 
    else 
        { 
            lr_message("MySql - Good Connection"); 
            statu = 1; 
            lr_end_transaction("mysql_connection", LR_PASS);
        } 
    
    return 0; 

}

2. 編寫 Action_insert 文件

這裏嘗試向 people表格插入一條數據。

能夠看到這裏使用的數據是直接從 參數文件讀取的,因此須要事先創建好參數 user 以及 pwd。

Action_insert()
{
    if(statu)
        { 
            char chQuery[1024];
            int status=0;

            lr_start_transaction("mysql_insert"); 

            lr_output_message("The parameter user is : %s",lr_eval_string("{user}"));
            lr_output_message("The parameter password is : %s",lr_eval_string("{pwd}"));
            sprintf(chQuery, "INSERT INTO people (username,password) VALUES('%s','%s')",lr_eval_string("{user}"),lr_eval_string("{pwd}")); 
            
            status = lr_mysql_query(Mconn, chQuery);

            if(status!=0)
                {
                    lr_end_transaction("mysql_insert",LR_FAIL ); 
                }
            else
                { 
                    lr_end_transaction("mysql_insert", LR_PASS); 
                } 
          } 
    return 0; 
}

3. 編寫 Action_update 文件

Action_update()
{
    if(statu)
        { 
            char chQuery[1024];
            int status=0;

            lr_start_transaction("mysql_update"); 

            lr_output_message("The parameter user is : %s",lr_eval_string("{user}"));
            lr_output_message("The parameter password is : %s",lr_eval_string("{pwd}"));
            sprintf(chQuery,"UPDATE people SET password = '123456789' WHERE username='%s'",lr_eval_string ("{user}")); 

            status = lr_mysql_query(Mconn, chQuery);

            if(status!=0)
                {
                    lr_end_transaction("mysql_update",LR_FAIL ); 
                }
            else
                { 
                    lr_end_transaction("mysql_update", LR_PASS); 
                } 
          } 
    return 0; 
}

4. 編寫 Action_select 文件

查詢出來的結果保存在多維數組中,能夠使用 row[][].cell 來獲取數據。

Action_select()
{
    if(statu)
        { 
            char chQuery[1024];
            int status=0;

            lr_start_transaction("mysql_select"); 

            lr_output_message("The parameter user is : %s",lr_eval_string("{user}"));
            lr_output_message("The parameter password is : %s",lr_eval_string("{pwd}"));
            sprintf(chQuery,"SELECT username,password FROM people WHERE username='%s'",lr_eval_string("{user}")); 
            
            status = lr_mysql_query(Mconn, chQuery);

            lr_save_string(row[0][0].cell,"user1");
            lr_save_string(row[1][0].cell,"pw1");

            lr_output_message(lr_eval_string("User:{user1}"));
            lr_output_message(lr_eval_string("Password:{pw1}"));

            if(status!=0)
                {
                    lr_end_transaction("mysql_select",LR_FAIL ); 
                }
            else
                { 
                    lr_end_transaction("mysql_select", LR_PASS); 
                } 
          } 
    return 0; 
}

5. 編寫 Action_delete 文件

Action_delete()
{
    if(statu)
        { 
            char chQuery[1024];
            int status=0;

            lr_start_transaction("mysql_delete"); 

            lr_output_message("The parameter user is : %s",lr_eval_string("{user}"));
            lr_output_message("The parameter password is : %s",lr_eval_string("{pwd}"));
            sprintf(chQuery, "DELETE FROM people WHERE username='%s'",lr_eval_string("{user}")); 

            status = lr_mysql_query(Mconn, chQuery);

            if(status!=0)
                {
                    lr_end_transaction("mysql_delete",LR_FAIL ); 
                }
            else
                { 
                    lr_end_transaction("mysql_delete", LR_PASS); 
                } 
          } 
    return 0; 
}

6. 編寫 vuser_end 文件

vuser_end()
{
    lr_mysql_disconnect(Mconn);
    return 0;
}
相關文章
相關標籤/搜索