鉴于自己确实不喜欢 Note JS 的风格,尝试用 Java 编写 macaca 测试用例。
实践过程中发现存在 socket 不稳定、服务端未返回的问题。比如执行点击操作时,出现服务端很长时间才返回结果、服务端异常、服务端一直不返回结果,导致客户端一直做无谓的等待和重试。像这种情况,我需要尝试断开连接,尝试重连或者抛出异常等逻辑,不做无谓的等待。此时可以利用 java 的 Future 和 Callable 机制,在指定时长内执行指定的代码,超时后触发超时异常。示例如下:
/**
* @param param1 需要的参数
* @param timeout 超时时间
* @return 返回结果
* @throws Exception
*/
public <T> T excuteTimeout(T param1, long timeout) throws Exception {
Callable<T> call = new Callable<T>() {
public T call() throws Exception {
T callResult = null;
//在此处执行指定代码,做你想做的任何事情,比如点击操作等
return callResult;
}
};
ExecutorService exec = Executors.newSingleThreadExecutor();
Future<T> future = exec.submit(call);
T result = null;
try {
result = future.get(timeout, TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {//超时异常
exec.shutdown();
throw e;
} catch(Exception e){//其它异常
exec.shutdown();
throw e;
}
exec.shutdown();
return result;
}
代码很糙,总结匆忙,看官勿怪!