专栏首页FunTester一个循环启动APP并保持WiFi常开的多线程类

一个循环启动APP并保持WiFi常开的多线程类

本人在使用monkey进行测试的时候,发现monkey参数里面--pct-appswitch参数并不好用,随机性比较大,所以想自己来控制启动APP的次数和间隔。之前通过批处理命令bat和shell脚本都实现过,但是现在要做成一个jar的工具包,只能写在一个多线程类里,随便把校验WiFi开关状态的方法也写在了一起。分享代码,供大家参考。

package monkeytest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import source.Common;

public class StartApp extends Thread {
    public boolean MKEY = true;//线程开关
    public static boolean WIFISTATUS = true;// WiFi状态开关,默认开

    @Override
    public void run() {
        while (MKEY) {
            Common.getInstance().sleep(60 * 1000);
            keepWifiONorOFF(WIFISTATUS);
            startJuziApp();
        }
    }

    /**
     * 启动橘子APP
     */
    public void startJuziApp() {
        if (Monkey.package_name.contains("happyjuzi")) {
            execCmdAdb("adb shell am start -n com.happyjuzi.apps.juzi/.SplashActivity");
        } else if (Monkey.package_name.contains("article.news")) {
            execCmdAdb("adb shell am start -n com.ss.android.article.news/.activity.SplashBadgeActivity");// 今日头条
        }
    }

    /**
     * 保持WiFi状态的方法
     * 
     * @param status
     *            当前WiFi的期望状态
     */
    public void keepWifiONorOFF(boolean status) {
        if (status & wifiIsOn()) {// 判断WiFi状态是否跟预期状态一致
            closeOrOpenWifi();
        }
    }

    /**
     * wifi是否打开
     * 
     * @return 开打true,没打开false
     */
    private boolean wifiIsOn() {
        String cmd = "adb shell ifconfig wlan0";
        System.out.println("执行:" + cmd);
        String OSname = System.getProperty("os.name");
        try {
            Process p = null;
            if (OSname.contains("Mac")) {
                p = Runtime.getRuntime().exec(Common.ADB_PATH + cmd);
            } else {
                p = Runtime.getRuntime().exec("cmd /c " + cmd);
            }
            // 正确输出流
            InputStream input = p.getInputStream();// 创建并实例化输入字节流
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));// 先通过inputstreamreader进行流转化,在实例化bufferedreader,接收内容
            String line = "";
            while ((line = reader.readLine()) != null) {// 循环读取
                if (line.contains("RUNNING")) {
                    return true;
                }
            }
            reader.close();// 此处reader依赖于input,应先关闭
            input.close();
        } catch (IOException e) {
            Common.getInstance().output("执行" + cmd + "失败!");
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 开关WiFi
     */
    public void closeOrOpenWifi() {
        try {
            Runtime.getRuntime().exec(Common.ADB_PATH + "adb shell am start -n run.wifibutton/.WifiButtonActivity")
                    .waitFor();
        } catch (InterruptedException | IOException e) {
            Common.getInstance().output("WIFI开关异常!", e);
        }
    }

    /**
     * 结束线程方法
     */
    public void stopThread() {
        this.MKEY = false;
    }

    /**
     * 执行cmd命令
     * 
     * @param cmd
     *            命令
     */
    public static void execCmdAdb(String cmd) {
        System.out.println("正在执行:" + cmd);
        String OSname = System.getProperty("os.name");
        try {
            if (OSname.contains("Mac")) {
                Runtime.getRuntime().exec(Common.ADB_PATH + cmd);
            } else {
                Runtime.getRuntime().exec("cmd /c " + cmd);
            }
        } catch (IOException e) {
            System.out.println("执行" + cmd + "失败!");
            e.printStackTrace();
        }
    }
}回台回复“WiFi”获取控制WiFi的APP

本文分享自微信公众号 - FunTester(NuclearTester),作者:八音弦

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用monkey测试时,一个控制WiFi状态的多线程类

    FunTester
  • 如何对修改密码接口进行压测

    做接口测试中,对于一般性的单业务接口测试很多工具可供选择,但是对于一些相关业务相关性的关联接口测试就比较麻烦,使用工具比如jmeter、postman、soap...

    FunTester
  • 性能测试框架第三版

    本次主要更新了标记、记录功能,以及初始化连接池的方法。具体实现请参考之前的文章:性能测试中标记每个请求、如何性能测试中进行业务验证、如何在匿名thread子类中...

    FunTester
  • 使用Comparable和Comparator对Java集合对象进行排序

    在现实生活中,我们可能会遇到需要对集合内的对象进行排序的场景,比如,有一个游戏得分排行榜,如先按照分数的高低由高到低排序,在分数相同的情况下,按照记录创建的时间...

    孟君
  • 原来不只是fastjson,这个你每天都在用的类库也被爆过反序列化漏洞!

    工作久了的话,就会慢慢有种感觉:代码都是人写的,是人写的代码就可能存在漏洞,这个是永远都无法避免的,任何牛X的程序员都不可能写出完全没有bug的代码! 其实关...

    崔笑颜
  • 安全杂谈——linux通配符绕过文件名黑名单

    linux shell下可以通过正则匹配来匹配相应的程序并且执行。 在linux下输入man 7 glob命令可以查看相关的内容。值得注意的就这些,学过正则的一...

    用户1631416
  • 离线部署 CDH 5.12.1 及使用 CDH 部署 Hadoop 大数据平台集群服务

    Cloudera Manager 分为两个部分:CDH和CM。

    搜云库
  • 离线部署 CDH 5.12.1 及使用 CDH 部署 Hadoop 大数据平台集群服务

    Cloudera Manager Cloudera Manager 分为两个部分:CDH和CM。 CDH是Cloudera Distribution Hadoo...

    搜云库
  • 独家︱优格资本携旗下主要VR厂商亮相腾讯全球合作伙伴大会

    VRPinea
  • Mini T-block——数据中心界的U盘

    ? 导语: 在腾讯全球数字生态大会上,腾讯数据中心的Mini T-block占据了整个场馆入口处最亮眼的位置,来往参观的宾客络绎不绝。那么,它究竟凭借什么能力...

    腾讯技术工程官方号

扫码关注云+社区

领取腾讯云代金券