Loadrunner与SQL Server的操作可以通过录制的方式来实现,但本文还是通过直接调用loadrunner本身的function来实现sql语句的操作,主要用到的是lr_db_connect和lr_db_executeSQLStatement两个函数,具体的用法这里不做解释,请自行查看loadrunner的帮助说明。

1、脚本协议:选择web service

在函数lr_db_connect的帮助说明中有句“Important: This function is available only from within Web Services scripts.”。这句话决定了,我们在协议选择的时候只能选择Web Services协议。

2、脚本


[objc] view plain copy

  1. Action()  

  2. {  

  3.     int NumRows=0;   

  4.     double times=0;  

  5.     int i=1;  

  6.     //建立连接,ConnectionType=SQL  

  7.     lr_db_connect("StepName=DatabaseConnection",  

  8.         "ConnectionString=Data Source=172.16.1.215;Initial Catalog=LayIM;Persist Security Info=True;User ID=sa;Password=sa",  

  9.         "ConnectionName=MyCon",  

  10.         "ConnectionType=SQL",  

  11.         LAST );  

  12.     /*建立连接,ConnectionType=OLEDB 

  13.     lr_db_connect("StepName=Connect",  

  14.         "ConnectionString=Provider=SQLOLEDB;Data Source=.;Initial Catalog=my_test;User Id=sa;Password=123456", 

  15.         "ConnectionName=MyCon", 

  16.         "ConnectionType=OLEDB", //ConnectionType=SQL时,ConnectionString不可以带有Provider;ConnectionType=OLEDB时,必须带Provider 

  17.         LAST); 

  18.     */  

  19.     //执行SQL  

  20.     lr_start_transaction("SQL查询");  

  21.     NumRows = lr_db_executeSQLStatement("StepName=PerformQuery",  

  22.         "ConnectionName=MyCon",  

  23.         // 数据库语句  

  24.         "SQLStatement=SELECT * FROM layim_user ORDER BY id DESC ",  

  25.         "DatasetName=MyDataSet",  

  26.         LAST );  

  27.     times=lr_get_transaction_duration("SQL查询");  

  28.     lr_end_transaction("SQL查询", LR_AUTO);  

  29.   

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

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

  32.    

  33.     //打印查询结果  

  34.       

  35.     /*lr_db_dataset_action("StepName=PrintDataset", 

  36.         "DatasetName=MyDataSet", 

  37.         "Action=PRINT", 

  38.         LAST );*/  

  39.    

  40.     //获取当前第一条记录  

  41.     lr_db_getvalue("StepName=GetValue",  

  42.         "DatasetName=MyDataSet",  

  43.         "Column=nickname",  

  44.         "Row=current",  

  45.         "OutParam=MyOutputParam",  

  46.         LAST );  

  47.    

  48.     // 输出当前查询记录  

  49.     lr_output_message("The value is: %s", lr_eval_string("{MyOutputParam}") );  

  50.   

  51.     while (i<=10) {//输出10条记录  

  52.         lr_db_getvalue("StepName=GetValue",  

  53.                        "DatasetName=MyDataSet",   

  54.                        "Column=nickname",  

  55.                        "Row=next",   

  56.                        "OutParam=MyOutputParam",  

  57.                        LAST);  

  58.         lr_output_message("The value %d is: %s", i, lr_eval_string("{MyOutputParam}") );   

  59.         i=i+1;  

  60.     }  

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

  62.       

  63.     //释放结果  

  64.     /*lr_db_dataset_action("StepName=RemoveDataset", 

  65.         "DatasetName=MyDataSet", 

  66.         "Action=REMOVE", 

  67.         LAST);*/  

  68.   

  69.     lr_start_transaction("SQL插入");  

  70.     NumRows = lr_db_executeSQLStatement("StepName=Insert",  

  71.         "ConnectionName=MyCon",  

  72.         // Insert语句,本例中第一列id是自增主键  

  73.         "SQLStatement=Insert into layim_user values ('test','123456','test888888','','/test/test',getdate(),'111111',0) ",  

  74.         "DatasetName=MyDataSet",  

  75.         LAST );  

  76.     times=lr_get_transaction_duration("SQL插入");  

  77.     lr_end_transaction("SQL插入", LR_AUTO);  

  78.   

  79.     lr_output_message("The insert date %d rows.", NumRows);  

  80.     lr_output_message("SQL插入语句执行时间 %f ", times);  

  81.    

  82.     //关闭链接  

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

  84.    

  85.     return 0;  

  86. }  


3、补充说明:

(1)ConnectionString:本文给了ConnectionType为sql和OLEDB的例子,具体数据源的连接可参见:https://www.connectionstrings.com/sql-server/

(2)ConnectionType=OLEDB时ConnectionString后面必须指定Provider属性,ConnectionType=SQL又绝对不可以指定Provider属性。不知道为什么这么要求。

(3)lr_db_connect中的ConnectionName可以随意指定,但是lr_db_executeSQLStatement中的ConnectionName必须和其保持一致。