51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1852|回复: 0
打印 上一主题 下一主题

[原创] QTP中的一些实用技巧

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-8-28 08:11:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  由于一直以来事情都比较多,最近上课还有其它的事情,所以本来答应一个朋友把脚本帮他写一些,但是耽误了3-4天了,实在不好意思。这里把脚本简单说一下,我们分析一下。
  当时问题时这样的,“我的错误的用户名就没办法登陆”,其实含义就是脚本最好能处理成功的用户名错误的用户名,那么这里涉及到脚本的设计。
  目标如下:
  1.    脚本需要处理成功和失败的用户的登陆
  2.   数据驱动
  设计开发脚本如下:
  第一步录制脚本如下
  Browser("智能变电巡检仪系统 4.0").Page("智能变电巡检仪系统 4.0").WebEdit("txtLoginName").Set "吕巍"
  Browser("智能变电巡检仪系统 4.0").Page("智能变电巡检仪系统 4.0").WebButton("登 录").set ""
  Browser("智能变电巡检仪系统 4.0").Page("Page").Syn
  Browser("智能变电巡检仪系统 4.0").Close
  以上为录制的正确的用户名,下边录制错误的用户名
  Browser("智能变电巡检仪系统 4.0").Page("智能变电巡检仪系统 4.0").WebEdit("txtLoginName").Set "xx"
  Browser("智能变电巡检仪系统 4.0").Page("智能变电巡检仪系统 4.0").WebButton("登 录").set ""
  出现错误提示“该用户不存在”
  第二步 增强脚本
  现在需要设计的是一套脚本驱动所有的测试数据,这样可以驱动所有的用例数据,qtp中提供了datatable。
  但是有数据驱动也要做一个事情就是如何处理错误的用户名和正确的用户名,如何结合起来呢?
  这里我把datatable看作存放测试用例的地方,里面放入测试数据,还放入测试的预期结果。这样我的设计已经出现雏形了。
  我把datatable设计为三列
  username  password status
  吕x
  xxx       xxxx     该用户不存在
  第三列放入最后执行的结果,我设计的是空为成功登陆,如果有信息就用实际运行的结果和这一列对比.好了万事俱备只欠东风了
  修改脚本如下:
  Dim iStatus
  Browser("智能变电巡检仪系统 4.0").Page("智能变电巡检仪系统 4.0").WebEdit("txtLoginName").Set DataTable("username", dtLocalSheet)
  Browser("智能变电巡检仪系统 4.0").Page("智能变电巡检仪系统 4.0").WebButton("登 录").set DataTable("password", dtLocalSheet)
  iStatus = DataTable("status", dtLocalSheet)
  If   iStatus=""  Then
  Browser("智能变电巡检仪系统 4.0").Close
  End If
  If   iStatus="该用户不存在"    Then
  Reporter.ReportEvent micFail, "登陆", "登陆失败."
  End If
  Browser("智能变电巡检仪系统 4.0").Close
  第三步,设置脚本运行过程
  打开 tests-〉settings
  设置RUN TAB页面下 Datatable iterations中 Run On all rows
  这样就完成了整个脚本的设计工作,以上通过一个简单例子吧脚本的设计和软件的功能结合起来,达成脚本的设计效果。
  QTP的错误恢复场景机制
  在脚本运行过程中,可能会出现一些非预期的事件、错误、程序崩溃等情况,阻止脚本继续执行下去,测试脚本可能会一直暂停执行直到某些界面操作被执行才能恢复。
  为了处理这类型的错误,QTP通过创建Recovery Scenarios,并关联到某个测试脚本。可以把这些定义的Recovery Scenarios称为恢复场景,这些恢复场景会被相应的事件触发而执行。
  Recovery Scenarios的设计目的是用于处理那些不可预见的事件,例如,可以定义一个Recovery Scenario用于处理打印错误,这样当运行脚本过程中打印机出现错误时,Recovery Scenario就会指导QTP执行某个操作,例如单击打印错误提示框的默认按钮。对于那些可预见的错误,则应该使用IF语句在脚本中处理,而不要依赖Recovery Scenario。
  在QTP中使用Dictionary对象
  VBScript的Dictionary 对象与PERL的关联数组(associative array)类似,其中存储的内容可以是任何数据,每一个存储的数据都与一个唯一的键(Key)关联,键用于获取每一项数据,键通常是整型或字符串类型。
  在QTP中,可以把Dictionary 当成数组来用,而且可以随时添加数据,而不需要预先定义大小。下面是一个使用的例子:
  ' 创建Dictionary对象
  Set Dic = CreateObject("Scripting.Dictionary")
  ' 添加Dictionary的key和value
  For Iterator = 1 To 3 Step 1
  Dic.Add CStr(Iterator),Iterator & "_Value"
  Next
  ' 循环读取Dictionary的key和value
  For Iterator = 1 To Dic.Count Step 1
  Msgbox  Dic.Item(CStr(Iterator))
  Next
  DicArray = Dic.Items
  'For I = 0 To Dic.Count
  For I = 0 To UBound(DicArray)
  Msgbox DicArray(I)
  Next
  ' 判断是否存在某个Key,如果存在,则把其去掉
  If Dic.Exists("2") Then
  Msgbox Dic.Item("2")
  Dic.Remove("2")
  End If
  Msgbox Dic.Count
  ' 清空所有 Key和Value
  Dic.RemoveAll()
  Msgbox Dic.Count
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-10-5 21:18 , Processed in 0.090781 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表