基于LR的数据库性能测试
web services协议
在LR的web services协议中提供了如下函数进行数据库的连接和执行sql语句,以实现对数据库的性能测试,也可以实现向数据库中自动生成批量数据。

lr_db_disconnect用于数据库的连接,可以通过插入该函数,通过LR的向导配置数据库连接参数并测试数据库连接是否成功,如下:
或: 
连接oracle数据库并执行sql查询的测试脚本:
Action()
{ int NumRows=;
int i=; //OLEDB方式连接数据库
lr_db_connect("StepName=OracleConnect",
"ConnectionName=db1",
"ConnectionString=Provider=OraOLEDB.Oracle.1;Data Source=netservicename_testbook;Password=Testbook_1;User ID=system",
"ConnectionType=OLEDB",
LAST); //或 lr_db_connect("StepName=OracleConnect",
// "ConnectionName=db1",
// "ConnectionString=Provider=OraOLEDB.Oracle.1;Data Source=localhost:1521/testbook;Password=Testbook_1;User ID=system",
// "ConnectionType=OLEDB",
// LAST); lr_start_transaction("PerformQuery"); //执行查询,并保存查询出的总记录条数。lr_db_executeSQLStatement中还能执行增删该、存储过程等其他sql语句。
NumRows =
lr_db_executeSQLStatement("StepName=PerformQuery",
"ConnectionName=db1",
"SQLStatement=select * from department",
"DatasetName=Mydataset",
LAST);
lr_output_message("Notify:NumRows:%d",NumRows); //提取查询出来的数据
while ( i < )
{
lr_db_getvalue("StepName=GetValue",
"DatasetName=Mydataset",
"Column=department_name",
"Row=next",
"OutParam=MyOutputParam",
LAST );
lr_output_message("The value of MyOutputParam is: %s", lr_eval_string("{MyOutputParam}") );
i++;
} //在日志中打印内存中的数据集,默认只打印100条。lr_db_dataset_action中还能执行其他action操作
lr_db_dataset_action("StepName=PrintDataset",
"DatasetName=Mydataset",
"Action=PRINT",
LAST ); //释放数据库连接
lr_db_disconnect("StepName=Disconnect",
"ConnectionName=db1",
LAST); lr_end_transaction("PerformQuery", LR_AUTO); return ;
}
lr_db_executeSQLStatement函数执行存储过程实例:
lr_db_executeSQLStatement("StepName=StartDeal",
"ConnectionName=XXXOrderDB",
"SQLStatement=exec XXXorderdb..sp1_XXX_firstdealorder"
"@orderid='{ID}',"
"@operator='mazj',"
"@ProcessType = 'NOR',"
"@CorpConfirmType = '',"
"@CorporationID = NULL,"
"@BOS=NULL",
"DatasetName=testDataset",
LAST);
Oracle(2-Tier)协议
Oracle(2-Tier)协议用于C/S结构的两层架构进行数据库的测试,可以录制PL/SQL Developer或sqlplus工具连接数据库执行数据库操作脚本,各种变量的定义置于vdf.h文件中,,数据库的登陆退出分别置于vuser_init和vuser_end中,数据库的操作置于Action中。
连接oracle数据库并执行查询的实例脚本:
Action()
{
//***vdf.h***
#include "lrd.h" //位于LR安装目录下的include目录中的头文件 //相关变量定义
static LRD_INIT_INFO lnitlnfo = {LRD_INIT_INFO_EYECAT};
static LRD_DEFAULT_DB_VERSION DBTypeVersion[] = {{LRD_DBTYPE_NONE,LRD_DBVERSION_NONE}};
static LRD_VAR_DESC OBJECT_NAME_D1;
static LRD_VAR_DESC NUM ={LRD_VAR_DESC_EYECAT, , , LRD_DBTYPE_ORACLE, {, , },DT_LONG_VARCHAR};
static void FAR * OraEnv1;
static void FAR * OraSvc1;
static void FAR * OraSrv1;
static void FAR * OraSes1;
static void FAR * OraStm1;
static void FAR * OraDef1;
static unsigned long uliFetchedRows;
unsigned long rownum; //***vuser_init*** //Initializes the LRD environment
lrd_init(&lnitlnfo, DBTypeVersion); //Initializes the database process environment
lrd_initialize_db(LRD_DBTYPE_ORACLE,,); //Allocates and initializes an LRDDBI handle
lrd_env_init(LRD_DBTYPE_ORACLE, &OraEnv1,,); //Explicitly allocates and initializes an LRDDBI Handle
lrd_ora8_handle_alloc(OraEnv1,SVCCTX,&OraSvc1,); lrd_ora8_handle_alloc(OraEnv1,SERVER,&OraSrv1,); lrd_ora8_handle_alloc(OraEnv1,SESSION,&OraSes1,); //Creates an access path to a data source for database operations
lrd_server_attach(OraSrv1,"netservicename_testbook",-,,); //或 lrd_server_attach(OraSrv1,"localhost:1521/testbook",-1,0,0); //Sets an attribute for an LRDDBI handle
lrd_ora8_attr_set_from_handle(OraSvc1,SERVER,OraSrv1,,); //Sets an attribute for an LRDDBI handle
lrd_ora8_attr_set(OraSes1,USERNAME,"system",-,); lrd_ora8_attr_set(OraSes1,PASSWORD,"Testbook_1",-,); lrd_ora8_attr_set_from_handle(OraSvc1,SESSION,OraSes1,,); lr_think_time(); //Creates and begins a user session for a server
lrd_session_begin(OraSvc1,OraSes1,,,); //***Action*** lrd_ora8_handle_alloc(OraEnv1,STMT,&OraStm1,); //事务开始
lr_start_transaction("sqlstart"); //Prepares a null-terminated SQL statement for execution
lrd_ora8_stmt(OraStm1, "select department_name from department", , , ); //Executes an SQL statement in Oracle 8.x
lrd_ora8_exec(OraSvc1, OraStm1, , ,&rownum, , , , , ); //Binds a host variable to a column
lrd_ora8_bind_col(OraStm1,&OraDef1,,&NUM,,); //Saves the value of a table cell to a parameter
lrd_ora8_save_col(OraStm1, , , , "resu1"); lrd_ora8_save_col(OraStm1, , , , "resu2"); //Fetches the next row in the result set
lrd_ora8_fetch(OraStm1, -, , &rownum, , , , ); lr_output_message("Notify:The final message is:%s", lr_eval_string("{resu1}"));
lr_output_message("Notify:The final message is:%s", lr_eval_string("{resu2}")); //***vuser_end*** //Frees an LRDDBI handle
lrd_handle_free(&OraStm1, ); //Ends a user session for a server
lrd_session_end(OraSvc1, OraSes1, , ); //Deletes an access path to a data source
lrd_server_detach(OraSrv1, , ); lrd_handle_free(&OraEnv1, ); lr_end_transaction("sqlstart", LR_AUTO); return ;
}
以上脚本执行的前提:执行机器上安装了oracle客户端程序并你能正常连接到oracle数据库。当然如果脚本执行机器上安装有oracle服务器程序,就不再需要安装oracle客户端程序了。一般可以先安装个PL/SQL Developer,然后确保PL/SQL Developer能正常连接到oracle数据库,脚本就可以正常连接数据库并执行了,也可以利用LR数据库连接函数lr_db_connect对话框向导中的连接测试来测试与数据库服务器的连通性,需要确保连接测试成功。
基于LR的数据库性能测试的更多相关文章
- 基于LR的Oracle应用性能测试
最近对一个oracle ERP系统的INV模块进行性能测试,因为之前大部分都是测试web类型的应用,在这方面经验较少,期间也遇到了不少问题,因此有必要作些总结,以备后忘.首先先简单了解下测试对象相关的 ...
- 基于webdriver的jmeter性能测试-通过jmeter实现jar录制脚本的性能测试
续接--基于webdriver的jmeter性能测试-Eclipse+Selenium+JUnit生成jar包 在进行测试前先将用于支持selenium录制脚本运行所需的类包jar文件放到jmeter ...
- XData -–无需开发、基于配置的数据库RESTful服务,可作为移动App和ExtJS、WPF/Silverlight、Ajax等应用的服务端
XData -–无需开发.基于配置的数据库RESTful服务,可作为移动App和ExtJS.WPF/Silverlight.Ajax等应用的服务端 源起一个App项目,Web服务器就一台,已经装了 ...
- (原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 决策树分析算法)
随着大数据时代的到来,数据挖掘的重要性就变得显而易见,几种作为最低层的简单的数据挖掘算法,现在利用微软数据案例库做一个简要总结. 应用场景介绍 其实数据挖掘应用的场景无处不在,很多的环境都会应用到数据 ...
- 一个基于PDO的数据库操作类(新) 一个PDO事务实例
<?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ...
- 基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构
基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构 Neo4j 3.0.0 正式发布,这是 Neo4j 3.0 系列的第一个版本.此版本对内部架构进行了全新的设计;提供给开发者更强大的生 ...
- 大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 聚类分析算法)
原文:(原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 聚类分析算法) 本篇文章主要是继续上一篇Microsoft决策树分析算法后,采用另外一种分析算法对目标顾客群体的挖掘 ...
- 【原创】相对完整的一套以Jmeter作为工具的性能测试教程(接口性能测试,数据库性能测试以及服务器端性能监测)
准备工作 jmeter3.1,为什么是3.1,因为它是要配合使用的serveragent所支持的最高版本,下载链接 https://pan.baidu.com/s/1dWu5Ym JMeterPlug ...
- asp.net core 系列 20 EF基于数据模型创建数据库
一.概述 本章使用 Entity Framework Core 构建执行基本数据访问的 ASP.NET Core MVC 应用程序.使用迁移(migrations)基于数据模型创建数据库,是一种cod ...
随机推荐
- DDL, DML不是所有SQL都是可以自动回滚的
因为DDL没有事务性,所以DDL不能回滚. 要实现自动回滚.(begin,commit,rollback),则SQL语句中只能包括DML. 这样,自动化发布就会受限规范格式. 故而,一刀切的办法是,假 ...
- 在虚拟机环境下,电脑间拷贝配置好的伪分布式Hadoop环境,出现namenode不能启动的问题!
原因:在原来的电脑上配置伪分布的时候,已经将hostname与IP绑定了,所以拷贝到别的电脑的时候,重新启动的时候就会失败,因为新的电脑的IP不见得就和原来的电脑的IP一样!因为在不同的网络中,在NA ...
- SU suacor命令学习
前段时间事情忙,今天才更新.
- AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码
AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码 添加Watch应用对象时新增内容介绍 Watch应用对象添加到创建的项目中后,会包含两个部分:Watch App 和 Wa ...
- 拓扑排序 Codeforces Round #290 (Div. 2) C. Fox And Names
题目传送门 /* 给出n个字符串,求是否有一个“字典序”使得n个字符串是从小到大排序 拓扑排序 详细解释:http://www.2cto.com/kf/201502/374966.html */ #i ...
- A Walk Through the Forest[HDU1142]
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- TYVJ P1067 合唱队形 Label:上升子序列?
背景 NOIP2004 提高组 第三道 描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号 ...
- String, StringBuffer, StringBuilder(转载)
http://blog.csdn.net/rmn190/article/details/1492013 String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilde ...
- 全面解析Linux数字文件权限
全面解析Linux数字文件权限 来源: 时间:2013-09-04 20:35:13 阅读数:11433 分享到:0 [导读] 在刚开始接触Linux时对于文件权限的理解并不是很透彻,这里详细 ...
- winform学习-----理解小概念-20160518
一.设置滚动,滚动列遮住内容的解决办法 1.datagridview三个属性:autosizecolumsmode none autosizeRowsmode none dock fill 2. ...