使用monkey測試時,一個控制WiFi狀態的多線程類

添加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;
	}
 
}

一塊兒來~FunTesterapi

往期文章精選

  1. java一行代碼打印心形
  2. Linux性能監控軟件netdata中文漢化版
  3. 接口測試代碼覆蓋率(jacoco)方案分享
  4. 性能測試框架
  5. 如何在Linux命令行界面愉快進行性能測試
  6. 圖解HTTP腦圖
  7. 寫給全部人的編程思惟
  8. 測試之JVM命令腦圖

公衆號地圖

相關文章
相關標籤/搜索