自动化测试不稳定因素分析

Rational Functional Tester ( 以下简称 RFT) 是 IBM Rational 家族中一款适用于功能测试、回归测试的自动化测试工具。RFT 提供的强大的录制回放功能,以及灵活的可编程功能提高了自动化测试的可重用性,极大节省了人力成本。在实际使用中,一些团队却经常遇到一些问题,尤其是刚刚开始使用 RFT 进行自动化测试的团队,他们经常发现录制的脚本或者经过简单编程的脚本不能很稳定的多次运行,重复使用过程中遇到的各种各样的问题,让他们束手无策。实际上,新团队遇到的问题很多是可以避免的。

脚本运行不稳定主要包含两方面的因素,一方面是脚本的可靠性。RFT 作为一款广泛使用的自动化测试工具,其可靠性和稳定性还是值得信任的,很多团队利用自己丰富的使用经验提供了很多优秀的测试框架。在此基础上,持续进行的脚本优化也可以增加脚本的可靠性;另一方面就是运行环境的影响,RFT 作为一款对图形界面严重依赖的自动化测试工具,运行环境的变化对脚本运行结果有很大的影响。运行环境主要包括操作系统配置,测试工具配置及浏览器配置等,其中浏览器配置是最具有代表性并且对运行结果影响比较直接的因素。实现无人工干预的自动化,我们必须要对脚本进行持续优化,使之尽量可靠。但是运行环境相关的问题却是无法通过脚本优化完成的,比如一些浏览器相关的问题,这些看似不起眼的配置,却能在脚本运行中起到很明显的作用。然而对于新团队而言,这点却是最容易被忽略的因素,比如屏幕分辨率的不同,网页字体的大小会导致对象位置的变动;安全内容无法正常显示导致网页不能正常刷新等。本文接下来将以常用的 Internet Explorer(以下简称 IE)为例,基于多年的 RFT 的使用经验,结合实践,用详细的语言介绍如何配置你的 IE 使得自动化脚本运行更稳定。

Web 应用的自动化测试中常见的浏览器问题

对于 Web 应用而言,运行环境主要是指浏览器。不同类型的浏览器以及浏览器的不同版本对 Web 应用的支持是有区别的。而同一浏览器进行了不同配置后,访问同一应用,现象也会有所不同。笔者下面以 IE 为例,就一些测试 Web 应用过程中遇到的各种和浏览器相关的问题进行详细分析。

RFT 在启用浏览器过程遇到的问题分析

在 RFT 中启用浏览器是浏览器配置的第一步,这也是 RFT 使用的基础,启用过程在此不再赘述。笔者仅对可能出现的问题进行分析。

问题一:浏览器提示 JVM 没有运行或者没有被启用,页面显示如下错误信息:

A JVM is not running in your browser /The JVM used by the browser does not appear to be enabled.

对于这种情况,首先请确认运行环境中已经安装了合适版本的 JDK,然后确认 RFT 中已经启用了相应的 JRE, 同时 IE 的高级选项中已经选定相应的 JRE,如图 1 所示

图 1. 确认浏览器及 RFT 中已正确启用 JRE

问题二:启用浏览器成功,但是 HtmlTestDomainImplementation Name = Unknown

此种情况是由于启用了下一代 Java 插件导致的,可通过 Java 控制面板进行配置,然后在重新启用浏览器。配置参见图 2。

图 2. 禁用下一代 Java 插件

问题三:曾经正常启用了浏览器,但是在卸载并重新安装浏览器后, RFT 无法再次正常启用浏览器。

由于第一次正常启用后,RFT 及 JRE 的相应插件信息都记录在了浏览器中,所以当卸载安装浏览器后,需要打开浏览器的插件管理,检查原来的插件在新安装的浏览器中是否被禁用,如果被禁用,重新启用即可,如图 3 所示。

图 3. 启用浏览器插件

找不到应该出现的弹出窗口 / 下载窗口

脚本运行过程中期望出现弹出窗口,脚本运行的客户端却做了屏蔽,脚本无法检测到弹出窗口中的内容,导致脚本运行失败。为了避免这类问题,脚本运行开始前,需要关掉弹出阻止的功能,如图 4 所示。如果使用者希望仅对特定网址起作用,也可以启用弹出阻止,然后在"Settings"里面对特定网址进行设定,达到过滤目的。

图 4. 关掉弹出阻止功能

