听海——sky 发表于 2018-4-9 16:07:13

SilkTest高级进阶系列11- SilkTest调试

SilkTest基本上有两种调试方法,一种是直接debug脚本里面的main函数,另外一种是debug某个特定的testcase。
在后一种情况下,silktest会直接在该testcase的入口处设置一个断点,开始debug后就会在testcase入口停下来,
等待用户进行调试。
silktest和其他的编程工具一样,提供了基本的断点设置,step over/step out/step in等功能,并且可以运行到指
定行停止。通常,在调试过程中,我们可以通过global variable和local variable两个菜单,查看运行期的变量值,
并且可以通过set value按钮来为某变量设置新值。

我们最长用到的两个调试功能应该是查看变量值的expression和查看调试过程的transcripts,不过silktest的调试
界面做的不太友好,起码对于早期版本是这样,例如我现在用的silktest2006R2,都没有基本的窗口悬浮功能。
其中expression里面只能输入那些有值的变量和表达式,否则silktest会提示你的输入没有返回值。而transcripts
功能会将调试过程中的log打印出来,以便用户一边调试一边查看有用的信息,除此之外你还可以在transcripts
窗口中单独执行语句,这可以帮助你多次执行某些已经执行过的语句,从而判断问题可能的产生之处。

需要注意的是,你可能会在expression窗口里面使用WindowTag()和GetTag()两个函数,其中WindowTag()返回
的是脚本定义的控件tag而GetTag()返回的是silktest识别控件用的tag,如果此时控件不存在的话,GetTag()就会
返回空值。

silktest在执行过程中会占用silktest agent,这样你会发现,无法在调试过程中使用record菜单下和抓取tag相关的
功能,例如identifier和window tag。而我们经常需要在调试过程查看某些控件的tag值,这时候你可能需要用tw
o agent debug方法(我自己起的名字)。我们可以在同一个机器上再运行一个silktest实例,并且手动启动silktest
agent,这样的话,我们就可以用第二个silktest agent实例的record功能来查看控件的tag信息。

在一些特殊情况下,你可能无法调试某些脚本,比如调试时会动态变化的控件tag,该情况极其罕见,你在调试
的时候脚本永远都是正确工作的,但是正式执行时,错误却总能复现。还有就是某些特殊的控件操作过程无法
实现单步调试,在这些情况下,你只能通过打印尽可能详细log的方式来一次次运行脚本,从而来观察脚本执行
的过程。一个有效的调试方法是在调试脚本前认真阅读脚本并且充分理解脚本的逻辑,这样有助于你定位错误,
最好不要尝试碰运气式的修改->运行调试方法,经验证明该方法是极其低效的。

最后,其他编程语言的编程规范也可能帮助你发现脚本问题所在,比如检查全局变量,变量赋予初始值等,本
文就不再赘述。

页: [1]
查看完整版本: SilkTest高级进阶系列11- SilkTest调试