傳送門
本人在使用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
往期文章精選
- java一行代碼列印心形
- Linux性能監控軟體netdata中文漢化版
- 接口測試代碼覆寫率(jacoco)方案分享
- 性能測試架構
- 如何在Linux指令行界面愉快進行性能測試
- 圖解HTTP腦圖
- 寫給所有人的程式設計思維
- 測試之JVM指令腦圖