一、 准备文件
- 下载 MySQL LoadRunner libraries。
- 可以看到 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 授权远程连接?
解决办法:
-
在虚拟机中使用 root 用户登录 mysql 数据库
mysql -u root -p
-
使用 mysql 命令为 root 用户授权 mysql 远程连接服务
grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;
说明:此命令是为密码为 root 、IP(%)任意的 root 用户授权。(%:模糊查询,所有 IP 都可以,可指定其他主机 IP;BY 后的 'password' 为密码) -
将配置写入 mysql 授权表中
flush privileges;
-
防火墙开放3306端口
- 打开防火墙配置文件
vi /etc/sysconfig/iptables
- 增加下面一行
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
- 重启防火墙
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的形式存在时,应加单引号,则插入数据库就不会出现类似错误