天天看點

使用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指令腦圖