自动化测试脚本冻结问题分析与解决方案

发表于:2012-10-29 10:51

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

 作者:李朝阳 杨莉 陈昱旻    来源:51Testing软件测试网采编

  简介:Rational Functional Tester(RFT)运行过程中偶尔会发生脚本停止响应,既不报错也不继续运行,导致自动化测试项目运行效率低下的问题,本文阐述如何利用 FutureTask 类开辟子线程,设置超时来解决这一问题的思路和具体实现。

  概述

  在用 Rational Functional Tester(RFT)进行自动化测试的过程中,偶尔会发生脚本停止响应的情况:即运行一个自动化测试项目很长时间后想要查看测试结果,却发现由于某个脚本的冻结,测试并没有完成,测试程序卡在某一点,不执行也不报错,使得后面的脚本都没有被运行。出现这种情况的原因可能是 AUT(Application Under Test)出现死锁,浏览器页面停止响应,也可能是 RFT 和 AUT 的兼容性问题,情况复杂,很难避免。脚本冻结发生后,只有先通过进程关闭 AUT,本脚本会报错并 Failed,后面的脚本才会继续运行。这种情况的出现严重影响了测试的效率,给测试人员带来很大的困扰。

  本文通过 java 类 FutureTask 完美解决了上述问题。在本文中,作者将结合自己在测试中遇到的实际案例,简要介绍 FutureTask 的内容,在解决这个问题上的优势,以及具体如何运用 FutureTask 来解决脚本冻结问题。

  脚本冻结问题

  本节以 IE 浏览器冻结为例描述脚本冻结的现象:某个自动化测试脚本的测试对象是嵌入到 Office 软件中的内容管理插件,具体执行过程是先通过 IE 浏览器连接到服务器,修改服务器端的相关配置,然后再打开内容管理软件,对相关功能进行测试。冻结问题出现在通过 IE 设置参数阶段,具体表现是:不再继续执行脚本,也不抛出异常,RFT 用来显示当前操作的 Playback 窗口也不再显示正常执行时的 find 或 sleep 动作,而是显示空白(如图 1 红框中所示),此时的 IE 浏览器已无法通过窗口上的关闭按钮关闭,而只能直接通过进程将其关闭,整个脚本的运行呈现"冻结"的状态,中止执行,后面的脚本也无法运行。

图 1.Playback 界面

  解决思路

  解决这个问题的思路是设置超时,即设置一个时长,如果某一段代码在这个时长内未运行完成,则判断该段代码出现冻结现象。之后做以下处理:关闭 AUT 的进程,并重新运行这段代码。重复上述处理直到该段代码顺利执行完毕。这里之所以要重新运行出现冻结的代码,目的是可以让冻结的脚本重新进行测试,而不是直接 Failed 后执行下一个脚本,如此可以提高测试的准确率和效率。

  由于出现冻结时主线程已卡死,所以要解决这个问题必须开辟子线程,而子线程的作用有两种选择:一是执行计时的程序;二是执行易卡死的代码。选择第一种作用的执行模式很简单,即子线程发现超时后关闭 AUT 进程,使得后面的脚本得以继续执行,但这种方式无法实现前面所说的重新执行冻结脚本设想;第二种方式可以通过循环的方式实现重新执行冻结脚本的设想,但是超时如何判断又成为问题。本文采用了第二种方式,并通过 java 类 FutureTask 完美解决了上述问题。下面就简单介绍一下 FutureTask 的内容,以及它在解决这个问题上的独特优势

  FutureTask 简介及优势

  FutureTask 类是 Future 接口的一个实现,Future 接口提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。主要包含以下五个方法:

  1、boolean cancel(boolean mayInterruptIfRunning):该方法用于取消对任务的执行,如任务已完成或无法取消则返回 false,如果任务正在执行中则通过参数 mayInterr-uptIfRunning 判断是否中断任务执行的线程。

  2、boolean isCancelled():如果在任务完成前成功调用 cancel 方法,则返回 true。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号