关闭

Windows GUI自动化测试技术的比较和展望

发表于:2009-10-13 16:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:yufun    来源:网络转载

  UIAutomation

  伴随着自动化测试的应用越来越广泛,以及WPF的发布,微软在MSAA的基础上,对MSAA进行封装,重新设计并实现了UIAutomation的类库(.Net),微软根据自动化测试的需求,重新实现了一套自动化体系,大家可以看下边的图,这个比较准确。从此自动化测试人员迎来了更广阔的一片蓝天(虽然还飘着点小小的乌云……),随之也有了一些小小的纠结:

  a. UIAutomation (后边就简称为UIA) Vs MSAA

  在UIA发布的时候,基于MSAA的自动化工具已经发展的非常成熟,比如Silktest和WinRunner… 那么大家在开发一个自己的自动化工具的时候,应该用MSAA呢,还是UIA? 这篇文章可以给一个两者的大概关系:UI Automation and Microsoft Active Accessibility。 按照微软的想法和设计,UIA是要取代MSAA成为自动化测试的标准类库,并且对WPF来说,UIA才是一等公民。从架构上来讲,UIA在针对标准控件的时候,通过UI Automation Proxy调用了MSAA Server,基本上覆盖了MSAA的功能:

  从上边的图来看,从理论上来说,UIA应该是可以完全替代MSAA的,但是理想和现实往往是有很大差距的,从现实来看,UIA不能完全替代MSAA,因为一个经典的UIA的Exception:

  Exception

  Time Stamp : 10/9/2009 4:37 PM

  Element : Element details not available.

  Name : TreeValidationException

  Message : UI Automation tree navigation is broken. The parent of one of the descendants exist but the descendant is not the child of the parent

  Stack Trace :  at UISpy.Base.Tree.BuildTree(AutomationElement element)

  at UISpy.Base.Tree.BuildTreeAndRelatedTrees(AutomationElement element)

  只要用过UI Spy(UIA的一个小工具,可以看到整个UIA的控件树,类似AccExplorer)的基本上都会碰到,当移动鼠标并识别某个控件时,就有可能看到上边的Exception,意思是说,UIA在构造UI树的时候失败,鼠标所指向的控件不合法。但是如果你用AccExplorer来看,就完全没有这个问题,控件树的结构也比较完整。就意味着,你无法通过遍历控件树来找到想要的控件,因为控件根本就没有构造在UIA的控件树上,当然也无法对它进行任何操作(当然,如果你用屏幕坐标,然后通过AutomationElement.FromPoint来做,还是可以做的,但是请注意,你使用了屏幕坐标)。在一些小的程序上,可能不是很明显,如果是大的项目,并且有很多自定义控件的情况下,这个问题就会被放大,这个Exception就像一个黑洞一样会吞掉很多控件,也意味着你需要在很多地方去写代码来绕过这个问题,同时也带来了维护成本的大幅提高。

  b. Managed vs Unmanaged

  UIA的类库是作为.Net3.0的一部分发布,这就意味着UIA只能用.Net的语言来写,并且运行在.Net托管堆中,性能就成为其中一个问题,虽然我不认为是很大的一个问题,一般来说自动化测试程序在等待UI反应的时间要远远多于这一点点的性能差异。

  c. In-Process Vs Out-Process

  尽管大部分的自动化测试工具和测试代码都是运行在进程外,但是还是有一些特殊的应用需要在进程内进行,比如在API测试中,需要进行UI交互,为了保证API测试的自动化,就必须在进行内写自动化脚本。MASS是支持进程内操作的,但是UIA没有宣布支持,在进程内使用时会有很大的性能问题,也可能导致一些未知的问题。

  d. 自定义控件的支持

  这个UIA就有先天优势了,但也需要开发人员的支持,或者有能力的测试人员也可以自己实现,这就是UIA中的两种Provider,一种内建,一种外置,只要实现了Provider,自定义控件就可以完美的支持UIA。当然了,对标准控件来说,UIAutomation发布在Win32控件和WinForm的控件之后,所以微软就帮我们实现好了对应这些控件的Client Provider,所以UIA对于以前的Win32和Winform控件也是完美支持的,对WPF的标准控件就更不用说了,天生就是带有Provider支持的。具体的我就不展开了,大家有兴趣可以看这个:UI Automation Providers Overview

32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号