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的形式存在时,应加单引号,则插入数据库就不会出现类似错误

猜你喜欢

转载自www.cnblogs.com/istart/p/12444608.html