记录一次压测过程中,通过LoadRunner向MySQL数据库插入大量数据的过程。

 【1】需要使用到MySQL的libmysql.dll动态链接库,因此需要安装MySQL;注:本地安装的MySQL最好和MySQL数据库服务器上的版本一致;(本次使用的是MYSQL 5.6)

 【2】LoadRunner选择“CVuser”协议;

【3】选择“File”→“Add Files to script”,将MySQL Server 5.6/lib下的libmysql.dll载入;这样载入,相比在脚本中采用绝对路径,可移植性更好;

而后可以看到,左侧文件已被加入;

【4】使用libmysql.dll中的函数,完成脚本;

【5】当Insert SQL语句含有中文时,需要设置字符集为GBK,防止中文乱码:mysql_query(db_connection,lr_eval_string("SET NAMES gbk"));

完整代码:

(1)vuser_init.c文件内容

int  rc;
int db_connection; //数据库连接
int query_result; // 查询结果集 MYSQL_RES
char ** result_row; // 查询的数据行
char *server = "*.*.*.*"; //压测数据库IP地址
char *user = "test"; //压测数据库登录名
char *password = "test"; //压测数据库登录密码
char *database = "TESTDB"; //压测数据库名
int port = ; //压测数据库端口号
int unix_socket = NULL;
int flags = ; vuser_init()
{ // 找到libmysql.dll的所在位置.如果安装了mysql,并将dll文件导入了脚本内,可以直接load,不需要路径
rc = lr_load_dll("libmysql.dll");
if (rc != )
{
lr_error_message("Could not load libmysql.dll");
lr_abort();
} // 创建MySQL对象
db_connection = mysql_init(NULL);
if (db_connection == NULL)
{
lr_error_message("Insufficient memory");
lr_abort();
} // 连接到MySQL数据库
rc = mysql_real_connect(db_connection, server, user, password, database, port, unix_socket, flags);
if (rc == NULL)
{
lr_error_message("%s", mysql_error(db_connection));
mysql_close(db_connection);
lr_abort();
} //若插入数据中含有中文,则需要设置字符集为GBK,防止中文乱码
mysql_query(db_connection,lr_eval_string("SET NAMES gbk")); return ;
}

(2)Ation.c文件内容

Action()
{
  //参数化CUS_CODE等参数;
lr_save_string(lr_eval_string("INSERT INTO `so_customer` (`ID`, `CREATOR`, `CREATE_TIME`, `UPDATE_TIME`, `VERSION`, `SYNC_VERSION`, `REMARK`, `UDF`, `CUS_NAME`, `CUS_CODE`, `CUS_PHONE`, `CUS_FAX`, `CUS_ADDRESS`, `CUS_OWNER_ID`, `CUS_OWNER_NAME`, `CUS_OPERATION_EMPLOYEE_ID`, `CUS_OPERATION_EMPLOYEE_NAME`, `SETTLE_METHOD`, `CONTACT_PERSON`, `Z_CUS_ID`, `STATUS`, `TIME`) "
"VALUES (NULL, '性能测试Creator', '2017-05-11 19:35:58.000000', '2017-05-11 19:35:58.000000', '25', '99990000000001', NULL, NULL, "
"'{CUS_CODE}', '{CUS_CODE}',NULL, '', '', '{ID}', '{NAME}', NULL, '', NULL, '性能测试专用', "
"'50000003{cus_id}', '1', '2017-05-05 19:13:55');"),
"paramInsertQuery"); rc = mysql_query(db_connection, lr_eval_string("{paramInsertQuery}"));
if (rc!= )
{
lr_error_message("%s", mysql_error(db_connection));
mysql_close(db_connection);
lr_abort();
}
return ;
}

(3)vuser_end.c文件内容

vuser_end()
{
mysql_close(db_connection);
return ;
}

备注:

  ①直接向数据库插入数据库,建议“Version”字段默认给1,该字段有时是乐观锁的实现方式之一,没有值可能导致服务器报“乐观锁”错误;

附录-----留存:

  libmysql.dll动态链接库提供了很多函数来对数据库进行操作,大致可以分为以下几类:

  函数的具体参数和使用方法也可以参考与libmysql.dll对于的头文件mysql.h

第一部分 控制类函数

mysql_init()初始化MySQL对象

mysql_options()设置连接选项

mysql_real_connect()连接到MySQL数据库

mysql_real_escape_string()将查询串合法化

mysql_query()发出一个以空字符结束的查询串

mysql_real_query()发出一个查询串

mysql_store_result()一次性传送结果

mysql_use_result()逐行传送结果

mysql_free_result()释放结果集

mysql_change_user()改变用户

mysql_select_db()改变默认数据库

mysql_debug()送出调试信息

mysql_dump_debug_info()转储调试信息

mysql_ping()测试数据库是否处于活动状态

mysql_shutdown()请求数据库SHUTDOWN

mysql_close()关闭数据库连接

第二部分 信息获取类函数

mysql_character_set_name()获取默认字符集

mysql_get_client_info()获取客户端信息

mysql_host_info()获取主机信息

mysql_get_proto_info()获取协议信息

mysql_get_server_info()获取服务器信息

mysql_info()获取部分查询语句的附加信息

mysql_stat()获取数据库状态

mysql_list_dbs()获取数据库列表

mysql_list_tables()获取数据表列表

mysql_list_fields()获取字段列表

第三部分 行列类操作函数

mysql_field_count()获取字段数

mysql_affected_rows()获取受影响的行数

mysql_insert_id()获取AUTO_INCREMENT列的ID值

mysql_num_fields()获取结果集中的字段数

