使用monkey测试时,一个控制WiFi状态的多线程类
添加WiFi测试APP下载地址:
本人在使用monkey进行手机APP性能测试的时候,经常会遇到WiFi被关闭,飞行模式被打开的问题,虽然monkey也要进行无网测试,但在无人值守使用monkey测试的时候,还是需要网络状态稳定一些,经常不断尝试,终于找到了解决办法。
思路如下,写了一个APP,专门用来切换网络状态,只是用来切换网络状态而已。然后需求是每分钟检查一次WiFi状态是否跟预期一致,每十分钟切换一次预期状态,已达到交叉测试的效果。使用adb shell ifconfig wlan0拿到当前的网络状态,通过执行adb shell am命令来切换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; } }
往期文章精选
- java一行代码打印心形
- Linux性能监控软件netdata中文汉化版
- 接口测试代码覆盖率(jacoco)方案分享
- 性能测试框架
- 如何在Linux命令行界面愉快进行性能测试
- 图解HTTP脑图
- 写给所有人的编程思维
- 测试之JVM命令脑图
公众号地图
相关推荐
abdstime 2020-05-30
lucialee 2020-01-11
goodby 2020-01-09
chichichi0 2020-01-08
goodby 2019-12-18
goodby 2019-12-16
mohanzb 2019-12-02
lucialee 2019-11-10
不羈 2010-11-08
mohanzb 2011-08-09
GLMINECSDN 2011-05-30
abdstime 2019-10-23
zongzi4302 2015-06-15
qianbingbing 2015-06-15
YBsisterchang 2015-06-15
moneyispaper 2015-06-12
mingmingini 2012-01-04
mohanzb 2017-09-27
Christsam 2019-06-28