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

  • 相关阅读:
    int **指针问题
    用 _tcscmp 替代 strcmp 或 wcscmp
    C++经典面试算法题
    目标世界上最小的Linux系统—ttylinux体验
    im-switch -s ibus错误:Error: no configuration file "ibus" exists.
    Ruby环境搭建
    emulator: ERROR: x86 emulation currently requires hardware acceleration!Please ensure Intel HAXM is properly installed and usable.CPU acceleration status: HAX kernel module is not installed!
    POJ 1007 DNA Sorting
    POJ 1002 487-3279
    Ubuntu Android adb调试无法识别设备 -- List of devices attached ???????????? no permissions
  • 原文地址:https://www.cnblogs.com/istart/p/12444608.html
Copyright © 2011-2022 走看看