51Testing软件测试论坛

标题: 当前问题:如何使用正则表达式实现Flights程序中WinList里的项目选择?(2012-3-26) [打印本页]

作者: lsekfe    时间: 2012-3-13 10:43
标题: 当前问题:如何使用正则表达式实现Flights程序中WinList里的项目选择?(2012-3-26)
本周的问题为“如何使用正则表达式实现Flights程序中WinList里的项目选择”

如果你也有问题想提出来和大家一起讨论,
请点击此处>>
说不定下期讨论的问题就是由你提出的哦,请快快参与吧!
[attach]77964[/attach]

获奖名单

奖项

获奖名单

奖励

答案链接

一等奖

hsjzfling

手机充值卡50元

33#

二等奖

icegirl1202

300论坛积分

10#


作者: 真实的追求者    时间: 2012-3-13 14:32
不懂怎么答,抢个沙发,顶一下
作者: d1988920    时间: 2012-3-13 20:33
我也不知道怎么答。新人来顶一下!
但是我有个问题,我想知道大家对测试用例的理解!也就是说什么是测试用例?
作者: d1988920    时间: 2012-3-13 20:34
我也不知道怎么答。新人来顶一下!
但是我有个问题,我想知道大家对测试用例的理解!也就是说什么是测试用例?
作者: 杨仔    时间: 2012-3-14 09:30
不懂
作者: pl80601983    时间: 2012-3-14 16:59
可不可以匹配任意字符串!
作者: 八目鱼    时间: 2012-3-14 20:20
我来学习的
作者: msnshow    时间: 2012-3-14 22:37
是QTP里面的么
作者: jh_soft    时间: 2012-3-15 10:04
这个不懂,来学习
作者: icegirl1202    时间: 2012-3-15 11:36
本帖最后由 icegirl1202 于 2012-3-15 12:13 编辑

我试着写一个看看吧
原内容是这样的
20253   DEN   08:12 AM   LON   03:23 PM   AA     $112.20
前面是5个数字->\d{5},然后是3个空格->\s{3},再是3个字符->\w{3}
之后的数字字符空格以此类推,碰到“.”和“$”符号前面加上\转义一下,整体表达式如下:
\d{5}\s{3}\w{3}\s{3}\d{2}:\d{2}\s\w{2}\s{3}\w{3}\s{3}\d{2}:\d{2}\s\w{2}\s{3}\w{2}\s{5}\$\d{3}\.\d{2}

抛砖引玉,呵呵,QTP里正则表达式的测试小工具,写好的表达式可以在里面判断一下是否符合。[attach]78003[/attach]
作者: icegirl1202    时间: 2012-3-15 12:15
QTP中判断正则表达式的小工具

[attach]78004[/attach]
作者: haibinpark    时间: 2012-3-15 17:04
不会弄,看看。
作者: mytestl    时间: 2012-3-16 16:35
lr里的下拉框选择用正则表达式实现吗?
作者: mytestl    时间: 2012-3-16 16:35
问的是lr里的下拉框选择用正则表达式实现吗?其实我也不会
作者: mytestl    时间: 2012-3-16 16:35
问的是lr里的下拉框选择用正则表达式实现吗?其实我也不会
作者: 爪巴    时间: 2012-3-16 16:36
不懂
作者: mytestl    时间: 2012-3-16 16:36
问的是lr里的下拉框选择用正则表达式实现吗?其实我也不会
作者: mytestl    时间: 2012-3-16 16:37
不好意思,卡了,点了好几次,结果上去了好几条
作者: 猴哥218    时间: 2012-3-16 17:00
路过
作者: icegirl1202    时间: 2012-3-17 13:18
回复 14# mytestl


    是QTP中的,昨天又写了一个
\d{5}\s{3}(\w{3}\s{3}\d{2}:\d{2}\s\w{2}\s{3}){2}\w{2}\s{5}\$\d{3}\.\d{2}
用正则表达式来检查list中这些机票信息的显示格式是否符合要求
作者: 太空鱼    时间: 2012-3-17 16:29
学习
作者: 無涙的星星    时间: 2012-3-17 17:07
观摩一下~
作者: Sience    时间: 2012-3-19 09:13
新手围观、
作者: lsekfe    时间: 2012-3-19 10:40
回复 8# msnshow


    恩,是QTP里面的知识哦!
