loadrunner測試MySQL數據庫性能


一、 准備文件

  1. 下載 MySQL LoadRunner libraries。
  2. 可以看到 MySQL LoadRunner libraries 里面有兩個文件夾:bin 以及 include。將 bin 文件夾里的文件拷貝到 LoadRunner 安裝路徑下的 bin 文件夾下。將 include 文件夾里的文件全部拷貝到 LoadRunner 安裝路徑下的 include 文件夾下。

二、LoadRunner 執行單句SQL語句

1. vuser_init文件代碼

#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 "**.**.**.***"//IP地址
#define MYSQLUSERNAME "root"
#define MYSQLPASSWORD "root123"
#define MYSQLDB    "mytest"
#define MYSQLPORT "3306"

int statu=1;

//mysql連接字符串
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;
        }
	//如果連接失敗,重復連接最多10次
    while(conn_fail < 0 && conn_iter < 10); 

	//連接失敗返回error
    if (conn_fail < 0) 
        { 
            lr_message("Error : %s", mysql_error(Mconn)); 
            statu = 0; 
            lr_end_transaction("mysql_connection", LR_FAIL);
            return -2;
        } 
	//連接成功返回MySql - Good Connection
    else 
        { 
            lr_message("MySql - Good Connection"); 
            statu = 1; 
            lr_end_transaction("mysql_connection", LR_PASS);
        } 
    
    return 0; 

}

2. Action文件代碼

Action()
{
    if(statu)
        { 
			//定義字符數組來存儲sql結果
            char chQuery[1024];
            int status=0;

            lr_start_transaction("mysql_updata"); 

           //參數化
			lr_output_message("The parameter username is : %s",lr_eval_string("{username}"));
			lr_output_message("The parameter score is : %s",lr_eval_string("{score}"));

			//將sql結果(格式化后的字符串)輸出到目標數組
            sprintf(chQuery, "UPDATE user_info SET score = '%s' WHERE username = '%s';",lr_eval_string("{score}"),lr_eval_string("{username}")); 
            
			//是否成功,0成功,其他失敗
			status = lr_mysql_query(Mconn, chQuery);

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

3. vuser_end文件代碼

vuser_end()
{
	//釋放mysql資源
    lr_mysql_disconnect(Mconn);
	return 0;
}

4. 遇到的問題

問題一:Linux中 MySQL 授權遠程連接?
解決辦法:

  1. 在虛擬機中使用 root 用戶登錄 mysql 數據庫

    mysql -u root -p

  2. 使用 mysql 命令為 root 用戶授權 mysql 遠程連接服務
    grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;
    說明:此命令是為密碼為 root 、IP(%)任意的 root 用戶授權。(%:模糊查詢,所有 IP 都可以,可指定其他主機 IP;BY 后的 'password' 為密碼)

  3. 將配置寫入 mysql 授權表中

    flush privileges;

  4. 防火牆開放3306端口

    1. 打開防火牆配置文件
      vi /etc/sysconfig/iptables
    2. 增加下面一行
      -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
    3. 重啟防火牆
      service iptables restart
      注意:增加的開放3306端口的語句一定要在icmp-host-prohibited之前

問題二:jmeter連接Oracle數據庫報錯,報錯信息:

System.Data.OleDb.OleDbException:One or more errors occurred during processing of command. ORA-00911: invalid character at...
解決辦法:
原因是不能將分號(;)放到sql的語句中(loadrunner可以),解決辦法很簡單,取得分號就行了。

問題三:Oracle ORA-00984: column not allowed here?
解決辦法:ORA-00984錯誤: 列在此處不允許,當數據以char的形式存在時,應加單引號,則插入數據庫就不會出現類似錯誤


免責聲明!

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



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