根据总条数,动态休眠随机时间

2020-01-17  本文已影响0人  墨色尘埃

总条数是动态变化的,那么其所依赖的时间也要改变。
比如:
total=100,那么time=50;
total=150,那么time=70;
total=200,那么time=80;
..............

用线程休眠来做到时间的延迟,这里先确定需要循环的次数

        // put数据到列表的时候,因为数据量很大,所以这里休眠时间根据数据动态变化
        int num = 20;
        if (matchOrders != null && matchOrders.size() > 0) {
            int total = matchOrders.size();  //总条数
            int i = total / 10;  //商
            int length = String.valueOf(i).length(); //商的长度
            
            if (length == 1 && (2 <= i && i <= 5)) {  //数据量在20~59
                num = 100;
            } else if (length == 1 && (6 <= i && i <= 9)) {  //数据量在60~99
                num = 200;
            } else if (length == 2 && (10 <= i && i <= 19)) {  //数据量在100~199,休眠200*300
                num = 300;
            } else if (length == 2 && (20 <= i && i <= 29)) {  //数据量在200~299
                num = 400;
            } else if (length == 2 && (30 <= i && i <= 39)) {  //数据量在300~399
                num = 600;
            } else if (length == 2 && (40 <= i && i <= 49)) {  //数据量在400~499
                num = 800;
            } else if (length == 2 && (50 <= i && i <= 59)) {  //数据量在500~599
                num = 1000;
            }
        }

然后根据次数for循环,休眠时间

        for (int i = 0; i < num; i++) {
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

但是上面的太简单了,一般我们会根据某个状态判断提前结束for循环。这里根据执行javascript,返回Object并对其进行判断

        for (int i = 0; i < num; i++) {
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //调用校验状态
            String script1 = "return angular.element(document.querySelector" +
                    "('[ng-controller=ticketManageController]'))" +
                    ".scope()" +
                    ".view.showTaskChooseUserDialog";
            Object o = driver.executeScript(script1);
            System.out.println("Object:" + o + "__num=" + num + "__i=" + i + "__i * 300=" + i * 300);

            if (o != null && o.equals(true)) {
                break;
            }
        }

如果for循环结束了,还是没有达到指定的休眠时间,就报错,所以还需要一个变量记录是否成功,定义一个boolean类型变量

        boolean isValid = false;
        for (int i = 0; i < num; i++) {
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //调用校验状态
            String script1 = "return angular.element(document.querySelector" +
                    "('[ng-controller=ticketManageController]'))" +
                    ".scope()" +
                    ".view.showTaskChooseUserDialog";
            Object o = driver.executeScript(script1);
            System.out.println("Object:" + o + "__num=" + num + "__i=" + i + "__i * 300=" + i * 300);

            if (o != null && o.equals(true)) {
                isValid = true;
                break;
            }
        }

        if (!isValid) {
            throw new BusinessException("记录提交失败,祥云校验失败");
        }
上一篇下一篇

猜你喜欢

热点阅读