51Testing软件测试论坛

标题: 关于对table的检查 [打印本页]

作者: michelle_happy    时间: 2005-6-29 13:44
标题: 关于对table的检查
如果在录制的时候table中只有1行数据,而运行runtime时有多行数据,就是和录制的时候不一样,如果用table checkpoint可以顺利检查第一行,但是检查第一行得时候expected value还是第一行的值,相比当然就不正确。

难道只能一个一个取出table中的每行数据,再和datatable中的比较??checkpoint能不能更灵活一些呢?
作者: lovetest6    时间: 2005-6-29 17:13
是不是希望checkpoint也能参数化的意思啊?
作者: michelle_happy    时间: 2005-6-29 17:57
是这个意思把,总觉得checkpoint不够灵活,只能对预期输出参数化,对位置什么的不能参数化,我录入可能只录一条,但是我run的时候可能是N条数据啊,总不可能让我录N条把,然后每个grid都选
自己老想如果是通过写脚本一个一个的循环比较,那还要checkpoint干什么呢。
况且我觉得实际中这样的情况很普遍,不知道大家都是怎么弄的
作者: QA_BAY    时间: 2005-6-30 09:15
经过自己的试验,CHECKPOINT是可以参数化的,
你再试试吧.
作者: michelle_happy    时间: 2005-6-30 11:16
标题: 我还是没想出来
QA_BAY,暂时没想出来,你是根据设置table checkpoint中的cell identification来实现的么?

另外还有个问题,大家帮我看看。如附件图中
我想取到“SQ05060035”这个值,如果用webelement,则对象名称就是“SQ05060035”,这样下次运行就找不到这个object了。
因此我到上一层用webtable,这个webtable的名称是“询价单号:”,每次运行这个名称应该是不变的,因此我写
inq_no=Browser("Browser").Page("Page_7").WebTable("询价单号:").GetCellData(1,2)

但是多次调试,这个inq_no总是取不到值empty,百思不得其解,来此请教

[ Last edited by michelle_happy on 2005-6-30 at 11:20 ]
作者: QA_BAY    时间: 2005-6-30 11:38
Originally posted by michelle_happy at 2005-6-30 11:16 AM:
QA_BAY,暂时没想出来,你是根据设置table checkpoint中的cell identification来实现的么?

你会根据做DATATTABLE的参数化来做CHECKPOINT就可以了.方法一样.但只是对像不同而以.
作者: michelle_happy    时间: 2005-6-30 17:11
Originally posted by QA_BAY at 2005-6-30 11:38 AM:

你会根据做DATATTABLE的参数化来做CHECKPOINT就可以了.方法一样.但只是对像不同而以.

恩,明白了,还是放到一个大的循环里来做,晕,脑子一时没转过来
作者: lovetest6    时间: 2005-6-30 17:59
成功了么?怎么做的呢?
作者: michelle_happy    时间: 2005-7-1 09:34
录制的时候只录制单行table,修改脚本将checkpoint放入循环内,但是在选择checkpoint属性的时候要注意修改cell identification栏,如果不修改这一栏,就是按你当时录制选取的行列来定位,但是新增以后可能因为排序问题已经不在原来的位置了,通过cell identification实现自动定位,如图

我的Identify columns中by column name是灰色的不能用,不知道怎么回事。
再identify rows中选择by selected key columns ,然后选择一列,勾选use value match criteria to identify data in the key column。我选择多列运行失败,选择一列就成功,不知道怎么回事。
也许这个大家早都知道了,不过我是刚发现的,呵呵

lovetest6,我前面那个取不到值的问题你看出什么毛病没呢

[ Last edited by michelle_happy on 2005-7-1 at 09:36 ]
作者: michelle_happy    时间: 2005-7-1 09:38
其实循环的问题和这个identify cell是没关系的,不过定位的问题也是困扰了我很久的问题
作者: lovetest6    时间: 2005-7-1 10:58
michelle_happy
我想前面取不到值的问题加个sync应该能解决吧?
否则真是有点儿太蹊跷了。