对于下载窗口,根据脚本是否需要提示下载文件保存位置而定,设定方式参见图 5 示意。

图 5. 配置下载弹出窗口

不安全的内容无法显示

在浏览器中访问配置了安全访问认证的页面时,可能会遇到提示页面包含不安全内容,是否只显示安全内容的对话框,为了避免此类弹出框,可通过浏览器的配置设定此类混合内容是否正常显示。设置见图 6。

图 6. 显示混合内容

缓存怎么清空

为了保证每次运行时,脚本都有一个全新的运行环境,避免历史数据及缓存对运行产生影响,每次脚本运行前浏览器的临时文件夹都需要清空,保存的历史数据也需要清理干净。通过图 7 所示配置,每次浏览器关闭时,这些数据会被自动清空,为下次运行提供了干净的环境。

图 7. 清空临时文件夹

浏览器的自动填充功能如何禁用

IE 提供的文本框自动填充功能,可以自动记忆某些词条,下次使用的时候为用户提供选择,极大方便了用户的使用,然而在自动化测试中,自动填充功能有时会遮盖相邻的文本框,自动化脚本无法正确输入相应内容,导致脚本运行出错。如图 8 所示。

图 8. 自动填充遮盖相邻文本框

当启用了自动填充功能后,由于 wpsadmin1/wpsadmin2/wpsadmin3 已经被记忆,当脚本输入 wpsadmin 时,提示列表仍然存在,此时如果脚本试图在第二个文本框中输入内容,则会出现问题,因为该文本框已被提示列表完全遮住。所以我们建议在自动化脚本运行环境中,尽量避免启用自动填充功能。禁用自动填充功能的设置如图 9 所示。

图 9. 禁用自动填充功能

如何去除我不需要的警告信息

当禁用了弹出阻止功能以后,你可能会遇到另外一些不需要的警告信息,这些警告信息随时以弹出窗口方式在脚本运行的某一刻弹出来,你无法预料脚本运行到哪一步会遇到,就像埋下了定时炸弹,给脚本运行带了更多的不稳定因素,屏蔽这些警告信息成为我们要解决的另一个问题。通过 IE 的选项 -> 高级设置中的设置,可以达到这一目的,如图 10 所示,首先禁掉页面脚本调试功能,对于页面脚本错误,不需要弹出窗口;同时启用 IE 的自动恢复机制,在 IE 出现意外崩溃的情况下能够自动恢复,保证脚本运行的连贯性。

图 10. 禁用脚本调试

另外对于明显的警告提示予以屏蔽,如图 11 所示,这样绝大部分意外弹出窗口基本被屏蔽,脚本运行在可控环境中。

图 11. 清除警告信息

到底该不该配置可信赖站点

把被测应用设置为可信赖站点,在访问时可减少不必要的弹出窗口,简化脚本处理过程,加速自动化运行。然而当一个应用运行中可能访问多个不同站点或者站点间相互访问时,是否配置可信赖站点则值得讨论,尤其是一个可重复利用的脚本,运行在可信赖站点和不可信赖站点上,结果会有很大不同。参见图 12 所示安全警告信息。

图 12. 安全警告

当两个站点一个是可信赖的,一个是不可信赖的时候,你可能会意外的遇到下列对话框。而当两个网站都是不可信赖或者可信赖时,这类对话框则会被避免。因此为了脚本的可靠性和可重复使用性,我们建议尽量避免配置可信赖站点,虽然这有可能会增加脚本的处理难度,但是却能提高稳定性。

 

回页首

WebSphere Portal 自动化脚本使用中遇到的浏览器异常和解决方案

WebSphere Portal 是 IBM 公司提供的包括运行时服务器、服务、工具和许多其他特性的企业级门户网站解决方案,这是一个典型的 Web 应用。在 WebSphere Portal 的自动化测试中,我们发现即使根据向导对浏览器进行了定制,在脚本运行中偶尔还会遇到一些异常现象。对于这些不常见的现象,我们不做常规设置,但是问题一旦出现,就需要及时有效的解决方案。笔者结合在 WebSphere Portal 测试中遇到的一些异常,给出了经过实践的行之有效的解决方案。

Microsoft Visual C++ Runtime Library 错误