作者: da乐    时间: 2012-3-20 11:22
本帖最后由 da乐 于 2012-3-20 11:26 编辑

百度了下
Function IsRegEqual(s_Text, s_Pattern)
  Dim regEx, retVal ' 变量
  Set regEx = New RegExp ' 创建正则表达式 .
  regEx.Pattern = s_Pattern ' 模式
  regEx.IgnoreCase = True
  IsRegEqual = regEx.Test(s_Text)
End Function

Function SelectByText(objWebList,s_Text,b_RegExpression)
  Set obj_Options=objWebList.object.options
  i_Count =obj_Options.length - 1
  For i=0 to i_Count
    If b_RegExpression And IsRegEqual(obj_Options(i).text,"^"+ s_Text) Then
      obj_Options(i).selected=True
      Exit for
    Elseif Lcase(s_text)=Lcase(obj_Options(i).text) then
      obj_Options(i).selected=True
      Exit for
    End If
  Next
End Function

Function SelectByValue(objWebList,s_Value,b_RegExpression)
  Set obj_Options=objWebList.object.options
  i_Count =obj_Options.length - 1
  For i=0 to i_Count
    If b_RegExpression And IsRegEqual(obj_Options(i).value,"^" & s_Value) Then
      obj_Options(i).selected=True
      Exit for
    Elseif Lcase(s_text)=Lcase(obj_Options(i).value) then
      obj_Options(i).selected=True
      Exit for
    End If
  Next
End Function

Function SelectByIndex(objWebList,i_Index)
  objWebList.object.options(i_Index).selected=True
End Function

下面是例子:

SelectByText Browser("Find a Flight: Mercury").Page("Find a Flight: Mercury").WebList("fromPort"),".*ond.*",TRUE
SelectByValue Browser("Find a Flight: Mercury").Page("Find a Flight: Mercury").WebList("fromPort"),"san.*francisco",TRUE
SelectByIndex Browser("Find a Flight: Mercury").Page("Find a Flight: Mercury").WebList("fromPort"),3
作者: metoto    时间: 2012-3-20 12:45
LS的好详细啊,WinList里的项目选择,真的要再审下题了
作者: icu200934    时间: 2012-3-20 17:00
可以作随机数获取winlist
作者: 冰释    时间: 2012-3-20 18:07
谢谢楼上大神 看了不是很明白 才接触 测试。。。。以后会多多努力
作者: GreenVitamin    时间: 2012-3-20 21:35
学习了~
作者: yingluowu    时间: 2012-3-21 11:01
来学习,顶一下!
作者: 冰释    时间: 2012-3-21 19:10
新手 不懂 同求
作者: femir    时间: 2012-3-22 15:52
正则表达式,还没用过,学习哈
作者: hsjzfling    时间: 2012-3-22 20:02
本帖最后由 hsjzfling 于 2012-3-22 20:08 编辑

先分析题意,目的应该是让选项的值中支持使用正则表达式。代码如下

  1. 'Select WinList中选项时支持使用正则表达式
  2. Function RegExpSelect(objWinList, strPattern)
  3. Dim objRegExp, arrAllItems, intIndex
  4. '创建正则表达式对象,设置区分大小写
  5. Set objRegExp = New RegExp
  6. objRegExp.IgnoreCase = False
  7. objRegExp.Pattern = strPattern
  8. '取到WinList下的所有选项的文本,赋值到数组
  9. arrAllItems = Split(objWinList.GetROProperty("all items"), VbLf)
  10. '遍历选项数组
  11. For intIndex = 0 To UBound(arrAllItems)
  12.   '判断表达式是否能匹配当前选项,能匹配则选中之,否则继续循环
  13.   If objRegExp.Test(arrAllItems(intIndex)) Then
  14.    objWinList.Select intIndex
  15.    Reporter.ReportEvent micPass, "RegExpSelect Successful", "Pattern=" & strPattern & "   First Matched Item=" & arrAllItems(intIndex)
  16.    Set objRegExp = Nothing
  17.    Exit Function
  18.   End If
  19. Next
  20. '若遍历完所有选项都不能匹配,则报出不能匹配的错误,写入日志中
  21. Reporter.ReportEvent micFail, "RegExpSelect Failed ", "No Item Matched, Pattern=" & strPattern
  22. End Function
复制代码


