51Testing软件测试论坛

标题: 如何使用Database checkpoint检查添加的数据是否正确??? [打印本页]

作者: xueboy118    时间: 2006-5-29 18:02
标题: 如何使用Database checkpoint检查添加的数据是否正确???
在WEB页面中,添加一条记录,如添加一个用户的记录,点击确定按钮之后,系统提示添加成功,请问如何在系统提示之后添加Database checkpoint来检查 ,数据库中是否真的存在刚才添加的用户的纪录,或数据库中的记录是否和预期的结果相同。谢谢

[ 本帖最后由 xueboy118 于 2006-5-29 18:06 编辑 ]
作者: xiaonan    时间: 2006-5-30 08:59
建立一下与数据库的连接,select语句查看一下.其实你不知道怎么添加Database checkpoint,那就直接连数据库,查看啊.当然不能只看这条记录是否在数据库里存在了,还要看有没有添加这条记录时覆盖了其他记录.
作者: freewl    时间: 2006-5-30 09:00
可以加一个记录数据库总数的变量,看是否加1了.另外可以将刚加进去的记录,显示出来....
作者: xueboy118    时间: 2006-5-30 09:22
我知道添加Database checkpoint,用select语句查看,关键是在select的where条件中,怎么传递参数,根据传递的参数来查找刚添加的记录.如,添加用户记录,添加成功后,怎样把用户名作为Database checkpoint的select语句where条件中参数,来查找新添加的记录。

[ 本帖最后由 xueboy118 于 2006-5-30 09:29 编辑 ]
作者: xiaonan    时间: 2006-5-30 09:27
你可以在添加进去的用户信息的时候,就把用户给参数化啊,然后再传给下面的select语句,还有我说了不要只是查看这条记录在数据库里存在了就好了,还要考虑是否正确的添加了一条.不然你考虑的是有遗漏的.
作者: xueboy118    时间: 2006-5-30 09:34
xiaonan ,你说的我明白了,可是我是刚使用QuickTest没多长时间,你说的把用户数据参数化,具体怎么实现,能否给个实例。
作者: xiaonan    时间: 2006-5-30 09:36
你可以把用户名给参数化嘛,下面可以根据这个用户名写 where条件
作者: xueboy118    时间: 2006-5-30 09:43
你的意思我明白了,可是到底该怎样参数化,我一点概念都没有,我现在的问题就是,该如何把WEB页面的输入的数据做参数化处理
作者: xiaonan    时间: 2006-5-30 09:51
就是你把你要插入的那个用户名放进一个变量,然后再把这个变量给where条件,这样理解?
作者: xueboy118    时间: 2006-5-30 10:05
你的意思是用dim定义一个变量 ,在将输入的用户名传给变量,在用它做为where的条件?
作者: michaelyung    时间: 2006-5-30 10:22
你是录制的还是discriptive programming的?
录制的话,在keyword view里找到你的那个数据,可以看到设置选项,参数化就可以了。
描述编程的话,定义一个变量就是。
作者: xueboy118    时间: 2006-5-30 10:26
我市录制脚本后,添加Database checkpoint,
michaelyung ,你说的方法具体怎么操作,能否详细说明
作者: michaelyung    时间: 2006-5-30 10:32
参数化:在keyword view里找到你要参数化的值,在value column那一格点一下,会有"#"符号的,就是可以设置变量类型的,就可以看到参数化的选项了,试一下就知道了。
作者: xueboy118    时间: 2006-5-30 10:40
你所说的操作,我用过。是在做数据驱动时使用的,至于怎样用这种方法做参数化使用,我还时不懂
作者: xiaonan    时间: 2006-5-30 10:47
原帖由 xueboy118 于 2006-5-30 10:05 发表
你的意思是用dim定义一个变量 ,在将输入的用户名传给变量,在用它做为where的条件?


