执行完LR脚本后,相应的数据状态都会改变,如何能保证下次执行呢?这就需要把数据状态置回,可以通过在lr脚本中调用sql,对相应的数据库进行操作;下边是我们目前使用的两种方法:
一、通过BAT文件调用sql执行
方法:1)在lr脚本中调用bat文件
2)在bat文件中写调用的sql文件
举例说明:
**************************************************************************
目标:通过loadrunner执行sql:update tableset name = ''
具体实现方法:
首先,在LR脚本中写出一句调用bat的语句:system("E:\\**.bat");
注:语句中路径是双\,最后有一个;
第二,创建一个bat文件,来调用一个sql脚本。内容类似:osql -U sa -P 11111111 -S DBserver -i E:\**.sql
其中,-U后面是数据库用户名,-P后面是数据库密码,-S后面是数据库所在服务器名称,-i后面是具体sql路径。注意每一个具体值前面都有一个空格。
第三,写恢复自己数据的sql脚本。在脚本开头可以写具体操作哪个库。例如
USE [DBname]
GO
update tableset name = ''
这样就可以在LR中操作数据库了。
*******************************************************************
弊端:1.不能在sql中做变量,或者说不支持参数化,只能固定的执行某一些sql
2.bat和sql文件的路径在不同机器上,需要随时更改
二、在lr脚本中执行存储过程(该方法是对一的优化)
方法:1)首先在相应的数据库中执行创建存储过程
2)然后在lr脚本中调用此存储过程
****************************************************************************
举例说明:
目标:通过LoadRunner执行含变量的存储过程
具体实现方法:
1)在相应的数据库上执行存储过程:
use[DBname]
GO
CreateProcedureQA_LR
as
@namevarchar(30)
begin
update tableset name = '' where name = @name
end2)在LoadRunner脚本中写入
char command[1024];
sprintf(command, "Sqlcmd -U sa -P 11111111 -S DBserver -dDBname-Q \"exec QA_LR%s \" ", lr_eval_string("{name}") );
lr_output_message(command);
system(command);
其中-U后面是数据库用户名,-P后面是数据库密码,-S后面是数据库所在服务器名称,-d后面是具体数据库名称,-Q后面是要执行的sql。注意每一个具体值前面都有一个空格。
这样就可以在LR中执行存储过程了。
*******************************************************************************
优点:1.对执行的sql可以进行参数化,这样更灵活的对指定某个变量进行sql执行
2.摆脱了修改路径的繁琐