访问 Web 应用时,不同运行环境可能会遇到弹出窗口为 Microsoft Visual C++ Runtime Library 的错误提示。出现这种情况一般是由于被测产品运行所需要的运行库与运行环境所提供的运行库版本不一致所致,运行环境需要更新运行库版本至产品需要的版本,如在 WebSphere Portal 8.0 产品中,浏览器所在的客户端需要更新此运行库在 Microsoft Visual C++2008 Redistributable 版本。

弹出页面标题显示不正常

某些 Web 应用在操作弹出窗口时,会有对弹出窗口标题进行验证的需要,但有时你会发现弹出窗口标题显示为一长串字符,而非标题本身。比如在访问 WebSphere Portal 时,我们期待弹出窗口标题出现 People Finder,但在某些运行环境中并非如此,图 13 展示了不同配置情况下,弹出窗口标题的区别。

图 13. 弹出窗口标题显示

这种情况主要是由于浏览器的安全设置中允许网站不显示地址栏和状态栏的情况下打开网页。调整方式很简单,参见图 14,在浏览器的安全设置中,禁用掉此项即可。

图 14. 网页地址栏 / 状态栏显示配置

弹出窗口提示停止脚本运行

当自动化脚本运行一定时间后,你可能会遇到浏览器崩溃或者无响应的情况,同时弹出对话框提示 "A script on this page is causing Internet Explorer to run slowly...",正如图 15 所展示,对话框弹出后,页面访问被阻止,页面不再响应脚本的任何请求。

图 15. 页面无响应

这是由于页面上某些 ActiveX 控件或者 JS 脚本执行时间过长,超过了注册表中设定的时限导致的。当这种情况出现后,整个自动化运行处于停滞状态,因为无法预知,所以脚本中也没有办法做灵活的处理。但是这种情况下,可以通过修改注册表中 IE 的超时时限来提前预防。修改方法如下:

1) 编辑注册表,找到下列 KEY

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Styles(如果 Styles 不存在,则需要手动创建)

2)在 Style 下创建 DWORD value,名字为 MaxScriptStatements,值为你希望的数值。如果不确定,可以设定成 0xFFFFFFFF。

什么样的屏幕分辨率适合自动化测试

屏幕分辨率的问题是个有争议的话题,理论上无论分辨率设置成多少,自动化测试工具都应该可以正确的定位对象,尤其对于可编程的工具而言。实际上,要想达到这个要求,必须有一个前提,就是你的运行环境和你的脚本开发环境的屏幕分辨率必须是一致的,否则即使是可编程的工具在获取对象的相对位置时也容易出现问题,运行极不稳定。

运行环境能否用远程桌面访问

为什么我的脚本在很多机器上运行正常,但是每当远程桌面连接的时候就出现问题呢 ?

我需要访问我的脚本运行环境,是该用远程桌面还是用其他的远程连接工具如 VNC 连接呢?相信这是很多新手经常面临的困惑。

在实践中我们发现,远程桌面访问运行环境不是完全不允许的,只是在连接过程中会给运行环境带来不稳定因素。首先,使用不同分辨率机器远程桌面连接同一台机器时,远程桌面的屏幕分辨率取决于当前连接所用的机器,而不同屏幕分辨率在运行同一脚本时结果有很大差别,这在前面我们已经提及;其次,断掉远程桌面连接时可能导致机器锁屏,从而使正在运行的脚本因检测不到相应的屏幕对象而受阻失败;

再则,如果远程机器开启了多用户登录,那么其中一个用户在运行自动化脚本时可能与其他用户的进程发生冲突,从而导致运行失败。

基于以上种种分析,我们并不建议在自动化脚本的运行环境中开启远程桌面连接,用户可以使用诸如 UltraVNC、TightVNC 等远程连接工具来连接运行环境,以保证自动化脚本的执行不受中断。

 

回页首

总结

自动化测试的稳定性和可靠性是一个长期的话题,很多团队都进行过一些探讨。除了技术上的革新和改进,最有效也是最基本的提升自动化测试稳定性的方式便是改善运行环境,扫清自动化运行过程中的障碍,减少人工干预。通过本文,可以清楚的了解浏览器中哪些配置对你的自动化脚本有影响,可以最大限度减轻运行过程中浏览器的负面作用,提高脚本运行的稳定性。笔者希望本文能起到抛砖引玉的作用,使自动化测试开发人员对运行环境有更多的了解和认识,从而提出更多行之有效的提升自动化运行品质的方案。