专栏首页FunTester使用monkey测试时,一个控制WiFi状态的多线程类

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

传送门

本人在使用monkey进行手机APP性能测试的时候,经常会遇到WiFi被关闭,飞行模式被打开的问题,虽然monkey也要进行无网测试,但在无人值守使用monkey测试的时候,还是需要网络状态稳定一些,经常不断尝试,终于找到了解决办法。思路如下,写了一个APP,专门用来切换网络状态,只是用来切换网络状态而已。然后需求是每分钟检查一次WiFi状态是否跟预期一致,每十分钟切换一次预期状态,已达到交叉测试的效果。使用adb shell ifconfig wlan0拿到当前的网络状态,通过执行adb shell am命令来切换WiFi状态。分享代码如下: 点点横点尘,公众号:龙腾测试使用monkey测试时,一个控制WiFi状态的多线程类

package monkeytest;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import source.Common;
 
public class WifiSwitch extends Thread {
	public static boolean WIFIKEY = true;// 线程开关,默认开
	public static boolean WIFISTATUS = true;// WiFi状态开关,默认开
 
	@Override
	public void run() {
		while (WIFIKEY) {
			for (int i = 0; i < 10; i++) {
				if (WIFIKEY) {
					break;
				}
				Common.getInstance().sleep(60 * 1000);
				keepWifiONorOFF(WIFISTATUS);
			}
			WIFISTATUS = !WIFISTATUS;// 反转WiFi状态
		}
	}
 
	/**
	 * 结束线程方法
	 */
	public void stopWifiSwitch() {
		WIFIKEY = 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);
		}
	}
 
	/**
	 * 保持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”,下载此功能APP。

一起来~FunTester

往期文章精选

  1. java一行代码打印心形
  2. Linux性能监控软件netdata中文汉化版
  3. 接口测试代码覆盖率(jacoco)方案分享
  4. 性能测试框架
  5. 如何在Linux命令行界面愉快进行性能测试
  6. 图解HTTP脑图
  7. 写给所有人的编程思维
  8. 测试之JVM命令脑图

本文分享自微信公众号 - FunTester(NuclearTester)

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

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

    本人在使用monkey进行测试的时候,发现monkey参数里面--pct-appswitch参数并不好用,随机性比较大,所以想自己来控制启动APP的次数和间隔。...

    FunTester
  • 性能测试框架第三版

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

    FunTester
  • JVM的对象和堆

    上次博客,我们说了jvm运行时的内存模型,堆,栈,程序计数器,元空间和本地方法栈。我们主要说了堆和栈,栈的流程大致也说了一遍,同时我们知道堆是用...

    FunTester
  • Linux系统(CentOS7安装)安装JDK8的教程详解

    系统安装就不做过多介绍,大家从网上寻找安装步骤进行安装,不过我推荐大家进行安装时选择桌面图形化格式进行安装,方便做一部分操作,同时在安装过程中选择英文模式,同时...

    砸漏
  • Unity应用架构设计(11)——一个网络层的构建

    对于客户端应用程序,免不了和远程服务打交道。设计一个良好的『服务层』能帮我们规范和分离业务代码,提高生产效率。服务层最核心的模块一定是怎样发送请求,虽然Mon...

    用户1161731
  • 【原创】关于Spring中的参数校验的一点思考

    数据的校验的重要性就不用说了,即使在前端对数据进行校验的情况下,我们还是要对传入后端的数据再进行一遍校验,避免用户绕过浏览器直接通过一些 HTTP 工具直接向后...

    Guide哥
  • C语言 | C++常见面试题

    C语言入门到精通
  • C语言与C++常见面试题

    公众号C语言与CPP编程
  • C语言与C++常见面试题

    公众号C语言与CPP编程
  • 2018 Unreal Open Day|虚幻引擎跨入手游新时代,VR仍旧注重技术沉淀

    VRPinea

扫码关注云+社区

领取腾讯云代金券