添加WiFi測試APP下載地址:java
傳送門git
本人在使用monkey進行手機APP性能測試的時候,常常會遇到WiFi被關閉,飛行模式被打開的問題,雖然monkey也要進行無網測試,但在無人值守使用monkey測試的時候,仍是須要網絡狀態穩定一些,常常不斷嘗試,終於找到了解決辦法。shell
思路以下,寫了一個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; } }