LoadRunner11之批量插入SQL数据~2

Posted emaly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LoadRunner11之批量插入SQL数据~2相关的知识,希望对你有一定的参考价值。

LoadRunner11之批量插入SQL数据

一、批量插入

1.背景:数据库需要大量数据时,通过前台界面录入数据,是一个很麻烦的事情,这个时候可以借助工具来对数据库进行批量插入。

2.协议选择:我们选择的是LoadRunner11+webservice协议。

3.分析工作:(1)在录制之前,需要分析插入数据表字段的特性,是唯一还是随机,是否需要拼接等等

                   (2)表和表之间的关系,主外键以及关联的字段等

                     目的:为了更好的参数化数据,便于造的数据更加接近真实数据。

目前有2个表,student和stuclass

create table student
(

stu_id char(10) primary key (stu_id),
stu_name varchar(30) not null,
stu_specialty varchar(30) not null,
stu_sex char(2) check( stu_sex in (\'男\',\'女\'))
)

create table stuclass
(
stu_classid varchar(30) not null,
stu_id char(10) not null primary key (stu_id),
stu_classname varchar(30) not null,
)

其中stu_id是唯一,stu_name使用拼接方式:test+唯一,stu_specitalty:可重复,stu_sex:随意选择

stuclass:stu_id,唯一并且和student表使用同一个参数,stu_classid+stu_classname 定义参数,班级编码对应班级名次,使用same as line XXX

4.代码部分:Action-数据库链接

//链接1 ConnectionType=OLEDB

lr_db_connect("StepName=Connect",
"ConnectionString=Provider=SQLOLEDB;Data Source=localhost,1433;Initial Catalog=test_lr;User Id=sa;Password=sql2008",
"ConnectionName=MyCon",
"ConnectionType=OLEDB", //ConnectionType=SQL时,ConnectionString不可以带有Provider;ConnectionType=OLEDB时,必须带Provider
LAST);

注:链接数据库方式是OLEDB,Data Source=\'数据源,端口\',initial Catalog=\'数据库名称\',User Id:用户名,Password:密码

//链接2 ConnectionType=SQL时

lr_db_connect("StepName=DatabaseConnection",
"ConnectionString=Data Source=192.168.1.251;Initial Catalog=MY_test;Persist Security Info=True;User ID=sa;Password=test1",
"ConnectionName=MeCon",
"ConnectionType=SQL",
LAST ); //ConnectionType=SQL时,ConnectionString不可以带有Provider;

lr_output_message("数据库链接成功");

 

5.批量插入语句部分

lr_start_transaction("insert_student");

//插入student表

lr_db_executeSQLStatement("StepName=Insert_test",

"ConnectionName=MyCon",
"SQLStatement=insert into student values (\'{stu_id}\',\'test_{stu_name}\',\'{stu_specialty}\',\'{sex}\')",
"DatasetName=Insert_DataSet",
LAST );

lr_end_transaction("insert_student", LR_AUTO);

 

//插入class表

lr_start_transaction("insert_class");
lr_db_executeSQLStatement("StepName=Insert_test",
"ConnectionName=MyCon",
"SQLStatement=insert into stuclass values (\'{classid}\',\'{stu_id}\',\'{classname}\')",
"DatasetName=Insert_DataSet",
LAST );

lr_end_transaction("insert_class", LR_AUTO);

//断开数据库链接


lr_db_disconnect("stepname=Disconnect","connectionname=MyCon",LAST);

6.参数化成功后,运行,确认数据是否插入成功。

7.如要要插入万+条记录,按F4设置迭代次数,运行即可。(或者通过controller设置用户数进行执行)

 

批量数据插入成功-end

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

二、查询部分

 

double time;

lr_start_transaction("SQL查询");
NumRows = lr_db_executeSQLStatement("StepName=PerformQuery",
"ConnectionName=MyCon",
// 数据库语句
"SQLStatement=SELECT * FROM ",
"DatasetName=MyDataSet",
LAST );
times=lr_get_transaction_duration("SQL查询"); //查询需要的时间

lr_end_transaction("SQL查询", LR_AUTO);

lr_output_message("The query returned %d rows.", NumRows);

lr_output_message("SQL查询语句执行时间 %f ", times);

/

//打印查询结果
lr_db_dataset_action("StepName=PrintDataset", //随意指定的动作名称
"DatasetName=MyDataSet",
"Action=PRINT", //?RESET: 将光标设置为数据集的第一条记录
//?REMOVE: 释放分配给数据集的内存。
//?PRINT: 将整个数据集的内容打印到重播日志和其他测试报告摘要中。
LAST );


while (i<=10) { //输出前10条记录的“stu_id”列值
lr_db_getvalue("StepName=GetValue", //随意指定的动作名称
"DatasetName=MyDataSet",
"Column=stu_id", //数据表列名
"Row=next", //可选参数:?具体的第几行;?current(表示不移动光标,即当前行);?next(设置光标到下一行)
"OutParam=Value_Param", //查询值的参数名
LAST);
lr_output_message("The value %d is: %s", i, lr_eval_string("{Value_Param}") );
i=i+1;
}

//注lr_db_gevalue函数的使用

//释放结果
lr_db_dataset_action("StepName=RemoveDataset",
"DatasetName=MyDataSet",
"Action=REMOVE",
LAST);

 

查询结果以及输入结果为:

 

 

 --------------------------------------------------------------------------------------------------

 三、相关函数

其他:数据库链接常用的几个函数,具体使用方法可以在lr函数库中查询

 

-----------------------

四、问题整理

 之前使用了LR12,在数据库查询或者插入时总是存在问题,提示外部组件发生异常“”,导致无法操作成功,通过多次排斥,原因出在插入语句或者是查询语句上。百度找过很多解决方法,最终还是放弃,重新安装LR11,同样的代码,执行成功。

--------------------------------------------------------------------------------------------------------------------------------------------------------

五、扩展 譬如链接oracle数据库,写法如下

lr_db_disconnect用于数据库的连接,可以通过插入该函数,通过LR的向导配置数据库连接参数并测试数据库连接是否成功

 

//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_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);

 

 

 

 

 

以上是关于LoadRunner11之批量插入SQL数据~2的主要内容,如果未能解决你的问题,请参考以下文章

sql批量插入数据之存储过程

使用SqlBulkCopy批量插入多条数据进入表中

往SQL数据库中添加数据,同批插入的数据ID相同,之后插入的ID自增

loadrunner11的移动端性能测试之脚本优化

Java/Spring JDBC:批量插入 2 个表:从第 1 批插入获取第 2 个表所需的 FK ID

java 如何批量插入数据