LR11直接对数据库访问操作方法在性能测试中的应用总结
项目背景概述
某测试项目,该项目的接口测试需要大量的订单,并且需要订单的状态是已确认客户的订单,大量的订单可以通过下单接口直接造订单数据,但下的订单要人工在后台页面处理到已确认客户的状态才可以使用这些订单数据,大量订单人工处理到已确认客户状态,操作起来不太靠谱,后来从开发那了解到,订单从开始处理到已确认客户,主要会调用几个sp和sql的操作便可以完成, LR11提供了对数据库的直接访问和执行sp和sql的方法 ,可以使用 LR11通过模拟多线程的方式来批量的处理大量的订单到已确认客户的状态,从而可以方便高效的制造测试数据;
LR11对数据库的测试,主要使用到LR11提供的如下方法:
lr_db_connect();//建立同数据库的连接访问;
lr_db_executeSQLStatement();//执行具体的sql操作(select,update,insert,delete)或sp存储过程操作,
lr_db_disconnect();//断开数据库的连接;
需要注意的是LR11提供的对数据库的这些操作方法的使用是需要在 LR的Web Services协议脚本中才可以使用的;
具体的使用后面实例中会展现,该项目中数据的制造准备主要是通过如下过程完成
- 首先通过调用下单接口完成订单数据的制造;
测试环境获取下单接口调用地址:
http://XXX.com/XXXX.Booking.API/SaveOrderService.asmx?wsdl
具体请求使用的报文可以让开发人员提供具体的报文,报文比较长在此省略;
- 对生成的订单通过调用相关SP和Sql语句直接批量操作完成订单的处理到已确认客户;
本次项目造数据的关键步骤为处理订单到已确认客户操作,主要涉及两个SP:xxx..sp1_xxx_firstdealorder和sp2_xxx_AutoConfirmClient,两个update操作;
具体LR11调用SP和Update操作的 脚本如下:
Action()
{ //数据库的连接有如下两种方式,目前测试环境连接测试库使用的都是第一种方式//
//////数据库访问连接///// windows 认证方式的连接登录///
lr_db_connect("StepName=DatabaseConnection",
"ConnectionString=Data Source=xxxdb.test.xx.com,55666;Integrated Security=SSPI;Initial Catalog=XXXOrderDB",
"ConnectionName=XXXOrderDB",
"ConnectionType=SQL",
LAST );
//////数据库访问连接///// SQL server认证方式的连接登录参照如下//
/* lr_db_connect("StepName=DatabaseConnection",
"ConnectionString=Data Source=192.168.1.2;Initial Catalog=DataBase;User ID=User_temp;Password=******", //访问数据库的用户名和密码
"ConnectionName=ATDataBase",
"ConnectionType=SQL",
LAST );
*/
///执行存储过程///
//模拟后台中点开始处理订单的sp操作
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 );
///执行update ///
//更新RecordNo记录号//
lr_db_executeSQLStatement("StepName=UpdateRecord",
"ConnectionName=XXXOrderDB",
"SQLStatement=update XXXOrderDB.dbo.O_XXX set RecordNo='AA{Param}' where OrderID = {ID};",
"DatasetName=testDataset",
LAST );
//更新processstatus状态//
lr_db_executeSQLStatement("StepName=Updatestatus",
"ConnectionName=XXXOrderDB",
"SQLStatement=update XXXOrderDB.dbo.o_orders set processstatus = (processstatus | 1) where orderid={ID};",
"DatasetName=testDataset",
LAST );
///执行存储过程///
//模拟前台页面自动确认客户的sp//
lr_db_executeSQLStatement("StepName=orderConfirm",
"ConnectionName=XXXOrderDB",
"SQLStatement=sp2_XXX_AutoConfirmClient @OrderID ='{ID}', @Eid='System'",
"DatasetName=testDataset",
LAST );
//关闭连接//
lr_db_disconnect("StepName=Disconnect",
"ConnectionName=XXXOrderDB",
LAST );
return 0;
}
脚本设计好后放入LR的Controller场景中即可对批量的订单使用多线程的方式快速的把所有的订单处理到已确认客户的状态,比起人工操作迅速千倍;
如果lr_db_executeSQLStatement()执行的是查询操作并有dataset的结果返回的话,需要在dataset使用后进行内存释放,处理查询结果集的方法:lr_db_dataset_action();方法中的Action取值为reset时表示重置指针返回第一行,取值为remove表示释放dataset占用的内存,取值print表示在回放日志中打印;
除了使用这种方式来使用LR快速制造数据外,LR11对数据库这种操作更多的是应用在对SQL语句和SP存储过程的性能测试验证方面,可以通过这种方式直接测试SQL和SP存储过程的性能。
(文中部分敏感内容的表述使用XXX代替)
LR11直接对数据库访问操作方法在性能测试中的应用总结的更多相关文章
- C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看
数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键 ...
- SpringBoot数据库访问(一)--------关系型数据库访问(RDBMS)
关系型数据库访问(RDBMS) 采用JdbcTemplate.MyBatis.JPA.Hibernate等技术. 一.JdbcTemplate工具 在pom.xml添加boot-starter-jdb ...
- R的数据库访问-MySQL
目录 1 RMySQL 2 环境与安装 3 建立通信 1 RMySQL R作为一款数据分析的工具,,而MySQL是一款常用的开源关系型数据库软件,非常适用于中小型的数据存储,当二者相互结合时才能爆发出 ...
- 第7章 数据库访问与ORM 慕课网微信小程序开发学习笔记
第7章 数据库访问与ORM https://coding.imooc.com/learn/list/97.html 目录: 7-1 数据库操作三种方式之原生SQL 19:09 7-2 从一个错误了解E ...
- [入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一)
[入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一) Date 周二 06 一月 2015 By 钟谢伟 Tags mvc4 / asp.net 示 ...
- DataAccess通用数据库访问类,简单易用,功能强悍
以下是我编写的DataAccess通用数据库访问类,简单易用,支持:内联式创建多个参数.支持多事务提交.支持参数复用.支持更换数据库类型,希望能帮到大家,若需支持查出来后转换成实体,可以自行扩展dat ...
- 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持
在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreS ...
- [开源].NET数据库访问框架Chloe.ORM
扯淡 13年毕业之际,进入第一家公司实习,接触了 EntityFramework,当时就觉得这东西太牛了,访问数据库都可以做得这么轻松.优雅!毕竟那时还年轻,没见过世面.工作之前为了拿个实习机会混个工 ...
- 我的基于asp.net mvc5 +mysql+dapper+easyui 的Web开发框架(1)数据库访问(0)
一.数据库访问 概述 1. 数据库使用mysql,orm采用dapper框架.dapper框架应用简单,只是需要自己手写sql语句,但是对于像我这样写了多年sql语句的人来说,这应该不算问题,个人还是 ...
随机推荐
- 高德地图Demo运行报错 com.android.ide.common.process.ProcessException: Failed to execute aapt
最近由于有需求去做导航方面的Android开发,很是无奈,以前也的确是没有搞过,领导开大会当着所有人的面说这是给我分配的第一个工作,无论如何要做好,突然间感觉压力好大,自己已经多年没有敲过代码,而且A ...
- JVM原理二----JAVA虚拟机体系结构
组成: 指令集,寄存器,栈,无用单元收集(GC),方法区域.JAVA核心 1,指令集:这个不太清楚 2,寄存器:和处理器中的寄存器类似 pc:Java程序计数器. optop:指向*作数栈顶端的指针. ...
- springmvc+mybatis+redis实现查询插入操作
最近在学习redis,虽然现在还不是很熟练.不过可以进行简单的框架整合开发. IDE:我使用的是IDEA.springmvc+spring+mybatis的整合这个我就不多说了,下面我们先进行这块的整 ...
- Codeforces 1030F 【线段树】【好题】
LINK 题目大意: 给你n个物品,每一个物品有一个位置p和一个权值w,移动一个物品的代价是移动距离*物品权值 有q个询问: 把第i个物品的权值变成j 问把第l到第r个物品移动到一个相邻的区间中\([ ...
- Codeforces 834D The Bakery 【线段树优化DP】*
Codeforces 834D The Bakery LINK 题目大意是给你一个长度为n的序列分成k段,每一段的贡献是这一段中不同的数的个数,求最大贡献 是第一次做线段树维护DP值的题 感觉还可以, ...
- linux vi详解
刚开始学着用linux,对vi命令不是很熟,在网上转接了一篇. vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指 ...
- for(j=0,i=0;j
for(j=0,i=0;j<6,i<10;j++,i++) { k=i+j; } k 值最后是多少? <script type="text/javascript" ...
- [LOJ6145][2017 山东三轮集训 Day7]Easy
loj description 一棵树,每次给出\(l,r,x\),求从点\(x\)出发到达\([l,r]\)中任意一点的最短距离. sol 动态点分治. 建出点分树后,在每个节点上用以点编号为下标的 ...
- (转)Android短信的发送和接收监听
/**发送与接收的广播**/ String SENT_SMS_ACTION = "SENT_SMS_ACTION"; String DELIVERED_SMS_AC ...
- 12.Python使用requests发送post请求
1.我们使用postman进行接口测试的时候,发现POST请求方式的编码有3种,具体的编码方式如下: A:application/x-www-form-urlencoded ==最常见的post提交数 ...