LoadRunner11_MySQL数据库脚本
记录一次压测过程中,通过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数据库脚本的更多相关文章
- Entity Framework Model First下改变数据库脚本的生成方式
在Entity Framework Model First下, 一个非常常见的需求是改变数据库脚本的生成方式.这个应用场景是指,当用户在Designer上单击鼠标右键,然后选择Generate Dat ...
- Linux下如何将数据库脚本文件从sh格式变为sql格式
在从事软件开发的过程中,经常会涉及到在Linux下将数据库脚本文件从sh格式变为sql格式的问题.本文以一个实际的脚本文件为例,说明格式转换的过程. 1. sh文件内容 本文中的文件名为 ...
- PowerDesigner中在生成的数据库脚本中用name列替换comment列作为字段描述的方法
1 PowerDesigner中在生成的数据库脚本中用name列替换comment列作为字段描述的方法如下, 依次打开Tools -- Execute Commands -- Run Script,运 ...
- 权限开发 spring security 3.0.7 序列1 数据库脚本
spring security 3 细粒度权限控制第一篇,关于权限的初始化测试数据库脚本. 空间脚本: drop user FrameworkTest cascade; drop tablespa ...
- ABP+AdminLTE+Bootstrap Table权限管理系统第二节--数据库脚本
第一点,上一篇文章中我们讲到codefirst中一些问题包括如图 1,codefirst在执行的数据库迁移过程中产生了很多文件,对于强迫症的我而言特别不爽,这些是可以不用生成的啊 2,在codefir ...
- ABP+AdminLTE+Bootstrap Table权限管理系统第二节--在ABP的基础做数据库脚本处理
返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 第一点,上一篇文章中我们讲到codefirst中一些问题包括如图,codefirst在每次执行命令的时候会生成新的 ...
- 【C#】数据库脚本生成工具(二)
年C#研发的数据库文档生成工具,给之后的工作带来了便利.近日,又针对该工具,用WinForm开发了数据库脚本生成工具-DbExcelToSQL. 下面数据库文档生成工具效果图: 感兴趣的朋友可以看下[ ...
- mysql-备份数据库脚本
备份数据库脚本,包括单库,全库备份脚本 #!/bin/bashc_user=rootc_password=12345678c_date=`date +"%Y%m%d"`c_dir= ...
- 批量备份数据库脚本(PowerShell版)
开始 昨天备份一个数据库拿来测试,发现备份后的文件非常大.后来去检查下使用的备份脚本,原来之前的备份脚本没有压缩功能. 现把之前的备份脚本修改下,支持压缩备份,和支持仅复制备份(CopyOnly). ...
随机推荐
- java成神之——jaxb操作xml的基本使用
JAXB 依赖 读取xml配置 写配置 自定义写配置 结语 JAXB 依赖 <dependency> <groupId>javax.activation</groupId ...
- Python Twisted系列教程9:第二个小插曲,Deferred
作者:dave@http://krondo.com/a-second-interlude-deferred/ 译者:杨晓伟(采用意译) 可以从这里从头来阅读这个系列 更多关于回调的知识 稍微停下来再思 ...
- day2-心得
模块sys和os #!/usr/bin/env python # -*- coding: utf-8 -*- import sys sys.path #打印环境变量 print(sys.argv) # ...
- Android 4 学习(10):Adapters简介
参考<Professional Android 4 Development> Adapters简介 Adapter用于将数据和实现AdapterView接口的ViewGroup绑定在一起. ...
- Java之常用类及方法
下面我们介绍Java类库所提供的常用类及类的常用方法 一.java.lang.String 1. String类常用的构造函数 public String(String original) 使用串对象 ...
- PHP 环境安装
官方 http://www.php.net/ http://php.net/manual/zh/install.php http://php.net/manual/zh/index.php 下载也就是 ...
- python动态爬取网页
简介 有时候,我们天真无邪的使用urllib库或Scrapy下载HTML网页时会发现,我们要提取的网页元素并不在我们下载到的HTML之中,尽管它们在浏览器里看起来唾手可得. 这说明我们想要的元素是在我 ...
- pl/sql基础语法
- js的简单介绍及基本用法
1. JS的简介 概述: JavaScript, 是一门弱类型语言, 用来给页面增加动态功能的. //弱类型语言: 对数据的数据类型划分不精细(不明确). 特点: A. JavaScript 是一种轻 ...
- ubuntu16.04 安装openpose
安装 Anaconda3 Tensorflow-cpu python3tensorflow 1.4.1+opencv3, protobuf, python3-tk ================== ...