别说的那么麻烦了,还是先这样试试吧,等以后对QTP熟了后再用其他的方法
作者: michaelyung    时间: 2006-5-30 10:51
你用过的话,应该知道怎么将一个数据参数化放在global table sheet 或者local sheet中,然后check point时就用参数名来做就可以了啊。
比如将某个用户名参数化定义成pName,放在table中,那么参数就是DataTable("pName", dtGlobalSheet)
check point中直接用<pName>就可以了,pName就是你所存放数据的参数名。
作者: xueboy118    时间: 2006-5-30 11:13
xiaonan ,你说的方法,我大概是明白了,可还时不会使用,能给个例子吗?
michaelyung ,我的脚本中的数据库的检查点的录制脚本语句如下
DbTable("DbTable_3").Check CheckPoint("DbTable_3"),用你的方法改为:
DbTable("Pname", dtGlobalSheet).Check CheckPoint(Pname)    或 DbTable("Pname", dtGlobalSheet).CheckPoint(Pname)
QuickTest提示如下:
错误的参数个数或无效的参数属性值: 'DbTable'
作者: xiaonan    时间: 2006-5-30 11:39
DbTable("DbTable_3").Check CheckPoint("DbTable_3"),
"DbTable_3"这个是记录在存储库里的控件名,不能改掉
列如这样:
orderno = Window("Flight Reservation").WinEdit("Order No:").GetROProperty("Text")
作者: xueboy118    时间: 2006-5-30 11:49
xiaonan   你说的orderno = Window("Flight Reservation").WinEdit("Order No:").GetROProperty("Text") ,我看不明白,
我的登陆的脚本代码如下:
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").Set DataTable("Pname", dtGlobalSheet)
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("password").SetSecure "447baed06de722ed24c86fcf2bdd4461"
Browser("网站后台管理系统").Page("网站后台管理系统").WebButton("登 录").Click
DbTable("DbTable_3").Check CheckPoint("DbTable_3")
Browser("网站后台管理系统").Page("网站后台管理").Sync
请问,在Database checkpoint这里,该如何具体操作
作者: xueboy118    时间: 2006-5-30 11:55
我录制的脚本如下:
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").Set "admin"
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("password").SetSecure "447bc007c1401dd4511996463d35fd01"
Browser("网站后台管理系统").Page("网站后台管理系统").WebButton("登 录").Click
Browser("网站后台管理系统").Page("网站后台管理").Sync

如何在click后 ,添加Database checkpoint的检查点,即把参数“admin ”传入Database checkpoint中,来检查数据库中是否存在admin 这个用户,该如何改这个脚本
作者: xiaonan    时间: 2006-5-30 12:14
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").Set DataTable("Pname", dtGlobalSheet)
在这句后面加一句话,把name传给username
用类似这样的方法取
usname = Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").GetROProperty("Text")
这句话不一定正确,你自己看一下

然后,你要不直接用ado连接去查看
Dim res,cmd,sql
Set Res=createobject("adodb.recordset")
Set Cmd=createobject("adodb.command")
Cmd.activeconnection="Provider=SQLOLEDB.1;Password=111111;Persist Security Info=True;User ID=sa;Initial Catalog=xhq;Data Source=192.168.191.142"  '这句话是连接数据库的数据源,要做修改
Cmd.CommandType = 1
sql="selec t * from 表 where name=username"
Cmd.CommandText = sql
Set res = Cmd.Execute()
Set res = nothing
Set cmd.ActiveConnection = nothing
Set Cmd= nothing
作者: michaelyung    时间: 2006-5-30 12:36
to xueboy118:
你这是将录制和descriptive programming搅在一起了。
在expert view中看到录制的语句隐藏了很多的描述性语句(意思是说你看到的语句已经封装了一些二进制执行数据,不是真正的编程语句,所以不能简简单单那样写,除非你用keyword view操作)。要得到你放在globalsheet中的参数值,可以在expert view中用编程语句这样写:
Dim varSheet, strName
Set varSheet = DataTable.GlobalSheet
strName = varSheet.GetParameter("pName").Value
这里strName就是你所要的值了。