另外你查一下那里是不是一个TD啊,呵呵,小心被开发人员愚弄哦,呵呵。

以前钱我就遇到过一次,看着象td但实际上是做的效果。加个webtable的checkpoint看看那是个TD么。
作者: lovetest6    时间: 2005-7-1 11:27
michelle_happy
明白你的意思了,现在是不是说,如果你录制的时候,页面上只有一行数据,然后你为它加了一个checkpoint,然后回放的时候,页面上有10条数据,你从数据库里面取出来的也是10条数据,然后把这10条数据放到sheet里面,然后修改了一下checkpoint的属性。

这时候你回放起来,就会重复10次。来检查页面上的10条数据是否正确。

有没有一个办法,能不循环重复,一下子就check了呢?

或者说即便循环也只是程序循环而不是页面不停的播放。

毕竟页面重复10次,效率一定不高啊。

[ Last edited by lovetest6 on 2005-7-1 at 11:30 ]
作者: lovetest6    时间: 2005-7-1 11:32
checkpoint查了半天也没找到什么好方法,没提供相关的函数说明啥的,只能在界面上做设置,
作者: QA_BAY    时间: 2005-7-1 12:50
Originally posted by lovetest6 at 2005-7-1 11:27 AM:
michelle_happy
明白你的意思了,现在是不是说,如果你录制的时候,页面上只有一行数据,然后你为它加了一个checkpoint,然后回放的时候,页面上有10条数据,你从数据库里面取出来的也是10条数据,然后把这10条 ...

按你说的意思,
如果是这样检查,QTP是不可能实现的,他没有这个功能.
每次输入一个就作一次比较,这很正常阿!
除非你的方框一次可以输入很多,但这是不可能的!
检查网页链接就可以一次性检查所有的链接通不通!
觉得这个可以跟MI提建议,是个很好的方法,提高效率!
作者: michelle_happy    时间: 2005-7-1 13:28
Originally posted by lovetest6 at 2005-7-1 11:27 AM:
michelle_happy
明白你的意思了,现在是不是说,如果你录制的时候,页面上只有一行数据,然后你为它加了一个checkpoint,然后回放的时候,页面上有10条数据,你从数据库里面取出来的也是10条数据,然后把这10条 ...


如果我run的时候要输入10条数据,我都是输入一条后马上就检查的,输入10次数据页面本身也要重复10次啊,我在每次添加完毕紧接着check,这样check应该不会太麻烦把

如果是10条数据输入完了一起check的话,都不知道那个key identify能不能10条一起识别,没试过,呵呵
作者: QA_BAY    时间: 2005-7-1 14:27
Originally posted by michelle_happy at 2005-7-1 01:28 PM:

如果我run的时候要输入10条数据,我都是输入一条后马上就检查的,输入10次数据页面本身也要重复10次啊,我在每次添加完毕紧接着check,这样check应该不会太麻烦把


如果是10条数据输入完了一起check的话, ...

如果是你说的这种,QTP是可以做到的!
做法就是我前面所说的!
作者: lovetest6    时间: 2005-7-1 14:34
哦,明白你的意思了,
界面上应该是这样的吧:
一个form,你add,提交,然后返回一个list,其中包括所有的已经在数据库中的record.
是这样吧??

