在RFT中实现对时间的控制
作者:网络转载 发布时间:[ 2012/10/30 10:50:12 ] 推荐标签:
对整个脚本的执行进行超时检测
您是否遇到过一上班发现夜里进行的自动化回归测试因为某个 RFT 脚本 freeze 了,使得剩余的其他脚本没有执行?导致这种情况发生的原因通常是 RFT 脚本调用远程方法的时候,AUT 死锁了使得远程方法无法返回。只要将 AUT 进程杀掉可以让脚本继续运行。如果脚本能够设置一个超时时间可以防止这类问题发生,然而 RFT 本身并不支持这个功能。不过通过几行代码可以轻松实现这个功能。
我们将超时检测封装到 Helper Superclass 中,如代码清单 6 所示。测试脚本再初始化的时候会开启一个 Timer, 当脚本运行时间超出设定值后,onTimeout 方法被调用,同时脚本的执行被终止。
清单 6.
/**
* 支持 timeout 的 Helper Superclass
*/
public class TestScriptHelper extends RationalTestScript {
private static Timer timer = new Timer(true);
private static TimerTask timerTask = null;
private long timeout = 0;
/**
* 设置脚本长运行时间,单位为秒。* @param timeout 如果 timeout <= 0,脚本将不做超时检测
*/
public void setTimeout(long timeout) {
this.timeout = timeout;
}
public void onInitialize() {
if (timeout > 0) {
if (timerTask != null)
timerTask.cancel();
timerTask = new TimerTask(){
public void run() {
onTimeout();
// 终止脚本的运行
TestContext.getRunningTestContext().setAbort("Timeout");
}
};
timer.schedule(timerTask, 1000 * timeout);
}
}
public void onTerminate() {
if (timerTask != null) {
timerTask.cancel();
timerTask = null;
}
}
/**
* 子类可以通过覆盖该方法来做超时的清理工作 .
*/
public void onTimeout() {
}
}
代码清单 7 中显示如何在测试脚本中使用超时检测。注意 DemoScript 的 Helper Superclass 为 TestScriptHelper,要在脚本的构造方法中通过 setTimeout 方法来指定超时时长。
清单 7.
package testcases;
import resources.testcases.DemoScriptHelper;
public class DemoScript extends DemoScriptHelper {
public DemoScript() {
setTimeout(3);
}
public void onTimeout() {
System.out.println("DemoScript runs out of time!");
//TODO 清理工作,比如 kill 被测程序,删除用户数据等
}
public void testMain(Object[] args) {
sleep(20);
//TODO 实现测试步骤
}
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11