[ 本帖最后由 michaelyung 于 2006-5-30 12:38 编辑 ]
作者: Horus_Ra    时间: 2006-5-30 13:23
不需要那么麻烦吧,各位??

数据库中一般都有一个字增长的字段,比如ID什么的,取Top 1就行了~

没有的话,你就不要用数据库检查点了,用21楼的方法将数据取出来再判断好了~
作者: xueboy118    时间: 2006-5-30 13:56
我的脚本现修改如下:
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").Set DataTable("Pname", dtGlobalSheet)
usname = Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").GetROProperty("Text")
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("password").SetSecure "447bc007c1401dd4511996463d35fd01"
Browser("网站后台管理系统").Page("网站后台管理系统").WebButton("登 录").Click
Dim res,cmd,sql
Set Res=createobject("adodb.recordset")
Set Cmd=createobject("adodb.command")
Cmd.activeconnection="Provider = Sqloledb; User ID = sa; Password = sa; Initial Catalog =bb; Data Source = 192.168.5.196 "
Cmd.CommandType = 1
sql="selec t  *  from admin_user  where name=username"
Cmd.CommandText = sql
Set res = Cmd.Execute()
Set res = nothing
Set cmd.ActiveConnection = nothing
Set Cmd= nothing
Browser("网站后台管理系统").Page("网站后台管理").Sync

