使用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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券