专栏名称: 51Testing软件测试网
51Testing软件测试网,人气最旺的软件测试技术门户,提供软件测试社区交流,软件测试博客,人才服务,测试沙龙,测试杂志,测试资料下载等全方位信息服务,是国内最专业的软件测试就业培训、企业服务供应商...
目录
相关文章推荐
51好读  ›  专栏  ›  51Testing软件测试网

UFT之使用断言来控制脚本流

51Testing软件测试网  · 公众号  · 测试  · 2017-02-04 17:31

正文


  在计算机程序中,断言(ASSERT)表示为一些布尔表达式,被预计为在程序的某个条件下,该表达式值一直为真。如果断言在运行中值为假,则断言会抛出失败错误的结果,程序会崩溃而终止,或者抛出一个异常提示。

  这篇短文描述了断言方法在 UFT*中是如何运行的:

  1.执行一个预定义的恢复过程或者在某函数的返回值为特定值时退出

  2.支持数据驱动错误处理

  3.让代码更加简洁从而增强可读性,编写更简单。

  *这里描述的方法基本上来说是通用的,虽然细节上会有所不同,也可在其他工具里被使用到。

  步骤一:定义触发器-存储过程对

  第一步是定义存储过程,根据函数返回的各种值来调用。简单来说,以下面在UFT的XML文档里定义的环境变量为例:

  

  

  TRIGGER_0

  

  

  

  TRIGGER_1

  

  

  

  TRIGGER_2

  

  

  

  TRIGGER_3

  

  

  

  TRIGGER_4

  

  

  

  该例子里面包含了以TRIGGER_.为前缀的变量。比如:TRIGGER_1定义了当函数返回一个失败结果(micFail = 1)的时候做的事情。通常micPass (=0), micDone (=2), 或者 micInfo (=4)返回的值,不需要做任何事,所以不用定义。如下所示,断言方法就需要保证在不返回失败的这些情况下不需要做任何事情。然而为了完整性,上面的xml文档里包含了他们。

  步骤二:写UFTStopTest.vbs脚本(外部脚本)并添加该脚本的路径到环境变量文档里

  编写下面的代码保存为UFTStopTest.vbs,保存路径到C:/Automation/Scripts/.

  Dim qtApp

  Set qtApp = CreateObject("Quicktest.Application")

  qtApp.Test.Stop

  Set qtApp = Nothing

  在UFT_STOP_SCRIPT环境变量中定义上面名为UFTStopTest的脚本的路径

  

  

  

  UFT_STOP_SCRIPT

  

  

  

  步骤三:定义断言(ASSERT)方法

  ASSERT方法有一个入参(通常是0到4之间的整数,就像上面第一个UFT报告代码里定义的那样),不同的整数入参决定了调用Environment里面哪个触发器下的代码来执行。如果没有找到对应的触发器,则返回一个空字符串给ASSERT。如果ASSERT返回是空,则无执行。

  Function ASSERT(ByVal intTriggerCode)

  On Error Resume Next

  ASSERT = Environment("TRIGGER_"&intTriggerCode)

  If(Err.Number0)Then

  Err.Clear

  ASSERT = ""

  End If

  Execute(ASSERT)

  End Function

  步骤四:定义ExitTestEx方法

  ExitTestEx方法使用UFT's COM对象尝试停止测试。备注:我试图运行Execute("ExitTest"),然而结果是不可靠的,有时候它会让测试终止有时候则不会。所以我决定尝试另外一种包含外部脚本的方法,它可以被UFT调用来终止现运行的测试。 如下:

  Function ExitTestEx()

  Dim Shell

  Print "Exiting test " & Environment("TestName")

  Set Shell = CreateObject("Wscript.Shell")

  ExitTestEx = Shell.Run("CMD /C "&Environment("UFT_STOP_SCRIPT"), 1, false)

  Set Shell = Nothing

  End Function

  步骤五:使用ASSERT方法

  ASSERT(MyFunction(param1, ..., paramN))

  ASSERT方法如何运行

  函数MyFunction返回的特定值值作为入参传给ASSERT方法,并执行ASSERT方法。如上面步骤一所示的例子,若返回值是1(micFail)则触发ExitTestEx方法执行,若返回值是micPass、micWarning、micDone、micDone的值,则什么都不执行。ExitTestEx方法将使外部vbs脚本执行,通过调用UFT's COM对象让测试终止。

  当然,在失败的情况下,函数必须返回一个有效的触发代码来调用适当的恢复过程或命令。这样的话,使用UFT的方法,诸如Exist、WaitProperty、CheckProperty和Check,返回一个'真'或者'假'的返回值,这种机制,是不够的。但是,在GUI自动化测试中,发现经常需要等待某些事件发生,如打开或关闭一个对话框窗口。在大多数情况下,在这样步骤下若发生故障,则执行以上步骤是毫无意义的。出于这个原因,将使用一个很好的实用程序去替换这些方法(如可以使用RegisterUserFunc,这里不具体讨论),这样可以符合"返回0(micPass)是成功,返回1(micFail)是失败"的标准。

.......

本文出自《51测试天地》原创测试文章系列(四十四)

 
推荐阅读

点击阅读☞软件测试工程师学习安全测试总结

点击阅读☞敏捷环境中的自动回归测试

点击阅读☞软件测试沟通渠道规范要求

点击阅读☞QTP使用之一个灵活的数据驱动型的选择案例函数

点击阅读☞需求评审的会议记录规范

点击左下角“阅读原文”查看更多内容!