LoadRunner 测试 Mysql

准备文件

1. 下载 MySQL LoadRunner libraries。

下载地址:https://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;
}
posted @ 2017-11-20 10:39  微微微笑  阅读(1937)  评论(0编辑  收藏  举报