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需要勾选自动递增。

LoadRunner 测试 Mysql

简单版

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 ;
}

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[];
int result; //把字符存到chQuery[]中
sprintf(chQuery, "INSERT INTO people (username,password) VALUES('user11','111111')"); //执行sql
result = lr_mysql_query(Mconn, chQuery); if(result == ){
lr_output_message("insert 成功");
}
else{
lr_error_message("insert 失败");
} return ;
}

这里进行的是插入操作。

数据库常见的增删改查,这里只需要把 sprintf里面的字符串替换掉就可以。

3. 编写vuser_end文件

vuser_end()
{
//关闭数据库连接
lr_mysql_disconnect(Mconn);
return ;
}

这里就是关闭数据库连接。

复杂版

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=;
MYSQL *Mconn;
int conn_fail=, conn_iter=; vuser_init()
{
// Load libmysql.dll
int rc;
rc = lr_load_dll("libmysql.dll");
if (rc != ) {
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 = ;
lr_end_transaction("mysql_connection", LR_FAIL);
} do{
// Connect to database
if (!mysql_real_connect(Mconn, MYSQLSERVER, MYSQLUSERNAME, MYSQLPASSWORD, MYSQLDB, atoi(MYSQLPORT), NULL, ))
{
conn_fail = -;
conn_iter++;
sleep();
}
else
conn_fail = ;
}
while(conn_fail < && conn_iter < ); if (conn_fail < )
{
lr_message("Error : %s", mysql_error(Mconn));
statu = ;
lr_end_transaction("mysql_connection", LR_FAIL);
return -;
}
else
{
lr_message("MySql - Good Connection");
statu = ;
lr_end_transaction("mysql_connection", LR_PASS);
} return ; }

2. 编写 Action_insert 文件

这里尝试向 people表格插入一条数据。

可以看到这里使用的数据是直接从 参数文件读取的,所以需要事先建立好参数 user 以及 pwd。

Action_insert()
{
if(statu)
{
char chQuery[];
int status=; 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!=)
{
lr_end_transaction("mysql_insert",LR_FAIL );
}
else
{
lr_end_transaction("mysql_insert", LR_PASS);
}
}
return ;
}

3. 编写 Action_update 文件

Action_update()
{
if(statu)
{
char chQuery[];
int status=; 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!=)
{
lr_end_transaction("mysql_update",LR_FAIL );
}
else
{
lr_end_transaction("mysql_update", LR_PASS);
}
}
return ;
}

4. 编写 Action_select 文件

查询出来的结果保存在多维数组中,可以使用 row[][].cell 来获取数据。

Action_select()
{
if(statu)
{
char chQuery[];
int status=; 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[][].cell,"user1");
lr_save_string(row[][].cell,"pw1"); lr_output_message(lr_eval_string("User:{user1}"));
lr_output_message(lr_eval_string("Password:{pw1}")); if(status!=)
{
lr_end_transaction("mysql_select",LR_FAIL );
}
else
{
lr_end_transaction("mysql_select", LR_PASS);
}
}
return ;
}

5. 编写 Action_delete 文件

Action_delete()
{
if(statu)
{
char chQuery[];
int status=; 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!=)
{
lr_end_transaction("mysql_delete",LR_FAIL );
}
else
{
lr_end_transaction("mysql_delete", LR_PASS);
}
}
return ;
}

6. 编写 vuser_end 文件

vuser_end()
{
lr_mysql_disconnect(Mconn);
return ;
}
上一篇:linux select函数:Linux下select函数的使用详解【转】


下一篇:Nginx(http协议代理 搭建虚拟主机 服务的反向代理 在反向代理中配置集群的负载均衡)