然后是函数的使用示例,这里我们可以直接将之注册到WinList对象的方法中去,示例如下

  1. '将RegExpSelect函数注册到WinList的方法中去
  2. RegisterUserFunc "WinList", "RegExpSelect", "RegExpSelect"
  3. '在WinList中使用RegExpSelect方法,选择第一个能符合表达式的选项
  4. '比如这里希望能自动选一个上午10点到12点间Portland飞往Los Angeles且价格低于180美金的航班
  5. Window("Flight Reservation").Dialog("Flights Table").WinList("From").RegExpSelect "\d+ POR 1[01]:[0-5][0-9] AM LAX \d{2}:\d{2} [AP]M \w+ \$1[0-7]\d\.\d{2}"
复制代码

作者: jingyu1954    时间: 2012-3-24 17:07
新人来学习不太懂
作者: 冰释    时间: 2012-3-25 14:12
不明白额。。。
作者: icegirl1202    时间: 2012-3-26 12:52
回复 33# hsjzfling


    这个答案不错
作者: mimmy    时间: 2012-3-27 18:23
^\d{4,5}\s{3}([A-Z]{3}\s{3}(0[0-9]|1[0-2]):[0-5][0-9]\s[AP]M\s{3}){2}[A-Z]{2,3}\s{5}\$[1-9][0-9]{2}\.[0-9]{2}$

下面我的测试数据:
20332   FRA   10:12 AM   LAX   05:23 PM   AA     $112.20
12490   LON   10:24 AM   PAR   12:24 PM   AF     $167.20
5174   POR   09:05 AM   DEN   10:46 AM   NW     $145.00
11553   SEA   08:00 AM   SYD   11:00 AM   DL     $252.50
15595   SEA   12:13 PM   LON   01:39 PM   QF     $138.40
16968   SYD   10:38 AM   SFO   12:48 PM   QF     $196.40
1060   SEA   11:02 AM   SFO   12:43 PM   TWA     $168.20
作者: duangang312    时间: 2012-4-6 22:45
^\d{4,5}\s{3}([A-Z]{3}\s{3}(0[0-9]|1[0-2]):[0-5][0-9]\s[AP]M\s{3}){2}[A-Z]{2,3}\s{5}\$[1-9][0-9]{2}\ ...
mimmy 发表于 2012-3-27 18:23


写的太啰嗦了,用不着这样的,这种测试代码里面不需要严格匹配的。所以尽可以用\d+\s+\W+这种方法来匹配。
第二个,楼主的提议应该是根据某个参数来匹配选项。如这里,参数假如是出发(FRA),到达城市(LAX),那么可以用.?FRA.?LAX来匹配,其实就可以了,用不着这么复杂。在这个场景下面,这个表达式足够用了。
作者: mimmy    时间: 2012-4-7 00:07
写的太啰嗦了,用不着这样的,这种测试代码里面不需要严格匹配的。所以尽可以用\d+\s+\W+这种方法来匹配 ...
duangang312 发表于 2012-4-6 22:45

我不认同你的观点,不严格匹配怎么能测试出程序的错误呢?
楼主只是给了一个例子,列表中除了FRA、LAX还有其他代码,不能在表达式里写死了
作者: duangang312    时间: 2012-4-7 18:06
我不认同你的观点,不严格匹配怎么能测试出程序的错误呢?
楼主只是给了一个例子,列表中除了FRA、LAX还 ...
mimmy 发表于 2012-4-7 00:07



    楼主的目的只是为了按照参数选取下拉列表中的值而已,并不是为了检验其中的格式。所以我说这种情况下,使用简单匹配足够了。我写的只是一个例子咯,如果想要别的参数,尽可以把这段代码封装成一个函数,调用即可。使用正则要看场合,能不用正则就不用正则,毕竟使用正则会影响性能,可读性也不好。正则写复杂了,出错的可能性太大,比方你写的这里,你觉得12:01PM是正确的值么?
作者: mimmy    时间: 2012-4-7 21:24
楼主的目的只是为了按照参数选取下拉列表中的值而已,并不是为了检验其中的格式。所以我说这种情 ...
duangang312 发表于 2012-4-7 18:06

如果下拉列表有数据格式不正确,测试要怎么发现错误呢?
作者: linglvchao    时间: 2012-4-9 15:10
不懂、




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