Macaca 总结 java 版本处理服务端超时策略

@zsmjluo · 2017年03月03日 · 最后由 恒温 回复于 2017年03月03日 · 1827 次阅读

鉴于自己确实不喜欢 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;
    }

代码很糙,总结匆忙,看官勿怪!

共收到 1 条回复 时间 点赞
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册