zoukankan      html  css  js  c++  java
  • 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);

     

  • 相关阅读:
    Unable to load the specified metadata resource
    Web开发人员速查卡
    vs 中大括号之间垂直虚线显示
    第4届华为编程大赛决赛试题解答(棋盘覆盖)
    assert()函数用法总结
    Win7安装VC++6.0已知的兼容性问题的解决方法
    VC6打开一个文件或工程的时候,会导致VC6崩溃而关闭
    浮点数取整.
    1.4 VC6.0在win7下安装的兼容性问题以及解决办法
    华为编程大赛_将字符数组内的数字排序
  • 原文地址:https://www.cnblogs.com/fgjl/p/12321796.html
Copyright © 2011-2022 走看看