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设置用户数进行执行)

sql server 批量插入cvs数据 批量添加sql_数据库

 

批量数据插入成功-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);

 

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

sql server 批量插入cvs数据 批量添加sql_数据_02

 

 

sql server 批量插入cvs数据 批量添加sql_SQL_03

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

 三、相关函数

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

 

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

sql server 批量插入cvs数据 批量添加sql_数据_04

四、问题整理

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

sql server 批量插入cvs数据 批量添加sql_数据_05

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

五、扩展 譬如链接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);