倘若是搜索,录制的时候值搜索出一条,你做了checkpoint,
播放的时候,数据库里数据多了,搜索结果是10条,你怎么办阿?
作者: michelle_happy    时间: 2005-7-1 14:44
我认为如果是做搜索、查询此类功能不应该用tale checkpoint,应该属于database checkpoint了,当然database checkpoint灵活度不大,我都是自己写脚本循环比较的。
作者: QA_BAY    时间: 2005-7-1 15:19
自己写脚本循环比较的。
方便吗?
贴出来大家研究研究.
作者: lovetest6    时间: 2005-7-1 15:26
我也觉得无所谓
我认为查询功能的查询结果做checkpoint就没什么必要,呵呵。
只是想到这里,问问而已。
作者: michelle_happy    时间: 2005-7-1 17:01
标题: 查询结果的循环比较
  1. [i]Set Conn = CreateObject("ADODB.Connection")
  2. Set Rs = CreateObject("ADODB.Recordset")
  3. Conn.Open "Description=kml-it;DRIVER=SQL Server;SERVER=KML-IT;UID=sa;PWD=password;APP=QuickTest Professional;WSID=KML-MICHELLE;DATABASE=kml_db"
  4. sql="select distinct grn_no from grn_dtl where grn_no like '%"&grnNo&"%' order by grn_no DESC"
  5. Rs.open sql,Conn,1,3
  6. Dim i,j,cell
  7.         i=1
  8.         j=2 'j=2的原因是因为页面上table是的数据是隔一行一条,不知   道怎么回事,开发人员弄的怪把
  9.                 Do while not rs.eof
  10.                         If i=13 Then  '13是每页显示出的最大行数,是个常数
  11.                                 i=1
  12.                                 j=2
  13.                                  Browser("::").Page("::").Frame("mainFrm_5").Link("下一页").Click
  14.                         end if
  15.                         cell=Browser("::").Page("::").Frame("mainFrm_5").WebTable("收货单号").GetCellData(j,2)
  16.                         If cell<>rs("grn_no") Then
  17.                 Reporter.ReportEvent 1, "查询功能"&cell, "查询结果错误."
  18.                                 Exit do
  19.                         else
  20.                                 Reporter.ReportEvent 0, "查询功能"&cell, "查询结果正确."
  21.                         End If
  22.                         rs.movenext
  23.                         j=j+2
  24.                         i=i+1
  25.                 Loop
  26. rs.close
  27. conn.close
  28. set conn=nothing[/i]
复制代码

这是查询一个字段的,对查询结果多页的情况也涉及了,其实应该把所有查询字段联合起来的,也就是改改sql语句和判断条件。

[ Last edited by lovetest6 on 2005-7-4 at 09:44 ]
作者: lovetest6    时间: 2005-7-4 09:50
对,对,对,应该是这个样子的,
但是实际上我们忽略了一个问题,呵呵:)

那就是这样的检查是否有意义,我总觉得,你的sql语句要和开发人员程序中的sql语句一样,对吧?但是我们这样检查,实际上就相当于检查同样的两个sql语句运行结果是否正确,呵呵。所以我觉得意义不太大。

当然了,如果数据库中存的信息有什么特殊字符,程序取出后做过相应的转换,那又另当别论。
作者: michelle_happy    时间: 2005-7-4 13:35
Originally posted by lovetest6 at 2005-7-4 09:50 AM:
对,对,对,应该是这个样子的,
但是实际上我们忽略了一个问题,呵呵:)

那就是这样的检查是否有意义,我总觉得,你的sql语句要和开发人员程序中的sql语句一样,对吧?但是我们这样检查,实际上就相当于检 ...


你说的是否有意义的问题我也曾考虑过,因为sql句子其实和开发人员写的是一样的,但是想想也未必,如果开发人员写错了,我写对了,这是不就能检查出bug了吗。呵呵,这样建立在充分相信自己的水平的基础上噢

database checkpoint本身也是这个作用把。
作者: lovetest6    时间: 2005-7-4 13:47
也有道理,呵呵。
作者: mel_snow    时间: 2005-7-5 15:34
这个问题我也考虑过,我的想法是只要时间和精力允许,建议在所有涉及数据库操作的地方都加上检查点。如果开发人员以后不小心误改了sql逻辑,这就能派上用场。
不错的例子,这里还是有不少高手的
学习啦
作者: lzz    时间: 2005-7-19 10:16
這幾天在做data access control測試,想起michelle_happy發的這個帖子,感覺她貼的查詢結果比較,是可以派上用場的。




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