mysql_field_tell()获取当前字段位置

mysql_field_seek()定位字段

mysql_fetch_field()获取当前字段

mysql_fetch_field_direct()获取指定字段

mysql_frtch_fields()获取所有字段的数组

mysql_num_rows()获取行数

mysql_fetch_lengths()获取行长度

mysql_row_tell()获取当前行位置

mysql_row_seek()行定位

mysql_da ta_seek()行定位

mysql_fetch_row()获取当前行

第四部分 线程类操作函数

mysql_list_processes()返回所有线程列表

mysql_thread_id()获取当前线程ID

mysql_thread_safe()是否支持线程方式

mysql_kill()杀列一个线程

第五部分 出错处理类函数

mysql_errno()获取错误号

mysql_error()获取错误信息

第六部分 已过时的函数

mysql_connect()

mysql_create_db()

mysql_drop_db()

mysql_eof()

mysql_reload()

mysql_escape_string()

LoadRunner11_MySQL数据库脚本的更多相关文章

  1. Entity Framework Model First下改变数据库脚本的生成方式

    在Entity Framework Model First下, 一个非常常见的需求是改变数据库脚本的生成方式.这个应用场景是指,当用户在Designer上单击鼠标右键,然后选择Generate Dat ...

  2. Linux下如何将数据库脚本文件从sh格式变为sql格式

    在从事软件开发的过程中,经常会涉及到在Linux下将数据库脚本文件从sh格式变为sql格式的问题.本文以一个实际的脚本文件为例,说明格式转换的过程.        1. sh文件内容 本文中的文件名为 ...

  3. PowerDesigner中在生成的数据库脚本中用name列替换comment列作为字段描述的方法

    1 PowerDesigner中在生成的数据库脚本中用name列替换comment列作为字段描述的方法如下, 依次打开Tools -- Execute Commands -- Run Script,运 ...

  4. 权限开发 spring security 3.0.7 序列1 数据库脚本

    spring  security  3 细粒度权限控制第一篇,关于权限的初始化测试数据库脚本. 空间脚本: drop user FrameworkTest cascade; drop tablespa ...

  5. ABP+AdminLTE+Bootstrap Table权限管理系统第二节--数据库脚本

    第一点,上一篇文章中我们讲到codefirst中一些问题包括如图 1,codefirst在执行的数据库迁移过程中产生了很多文件,对于强迫症的我而言特别不爽,这些是可以不用生成的啊 2,在codefir ...

  6. ABP+AdminLTE+Bootstrap Table权限管理系统第二节--在ABP的基础做数据库脚本处理

    返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 第一点,上一篇文章中我们讲到codefirst中一些问题包括如图,codefirst在每次执行命令的时候会生成新的 ...

  7. 【C#】数据库脚本生成工具(二)

    年C#研发的数据库文档生成工具,给之后的工作带来了便利.近日,又针对该工具,用WinForm开发了数据库脚本生成工具-DbExcelToSQL. 下面数据库文档生成工具效果图: 感兴趣的朋友可以看下[ ...

  8. mysql-备份数据库脚本

    备份数据库脚本,包括单库,全库备份脚本 #!/bin/bashc_user=rootc_password=12345678c_date=`date +"%Y%m%d"`c_dir= ...

  9. 批量备份数据库脚本(PowerShell版)

    开始 昨天备份一个数据库拿来测试,发现备份后的文件非常大.后来去检查下使用的备份脚本,原来之前的备份脚本没有压缩功能. 现把之前的备份脚本修改下,支持压缩备份,和支持仅复制备份(CopyOnly). ...

随机推荐

  1. AJAX中的跨域问题:什么是跨域?如何解决跨域问题?

    域不一样的,即为跨域,包括(协议,域名,端口号) 1. 指定允许其他域名访问 header('Access-Control-Allow-Origin:*'); 2.使用jsonp

  2. 第十二章 Java内存模型与线程(待续)

    ············

  3. ParallaxEffect

    [ParallaxEffect] ParallaxEffect是一种用简单的2D贴图来模拟3D效果的简易方法.譬如一棵树,摄像机俯视时,当树远离摄像机时,树顶偏远,当树靠近,树顶偏近.苹果官方Adve ...

  4. UML类图介绍及简单用法

    原文链接 一.类的属性的表示方式 在UML类图中,类使用包含类名.属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包含name,age和em ...

  5. php 扩展开发

    Linux下用C开发PHP扩展 一.首先下载PHP源码包,假设源码包目录为:/software/php-5.2.13 #> cd /software/php-5.2.13/ext 二.假设我们要 ...

  6. Linux 程序和进程的关系

    查看进程命令 ps  ps -elf|grep init|grep -v grep 查看init进程ID号:ps aux |grep init |grep -v grep; ps aux 会把系统所有 ...

  7. 卡尔曼滤波总结——KF、EFK、UKF

    1.用途 现实是我们的处理和测量模型都是非线性的,结果就是一个不规则分布,KF能够使用的前提就是所处理的状态是满足高斯分布的,为了解决这个问题,EKF是寻找一个线性函数来近似这个非线性函数,而UKF就 ...

  8. opennebula 创建镜像数据块

    {","csrftoken":"f5454a02dea7b4a7d5d50b482a762b57"}

  9. 2-chrome无法添加扩展程序

    1.更多工具->拓展程序->打开开发者模式->重启浏览器 2.将拓展程序拖入,确认安装

  10. Django框架 之 form组件

    Django框架 之 form组件 浏览目录 Form介绍 普通的登录 使用form组件 Form详情 常用字段 校验 进阶 使用Django Form流程 一.Form介绍 我们之前在HTML页面中 ...