执行后 QuickTest报错,提示如下:
第 1 行: '*' 附近有语法错误。
有一黄色小箭头指向          Set res = Cmd.Execute()    这一句
作者: xueboy118    时间: 2006-5-30 14:06
michaelyung ,你的方法我还是不是很明白,如你所说,在expert view中用
Dim varSheet, strName
Set varSheet = DataTable.GlobalSheet
strName = varSheet.GetParameter("pName").Value
把我想要的值取出,在Database checkpoint的检查点中又该如何使用?
作者: xiaonan    时间: 2006-5-30 14:12
原帖由 xueboy118 于 2006-5-30 13:56 发表
我的脚本现修改如下:
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").Set DataTable("Pname", dtGlobalSheet)
usname = Browser(" ...


晕,怎么不变通一下
问题出在"select * from   表 where name=usename"
usename是一个变量,这样写表明它是一个常量.
应该用个连接符,这样写"select * from 表 where name="&usename
作者: xiaonan    时间: 2006-5-30 14:15
我前面给你的代码有点疏忽,不过不要我怎么写你就怎么写啊,先把代码给看懂了,select 我写成这样了selec t,你也这么写???
作者: xueboy118    时间: 2006-5-30 14:30
呵呵,xiaonan ,不好意思 ,我已经N常时间没用VB了,都忘光了,你开始给的连接数据库的数据源那句就在我机器上报错,还时找人改的,改好人家就走了,我只能自己瞎折腾了。
我刚用了你说的方法,还是报同样的错。
作者: michaelyung    时间: 2006-5-30 14:41
原帖由 xueboy118 于 2006-5-30 14:06 发表
michaelyung ,你的方法我还是不是很明白,如你所说,在expert view中用
Dim varSheet, strName
Set varSheet = DataTable.GlobalSheet
strName = varSheet.GetParameter("pName").Value
把我想要的 ...


嗯……我都不知道怎么说了,我觉得你把录制到的语句当成原始的编程语句了,然后使劲在录制和编程间折腾,结果还把自己搞糊涂了。你前面的Browser()那些是QTP录制呈现给你的语句,和后面那部分(比如xiaonan给你提供的程序有着本质的不同)。你写程序时如果只这样写Browser("") 肯定是错的的。
这样吧:把你录制得到的可运行的语句拷贝出来,重新开一个新的Test,再把之前的语句粘贴进去(不要录制),你再运行下,肯定是不行的。不知道你是否会明白点。

其实明白这个不同后,你的问题是非常简单的一个问题。采用任何一个方法,或者综合两者的方法都行。

我的意思:你没搞清楚两者的区别,弄清楚了选择其中一个去做(比如descriptive programming,现在我们都根本不去用录制了),不就是编程嘛,把录制的思想抛弃掉,写代码,得到一个值,再取出一个值,两者一比较就是。

[ 本帖最后由 michaelyung 于 2006-5-30 14:44 编辑 ]
作者: xueboy118    时间: 2006-5-30 14:51
我要晕了,是你们水平太高了,还时我太差劲了,我是刚用QuickTest没多久呀
我的录制脚本就这么一点,如下:
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").Set "admin"
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("password").SetSecure "447bc007c1401dd4511996463d35fd01"
Browser("网站后台管理系统").Page("网站后台管理系统").WebButton("登 录").Click
Browser("网站后台管理系统").Page("网站后台管理").Sync

要求很简单,就是用“admin”作参数,在数据库中找一条记录,在cliak事件后添加个 Database checkpoint的检查点,或是别的什么检查点,只要能检查出数据库中存在这一条记录就ok了。
谁能帮我改改!!!
作者: michaelyung    时间: 2006-5-30 15:08
我也要晕了。
你能得到admin参数化的值不就可以了吗,你的目的就是将admin参数化啊。其他的检查就是编程啊,跟QTP的关系都不大了。如果你的database能可视化,那就继续录制。如果不可以,编程获取到数据库的该项,一个比较不就出来了??

[ 本帖最后由 michaelyung 于 2006-5-30 15:09 编辑 ]
作者: michaelyung    时间: 2006-5-30 15:17
原帖由 xueboy118 于 2006-5-30 14:51 发表
我要晕了,是你们水平太高了,还时我太差劲了,我是刚用QuickTest没多久呀
我的录制脚本就这么一点,如下:
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("userna ...


基于你们的我改一下,不需要录制,大致就是这样:

Dim objParent, strName, strPassword   
strName = ""
strPassword=""                 ' here you can define it or get it from a .xls file.
Set objParent = Browser("title:=网站后台管理系统").Page("title:=网站后台管理系统")
objParent.WebEdit("text:=username").Set strName
objParent.WebEdit("text:=password").Set strPassword
objParent.WebButton("text:=登 录").Click

Dim res,cmd,sql
Set Res=createobject("adodb.recordset")
Set Cmd=createobject("adodb.command")
Cmd.activeconnection="Provider = Sqloledb; User ID = sa; Password = sa; Initial Catalog =bb; Data Source = 192.168.5.196 "      'use the correct info for your database.
Cmd.CommandType = 1
sql="select  *  from admin_user  where name="  &  strName
Cmd.CommandText = sql
Set res = Cmd.Execute()

// here you got the results from searching the database.

Set res = nothing
Set cmd.ActiveConnection = nothing
Set Cmd= nothing

objParent.sync()

我觉得自动化测试,应该尽量将你要参数化的数据放入一个xls文件中,这样不用你手工输入,而且易于添加多个数据项给测试。这就是上面说要参数化的数据可以从xls文件中获取到。

如果你用录制,将strName 参数化后不是有一个变量名吗,后面就用此名就可以了啊,唉,很简单的问题,结果说的我自己都觉得麻烦了。

[ 本帖最后由 michaelyung 于 2006-5-30 15:24 编辑 ]
作者: xueboy118    时间: 2006-5-30 15:18
我也知道接着就是要编程了,可是在QuickTest中编程,我还不是很懂,我目前使用QuickTest,也就是录制脚本,在修修改改,编程的功能还没用过,具体操作,对我来说真的有点难,唉,不怕你们笑话,我使用QuickTest的水平有点菜

[ 本帖最后由 xueboy118 于 2006-5-30 15:19 编辑 ]
作者: michaelyung    时间: 2006-5-30 15:20
原帖由 xueboy118 于 2006-5-30 15:18 发表
我也知道接着就是要编程了,可是在QuickTest中编程,我还不是很懂,我目前使用QuickTest,也就是录制脚本,在修修改改,编程的功能还没用过,具体操作,对我来说真的有点难,唉,不怕你们小花,我使用QuickTest的水 ...

其实上面xiaonan的那个 就可以做了。
不是有select数据库得到的结果吗,select * from * where name = username
这个就得到结果了啊。
作者: xiaonan    时间: 2006-5-30 15:25
原帖由 xueboy118 于 2006-5-30 14:30 发表
呵呵,xiaonan ,不好意思 ,我已经N常时间没用VB了,都忘光了,你开始给的连接数据库的数据源那句就在我机器上报错,还时找人改的,改好人家就走了,我只能自己瞎折腾了。
我刚用了你说的方法,还是报同样的错。

你要把username取了之后加两个单引号啊,如下:
aaa="'000001'",你可以这样username="'"&usename&"'"
sql语句里字符型是要加单引号的
作者: xueboy118    时间: 2006-5-30 15:48
xiaonan,你说的加单引好的方法我也试过了,可就是下不去,QuickTest报错,提示如下:
第 1 行: '*' 附近有语法错误。还是在Set res = Cmd.Execute()这里卡助了


michaelyung ,你的方法我用了,脚本如下:
Dim objParent, strName, strPassword   
strName = "admin"
strPassword="admin"     
Set objParent = Browser("title:=网站后台管理系统").Page("title:=网站后台管理系统")
objParent.WebEdit("text:=username").Set strName
objParent.WebEdit("text:=password").Set strPassword
objParent.WebButton("text:=登 录").Click

Dim res,cmd,sql
Set Res=createobject("adodb.recordset")
Set Cmd=createobject("adodb.command")
Cmd.activeconnection="Provider = Sqloledb; User ID = sa; Password = sa; Initial Catalog =bb; Data Source = 192.168.5.196 "      
Cmd.CommandType = 1
sql="select  *  from admin_user  where name="  &  strName
Cmd.CommandText = sql
Set res = Cmd.Execute()

Set res = nothing
Set cmd.ActiveConnection = nothing
Set Cmd= nothing

objParent.sync()

QuickTest报错,提示如下:
Cannot identify the object "WebEdit" (of class WebEdit). Verify that this object's properties match an object currently displayed in your application.
箭头指向  objParent.WebEdit("text:=username").Set strName  这句
作者: michaelyung    时间: 2006-5-30 15:53
原帖由 xueboy118 于 2006-5-30 15:48 发表
xiaonan,你说的加单引好的方法我也试过了,可就是下不去,QuickTest报错,提示如下:
第 1 行: '*' 附近有语法错误。还是在Set res = Cmd.Execute()这里卡助了


michaelyung ,你的方法我用了,脚本如下:
...

晕,这里text:=username中的username我是举个例子,你要看你网页上那个webedit的text属性值是多少啊,或者是"姓名",“用户名”,password也同样啊。
所以我觉得你应该先把这些问题都弄清楚后再来看代码,否则很容易糊涂的。
作者: xiaonan    时间: 2006-5-30 16:01
麻烦你自己在sql语句下面 ,加句msgbox sql看,报出什么信息好哇?自己也主动一点,怎么一直跟着我们走呢?别担心,慢慢来,多试几次,会好的.现在可能你对编程上的东西有点不太熟
作者: xueboy118    时间: 2006-5-30 16:07
michaelyung ,你说的webedit的text属性值是不是WEB页面输入框前显示出来的字符,那个字符我试了,也不行
作者: michaelyung    时间: 2006-5-30 16:14
原帖由 xueboy118 于 2006-5-30 16:07 发表
michaelyung ,你说的webedit的text属性值是不是WEB页面输入框前显示出来的字符,那个字符我试了,也不行

你用object spy看下它的值。
还有我弄错了,webedit好像没有text属性
你改成webedit("name:= username")看看。
作者: xueboy118    时间: 2006-5-30 16:16
添加msgbox sql   脚本如下:
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").Set DataTable("Pname", dtGlobalSheet)
usname = Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").GetROProperty("Text")
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("password").SetSecure "447bc007c1401dd4511996463d35fd01"
Browser("网站后台管理系统").Page("网站后台管理系统").WebButton("登 录").Click
Dim res,cmd,sql
Set Res=createobject("adodb.recordset")
Set Cmd=createobject("adodb.command")
Cmd.activeconnection="Provider = Sqloledb; User ID = sa; Password = sa; Initial Catalog =bb; Data Source = 192.168.2.196 "
Cmd.CommandType = 1
sql="selec t  *  from admin_user  where name='"&username&"'"
Cmd.CommandText = sql
msgbox sql
Set res = Cmd.Execute()
msgbox sql
Set res = nothing
Set cmd.ActiveConnection = nothing
Set Cmd= nothing
Browser("网站后台管理系统").Page("网站后台管理").Sync

QuickTest执行时  msgbox的提示信息如下:
selec t  *  from admin_user  where name=' '

我在usname = Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").GetROProperty("Text") 前,又试着添加了Dim  usname,运行后结果同上
作者: michaelyung    时间: 2006-5-30 16:25
你的username和前面的usname不一样啊,username当然为空啊。
还有sql是个字符串,你msgbox sql返回的就是sql的值,所以username获取到了,sql才包含username的值。

[ 本帖最后由 michaelyung 于 2006-5-30 16:26 编辑 ]
作者: xueboy118    时间: 2006-5-30 16:30
michaelyung ,我用object spy 在activeScreen的登录页面的用户名输入框点了一下,属性中有text 属性,在object spy中值为:======管理员身份验证=====登录名 :密码 :
点击把值拷贝出来后的代码为:
usname = Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").GetROProperty("Text")
object spy 中的属性太多了,我也不知道你说的属性是不是指这个,我不会使用帖图功能 ,只能手敲了
作者: michaelyung    时间: 2006-5-30 16:35
我刚才随便试了下就行啊。你改成这样:

username = objParent.WebEdit("name:= username").GetROProperty("value")   //用我前面给你的编程代码,并且替代这里的括号里的username的值。(属性是name的值)

msgbox username

我刚才试了下都是可以获取到的,我也不知道怎么给你描述了。
作者: xueboy118    时间: 2006-5-30 16:38
michaelyung  ,不好意思。我刚改了,运行后,还是提示
selec t  *  from admin_user  where name=' '
作者: michaelyung    时间: 2006-5-30 16:39
给你我刚才的一个demo的代码,你先看明白了再说吧:(新建一个Test,考过去就可以运行了)

        SystemUtil.CloseDescendentProcesses

        strInstanceUrl = "http://newtours.mercuryinteractive.com/tour/"
        strBrowser = "Welcome: Mercury Tours"
        strPage="Welcome: Mercury Tours"
        systemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe", strInstanceUrl
       
        Dim objParent
        Set objParent = Browser("title:=" & strBrowser).Page("title:=" & strPage)

        objParent.WebEdit("name:=UserName").Set "Michael Yang"
        MsgBox objParent.WebEdit("name:=UserName").getROProperty("value")
作者: michaelyung    时间: 2006-5-30 16:40
原帖由 xueboy118 于 2006-5-30 16:38 发表
michaelyung  ,不好意思。我刚改了,运行后,还是提示
selec t  *  from admin_user  where name=' '

你前面不是有一个username=的语句吗,你看下那个地方username的值到底获取到没有啊。

如果为空,当然后面name的值也为空啊。
作者: michaelyung    时间: 2006-5-30 16:44
一切很正常啊,你那很多小问题,所以需要你弄清楚很多基本的问题,否则代码不好解释的。
        SystemUtil.CloseDescendentProcesses
        strInstanceUrl = "http://newtours.mercuryinteractive.com/tour/"
        strBrowser = "Welcome: Mercury Tours"
        strPage="Welcome: Mercury Tours"
        systemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe", strInstanceUrl
       
        Dim objParent
        Set objParent = Browser("title:=" & strBrowser).Page("title:=" & strPage)

        Dim username
        objParent.WebEdit("name:=UserName").Set "Michael Yang"
                      username = objParent.WebEdit("name:=UserName").getROProperty("value")
                     sql="selec t  *  from admin_user  where name='" & username & "'"
        msgbox sql

[ 本帖最后由 michaelyung 于 2006-5-30 16:45 编辑 ]
作者: xueboy118    时间: 2006-5-30 17:11
我在usname = Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").GetROProperty("Text")
后添加了msgbox sql    提示  selec t  *  from admin_user  where name=' '

michaelyung
你的代码,我除了第一句没看懂外,别的差不多都能明白,不知道怎么搞得,用你最早给我的那个代码,修改后,就是 执行不下去,执行到objParent.WebEdit("text:=登录名:").Set strName 就卡住了
作者: michaelyung    时间: 2006-5-30 17:16
1. 我说过了你那个地方写错了,是username不是usname,你两个地方不一致。
usname = Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").GetROProperty("Text")
还没发现吗,第一个。
2. getROProperty("Text")改成getROProperty("value")
3. objParent.WebEdit()里的text改成name.
作者: xiaonan    时间: 2006-5-30 17:27
怎么一个问题用了那么多帖子啊?
作者: xueboy118    时间: 2006-5-30 17:45
修改的脚本如下:
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").Set DataTable("Pname", dtGlobalSheet)
username = Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("username").GetROProperty("value")
Browser("网站后台管理系统").Page("网站后台管理系统").WebEdit("password").SetSecure "447bc007c1401dd4511996463d35fd01"
Browser("网站后台管理系统").Page("网站后台管理系统").WebButton("登 录").Click
Dim res,cmd,sql
Set Res=createobject("adodb.recordset")
Set Cmd=createobject("adodb.command")
Cmd.activeconnection="Provider = Sqloledb; User ID = sa; Password = sa; Initial Catalog =bb; Data Source = 192.168.5.196 "
Cmd.CommandType = 1
sql="selec t  *  from admin_user  where name='"&username&"'"
Cmd.CommandText = sql
msgbox sql
Set res = Cmd.Execute()
msgbox sql
Set res = nothing
Set cmd.ActiveConnection = nothing
Set Cmd= nothing
Browser("网站后台管理系统").Page("网站后台管理").Sync
执行后  第一个msgbox   提示  select * from admin_user  where =' admin'    QuickTest提示 第 1 行: '*' 附近有语法错误   
黄色箭头还是指向   Set res = Cmd.Execute()

作者: xueboy118    时间: 2006-5-30 17:56
Dim objParent, strName, strPassword   
strName = "admin"
strPassword="admin"     
Set objParent = Browser("title:=网站后台管理系统").Page("title:=网站后台管理系统")
objParent.WebEdit("name:=登录名:").Set strName
objParent.WebEdit("name:=密 码:").Set strPassword
objParent.WebButton("text:=登 录").Click

Dim res,cmd,sql
Set Res=createobject("adodb.recordset")
Set Cmd=createobject("adodb.command")
Cmd.activeconnection="Provider = Sqloledb; User ID = sa; Password = sa; Initial Catalog =bb; Data Source = 192.168.2.196 "      
Cmd.CommandType = 1
sql="select  *  from admin_user  where name="  &  strName
Cmd.CommandText = sql
Set res = Cmd.Execute()

Set res = nothing
Set cmd.ActiveConnection = nothing
Set Cmd= nothing

objParent.sync()
执行后,QuickTest提示
Cannot identify the object "WebEdit" (of class WebEdit). Verify that this object's properties match an object currently displayed in your application.
黄色小箭头指向    objParent.WebEdit("name:=登录名:").Set strName
作者: xiaonan    时间: 2006-5-31 08:45
晕,你这句话怎么写的啊?sql="selec t  *  from admin_user  where name='"&username&"'"
跟你说selec t 我多加了个空格,应该是这样的select, 怎么自己一点都不去思考一下呢?
这样再试
sql="select  *  from admin_user  where name='"&username&"'"还有取出来的字符最好去一下空格
作者: xueboy118    时间: 2006-5-31 09:34
xiaonan,不好意思,QuickTest中的空格不是很明显,我没有细心检查
昨天你们两个人两种方法,搞得我疲于调试,跟本就没时间注意细节
我刚才有重新调试了一下 ,用你的方法,已经可以执行下去了,
在此,非常感谢你和michaelyung 对我的帮助。
作者: xiaonan    时间: 2006-5-31 10:14
呵呵,没事!如果我上面的话,那些地方说的有点不妥也请你别放在心上.只是替你有点着急.没别的意思,:)
作者: xueboy118    时间: 2006-5-31 10:27
没什么的,你也是出于好心,在次感谢
顺便在问一下,QuickTest的脚本中的编程代码,与VBscript的代码是否相同,还是在本质上有所区别?
作者: xiaonan    时间: 2006-5-31 10:50
QuickTest的脚本就是用的VBscript的代码,所以如果你对VBscript熟的话,学QTP就容易些
作者: swallow0918    时间: 2006-5-31 11:20
xiaonan 现在很厉害啊!
作者: xueboy118    时间: 2006-5-31 11:24
xiaonan,能否留个联系方式,MSN或QQ什么的,以后要是再有什么疑难问题,好向你请教,呵呵
作者: michaelyung    时间: 2006-5-31 15:35
原帖由 xueboy118 于 2006-5-31 09:34 发表
xiaonan,不好意思,QuickTest中的空格不是很明显,我没有细心检查
昨天你们两个人两种方法,搞得我疲于调试,跟本就没时间注意细节
我刚才有重新调试了一下 ,用你的方法,已经可以执行下去了,
在此,非常感谢 ...


其实细节的问题在上面的帖子中说了几次了,好像你一直没看到。
其实两种方式一样的,只是你录制后,有些对象信息已经存在object repository里面了。

纯用编程的话就不需要录制了,打开QTP就写。
作者: michaelyung    时间: 2006-5-31 15:37
原帖由 xueboy118 于 2006-5-30 17:56 发表
Dim objParent, strName, strPassword   
strName = "admin"
strPassword="admin"     
Set objParent = Browser("title:=网站后台管理系统").Page("title:=网站后台管理系 ...


这个细节我也说过了。WebEdit("name:= ")这里出问题的原因就是name的值不对。
你这里写的 “登陆名” 应该是webedit旁边label对象的值,这是两个对象啊
根据你上面录制的代码,我看name的值应该是username,所以你改成WebEdit("name:=username")应该就可以了,实际上用object spy看下就知道了。
作者: xueboy118    时间: 2006-5-31 16:05
michaelyung ,你说的方法,对于使用编程方式实现的人来说,应该是很简单的,可对于我,一个刚使用QKP没多久的人来说,有点难度。呵呵,不过,还时要谢谢你。
你昨天写的那段代码,我还是差不多都看懂了,可是要让我写,一时半会又写不出来,我现在的水平,也就是先录制脚本,在拿过来修改。不过我也要向编程靠拢。呵呵
作者: xiaonan    时间: 2006-6-1 08:26
把你的msn放上来不就的了吗?
作者: xueboy118    时间: 2006-6-1 09:29
已删除

[ 本帖最后由 xueboy118 于 2009-10-30 16:23 编辑 ]
作者: vibrantyin    时间: 2007-10-12 17:09
标题: 服了你们了
你不就是想看看当某一个操作影响到数据库了,通过database checkpoint来检查操作影响到的数据是否正确嘛,在query里写select count(-1) from ..就可以了,qtp会把这个值保留下来,当你如果有新插入的记录,到测试结果里去看实际值和期望值嘛,当然了,这种做法比较单一,如果你的脚本有循环插入记录的操作,反正你只要记得这个值就ok了
作者: yxd2006    时间: 2011-5-24 17:14
学习了

3Q




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2