一個循環啓動APP並保持WiFi常開的多線程類

添加WiFi測試APP下載地址java

傳送門android

本人在使用monkey進行測試的時候,發現monkey參數裏面--pct-appswitch參數並很差用,隨機性比較大,因此想本身來控制啓動APP的次數和間隔。以前經過批處理命令bat和shell腳本都實現過,可是如今要作成一個jar的工具包,只能寫在一個多線程類裏,隨便把校驗WiFi開關狀態的方法也寫在了一塊兒。分享代碼,供你們參考。git

package monkeytest;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import source.Common;
 
public class StartApp extends Thread {
	public boolean MKEY = true;//線程開關
	public static boolean WIFISTATUS = true;// WiFi狀態開關,默認開
 
	@Override
	public void run() {
		while (MKEY) {
			Common.getInstance().sleep(60 * 1000);
			keepWifiONorOFF(WIFISTATUS);
			startJuziApp();
		}
	}
 
	/**
	 * 啓動橘子APP
	 */
	public void startJuziApp() {
		if (Monkey.package_name.contains("happyjuzi")) {
			execCmdAdb("adb shell am start -n com.happyjuzi.apps.juzi/.SplashActivity");
		} else if (Monkey.package_name.contains("article.news")) {
			execCmdAdb("adb shell am start -n com.ss.android.article.news/.activity.SplashBadgeActivity");// 今日頭條
		}
	}
 
	/**
	 * 保持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
	 */
	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);
		}
	}
 
	/**
	 * 結束線程方法
	 */
	public void stopThread() {
		this.MKEY = false;
	}
 
	/**
	 * 執行cmd命令
	 * 
	 * @param cmd
	 *            命令
	 */
	public static void execCmdAdb(String cmd) {
		System.out.println("正在執行:" + cmd);
		String OSname = System.getProperty("os.name");
		try {
			if (OSname.contains("Mac")) {
				Runtime.getRuntime().exec(Common.ADB_PATH + cmd);
			} else {
				Runtime.getRuntime().exec("cmd /c " + cmd);
			}
		} catch (IOException e) {
			System.out.println("執行" + cmd + "失敗!");
			e.printStackTrace();
		}
	}
}

技術類文章精選

  1. java一行代碼打印心形
  2. Linux性能監控軟件netdata中文漢化版
  3. 接口測試代碼覆蓋率(jacoco)方案分享
  4. 性能測試框架
  5. 如何在Linux命令行界面愉快進行性能測試
  6. 圖解HTTP腦圖
  7. 如何測試機率型業務接口
  8. httpclient處理多用戶同時在線
  9. 將swagger文檔自動變成測試代碼
  10. 五行代碼構建靜態博客
  11. httpclient如何處理302重定向
  12. 基於java的直線型接口測試框架初探

非技術文章精選

  1. 爲何選擇軟件測試做爲職業道路?
  2. 成爲傑出Java開發人員的10個步驟
  3. 寫給全部人的編程思惟
  4. 自動化測試的障礙
  5. 自動化測試的問題所在
  6. 測試之《代碼不朽》腦圖

點擊查看公衆號地圖

相關文章
相關標籤/搜索