Reusable action with query database
有两个Action,要实现如下图所示的逻辑,即在Action1中调用queryDB,以实现在Action1中可以只要通过参数就可以进行业务操作,而公用的方法则写入queryDB中。类似的queryDB既可以在本脚本中来调用,也可以在不同的脚本中进行调用。要实现这样的功能,可以利用Action的Reusable action功能。 为了实验,我采用了Oracle数据库及表c_cons。通过输入参数用户编码:cons_no,来实现调用queryDB来查询出用户标识:cons_id。
1、建立两个Action,分别命名为Action1、queryDB,其中queryDB的Reusable action框勾选上,表示queryDB这个Action可以被重用。
2、在queryDB这个Action中定义输入参数及输出参数。如图所示:
3、切换到Action1中,进行对queryDB的调用。可以右键,在弹出框中选择”Insert Call to Existing….”,出现Select Action 对话框,如下图所示。在Action中选择要插入的Action即queryDB,Location选项中选择”After the current step” 选项。
点击【OK】按钮,即可插入。同时在专家试图中显示脚本为:
RunAction "queryDB", oneIteration
为了实现输入参数来查询结果,需定义一个保留返回值的变量,returnconsid,并输入参数cons_no为3095646333。脚本如下所示:
Dim returnconsid
RunAction "queryDB", oneIteration,"3095646333",returnconsid
msgbox returnconsid
4、插入调用后,我们就可以在queryDB中写相关的业务逻辑操作了。具体的实现代码如下所示:
Dim res,cmd,sql
Set res=createobject("adodb.recordset")
Set cmd=createobject("adodb.command")
Rem 连接数据库
Dim Connstring
Connstring="Provider=OraOLEDB.Oracle.1;Password = sgpm31 ;Persist Security Info=True; User ID = sgpm ; Data Source = CIS31 ; Server = 172.19.2.31"
Cmd.activeconnection= Connstring
rem 查询语句
sql="select cons_id from c_cons where cons_no='"¶meter("cons_no")&"'"
Cmd.CommandText=sql
Set res=Cmd.Execute()
If res.EOF And res.BOF Then
res.Close
Reporter.ReportEvent micFail,"test","查询失败"
parameter("cons_id")="unknown"
else
rem CSTR转换成字符串
If Cstr(res(0))<>"" Then
Dim returnconsid
returnconsid=Cstr(res(0))
Reporter.ReportEvent micPass,"test","查询成功,"¶meter("cons_no")&"的标识是"&returnconsid
parameter("cons_id")=Cstr(res(0))
end if
End If
Set res=nothing
Set Cmd.activeconnection=nothing
Set Cmd=nothing
这样整个脚本就实现了我们预期的要求,运行脚本能够得到我们需要的结果。
注:类似queryDB这样的Action可以作为一个公用的Action,当然queryDB中的脚本完全可以作为一个公共函数来调用,我们这里这样做只是为了介绍QTP中Action的Reusable action功能。若需要在不同的脚本中调用这个queryDB,可以在Select Action 对话框中选择queryDB所在脚本的位置即可。如下图所示: