LoadRunner 測試 Mysql


准備文件

1. 下載 MySQL LoadRunner libraries。

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

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數據庫

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

id需要勾選自動遞增。

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文件夾里面的文件之一。

可以打開看到 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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM