在用monkey做android压力测试时,一般都会选择直接运行monkey命令的形式,由于重复性较强,我就写了个monkey可视化运行的工具,monkey参数可自行调整。下面先附上效果图:
以下为代码:
1.cmd命令执行工具类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class CmdUtils {
List<String>resultList=new ArrayList<String>();
public List<String> excuteCmd(String command){
//String command="adb devices";
String line = null;
StringBuilder sb = new StringBuilder();
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec(command);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = bufferedReader.readLine()) != null) {
resultList.add(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return resultList;
}
}
2.获取连接设备工具类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class AndroidDevicesInfo {
List<String>devicesList=new ArrayList<String>();
public List<String> getAndroidDevicesInfo(){
String command="adb devices";
String line = null;
StringBuilder sb = new StringBuilder();
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec(command);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = bufferedReader.readLine()) != null) {
if(line.contains("device")){
if(!line.contains("devices")){
String deviceId=line.substring(0, line.indexOf("device"));
devicesList.add(deviceId);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return devicesList;
}
}
3.加载指定设备的应用包集合
package MonkeyTool;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class AndroidPackageInfo {
List<String>packageList=new ArrayList<String>();
//获取指定设备下的包集合
public List<String> getAndroidPackageInfo(String deviceId){
String command="adb -s "+deviceId+" shell pm list packages";
String line = null;
StringBuilder sb = new StringBuilder();
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec(command);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = bufferedReader.readLine()) != null) {
if(line.contains("package")){
//截取包字符串放入list中
String packageItem=line.substring(line.indexOf("package")+8,line.length());
//String packageItem=line;
packageList.add(packageItem);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return packageList;
}
}
4.加载设备线程
package MonkeyTool;
import java.util.List;
import javax.swing.JComboBox;
//加载设备任务
public class DevicesThread extends Thread{
AndroidDevicesInfo androidDevicesInfo;
Object obj;
String[] s;
JComboBox devicesComBox;
List<String> list;
String devicesId;
public DevicesThread(JComboBox devicesComBox) {
// TODO Auto-generated constructor stub
this.devicesComBox=devicesComBox;
//System.out.println("aa");
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
// TODO Auto-generated method stub
devicesId=(String) devicesComBox.getSelectedItem();
System.out.println(devicesId);
androidDevicesInfo=new AndroidDevicesInfo();
list=androidDevicesInfo.getAndroidDevicesInfo();
devicesComBox.removeAllItems();
if(list.size()==0){
devicesComBox.addItem("无设备连接");
}
else{
for (String item : list) {
System.out.println(item);
devicesComBox.addItem(item);
}
}
}
}
package MonkeyTool;
import java.util.List;
import javax.swing.JComboBox;
//加载包名任务
public class PackageThread extends Thread {
AndroidDevicesInfo androidDevicesInfo;