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的数据库性能测试的更多相关文章

  1. 基于LR的Oracle应用性能测试

    最近对一个oracle ERP系统的INV模块进行性能测试,因为之前大部分都是测试web类型的应用,在这方面经验较少,期间也遇到了不少问题,因此有必要作些总结,以备后忘.首先先简单了解下测试对象相关的 ...

  2. 基于webdriver的jmeter性能测试-通过jmeter实现jar录制脚本的性能测试

    续接--基于webdriver的jmeter性能测试-Eclipse+Selenium+JUnit生成jar包 在进行测试前先将用于支持selenium录制脚本运行所需的类包jar文件放到jmeter ...

  3. XData -–无需开发、基于配置的数据库RESTful服务,可作为移动App和ExtJS、WPF/Silverlight、Ajax等应用的服务端

    XData -–无需开发.基于配置的数据库RESTful服务,可作为移动App和ExtJS.WPF/Silverlight.Ajax等应用的服务端   源起一个App项目,Web服务器就一台,已经装了 ...

  4. (原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 决策树分析算法)

    随着大数据时代的到来,数据挖掘的重要性就变得显而易见,几种作为最低层的简单的数据挖掘算法,现在利用微软数据案例库做一个简要总结. 应用场景介绍 其实数据挖掘应用的场景无处不在,很多的环境都会应用到数据 ...

  5. 一个基于PDO的数据库操作类(新) 一个PDO事务实例

    <?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ...

  6. 基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构

    基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构 Neo4j 3.0.0 正式发布,这是 Neo4j 3.0 系列的第一个版本.此版本对内部架构进行了全新的设计;提供给开发者更强大的生 ...

  7. 大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 聚类分析算法)

    原文:(原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 聚类分析算法) 本篇文章主要是继续上一篇Microsoft决策树分析算法后,采用另外一种分析算法对目标顾客群体的挖掘 ...

  8. 【原创】相对完整的一套以Jmeter作为工具的性能测试教程(接口性能测试,数据库性能测试以及服务器端性能监测)

    准备工作 jmeter3.1,为什么是3.1,因为它是要配合使用的serveragent所支持的最高版本,下载链接 https://pan.baidu.com/s/1dWu5Ym JMeterPlug ...

  9. asp.net core 系列 20 EF基于数据模型创建数据库

    一.概述 本章使用 Entity Framework Core 构建执行基本数据访问的 ASP.NET Core MVC 应用程序.使用迁移(migrations)基于数据模型创建数据库,是一种cod ...

随机推荐

  1. Java Hour 59 JVM Heap

    程序没有方法区释放一段Heap 上的内存,只有JVM 本身可以去回收内存,这个工作单位就是GC. Garbage Collection GC 用来清理对象,同时也用来移动对象减少内存碎片. JVM 指 ...

  2. jquery+php实现用户输入搜索内容时自动提示

    index.html <html> <head>     <meta charset=;} #search_auto li a:hover{background:#D8D ...

  3. CI框架分页类代码

    model层  ;     $page = $);     ;      }else{         $start = $page;       }     $data['results'] = $ ...

  4. python网页爬虫

    1. 静态页面爬取 这类最简单啦,右键->查看页面源码时,想下载的信息都能够显示在这里,这时只需要直接down页面源码,代码如下: # Simple open web import urllib ...

  5. LightOJ 1079 Just another Robbery 概率背包

    Description As Harry Potter series is over, Harry has no job. Since he wants to make quick money, (h ...

  6. 建模算法(四)——动态规划

    其实我们对着规划接触的最多最熟悉,简单来说就是一个递归问题,递归问题简单的在的地方,编程实现的难度下降了,难的地方是如何构造递归,不好的地方是资源的浪费,但是有些地方编程实现的简单的优势可以无视掉他的 ...

  7. windows脚本定时执行

    linux下可以直接用cron定时任务,window下可以使用schtasks 命令代替. 第一次在win7 cmd输入: schtasks 如果出现错误:“错误:无法加载列表资源” 的问题原因很简单 ...

  8. WinForm下窗体标题栏上有“帮助”按钮

    将FormBorderStyle设置为Sizable. 最大化和最小化设置为false helpbutton 设置为true

  9. Sql Server 里的向上取整、向下取整、四舍五入取整

    ==================================================== [四舍五入取整截取] select round(54.56,0) ============== ...

  10. ember.js:使用笔记5 使用view

    在已经设置route的情况下,以table为例,可以如下设置,范围为对应的模版: App.TableView = Em.View.extend({ }); App.TableIndexView = E ...