|
|
package monkey
|
|
|
|
|
|
import (
|
|
|
"autogo/common"
|
|
|
"autogo/dbsql"
|
|
|
"autogo/models"
|
|
|
"fmt"
|
|
|
"os/exec"
|
|
|
"strings"
|
|
|
"time"
|
|
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
"github.com/spf13/cast"
|
|
|
)
|
|
|
|
|
|
// func runUninstallCmd(package_name string)error{
|
|
|
// cmd_content := "adb " +
|
|
|
// }
|
|
|
|
|
|
func RunAndroidMonkeyCmd(task models.MonkeyTask, udid string) {
|
|
|
db, err := dbsql.GetConn(dbsql.DSN)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
defer dbsql.Close(db)
|
|
|
db.Model(models.MonkeyTask{}).Where("id = ?", task.Id).Update("status", "INIT")
|
|
|
// python main_adr.py -package music.hising.live.dev -launch_activity sing.lagufun.social.live.ui.activity.SplashActivity
|
|
|
cmd_content := "cd /home/app/monkey && nohup python3 main_adr.py" +
|
|
|
" -task_id " + cast.ToString(task.Id)
|
|
|
if task.PackageURL != "" {
|
|
|
pkg_path := "/home/tmp/pkg/" + cast.ToString(time.Now().Unix()) + ".apk"
|
|
|
log.Debug("正在下载apk:", task.PackageURL)
|
|
|
err := exec.Command("wget", task.PackageURL, "-O", pkg_path).Run()
|
|
|
if err != nil {
|
|
|
log.Error(err)
|
|
|
}
|
|
|
cmd_content += " -pkg_path " + pkg_path
|
|
|
log.Debug("下载完毕,安装包路径", pkg_path)
|
|
|
}
|
|
|
cmd_content += " -package " + task.PackageName
|
|
|
cmd_content += " -launch_activity " + task.LaunchActivity
|
|
|
cmd_content += " -run_time " + cast.ToString(task.RunTime)
|
|
|
if udid != "" {
|
|
|
cmd_content += " -device_udid " + udid
|
|
|
}
|
|
|
cmd_content += " >> /home/app/logs/task_output/task_" + cast.ToString(task.Id) + ".log 2>&1"
|
|
|
|
|
|
db.Model(models.MonkeyTask{}).Where("id = ?", task.Id).Last(&task)
|
|
|
if task.Status != "INIT" {
|
|
|
common.PushCorntaskLog("任务状态异常,停止发起Monkey任务:" + task.Status)
|
|
|
return
|
|
|
}
|
|
|
log.Debug("开始调用monkey服务,执行命令")
|
|
|
log.Debug(cmd_content)
|
|
|
cmd := exec.Command("bash", "-c", cmd_content)
|
|
|
err = cmd.Run()
|
|
|
if err != nil {
|
|
|
log.Error(err)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
func GetAndroidDevices() map[string]string {
|
|
|
udid_map := make(map[string]string)
|
|
|
cmd := exec.Command("adb", "devices")
|
|
|
out, err := cmd.CombinedOutput()
|
|
|
if err != nil {
|
|
|
fmt.Println(err)
|
|
|
}
|
|
|
list := strings.Split(string(out), "\n")[1:]
|
|
|
for _, v := range list {
|
|
|
if len(v) < 1 {
|
|
|
continue
|
|
|
}
|
|
|
fmt.Println(v)
|
|
|
name := strings.Split(strings.Trim(strings.Trim(v, "\r"), "\t"), "\t")[0]
|
|
|
status := strings.Split(strings.Trim(strings.Trim(v, "\r"), "\t"), "\t")[1]
|
|
|
udid_map[name] = status
|
|
|
// devices = append(devices, getAndroidDeviceInfo(strings.Split(strings.Trim(strings.Trim(v, "\r"), "\t"), "\t")...))
|
|
|
}
|
|
|
return udid_map
|
|
|
}
|
|
|
|
|
|
type DeviceInfo struct {
|
|
|
Udid string `json:"string"`
|
|
|
Status string `json:"status"`
|
|
|
}
|
|
|
|
|
|
func getAndroidDeviceInfo(args ...string) models.MonkeyDevice {
|
|
|
var di models.MonkeyDevice
|
|
|
di.Platform = "adr"
|
|
|
di.Udid = args[0]
|
|
|
if args[1] == "device" {
|
|
|
di.Status = "online"
|
|
|
} else {
|
|
|
di.Status = args[1]
|
|
|
}
|
|
|
|
|
|
di.ProductName = getAndroidDeviceName(di.Udid)
|
|
|
return di
|
|
|
}
|
|
|
|
|
|
func getAndroidDeviceName(udid string) string {
|
|
|
command := `getprop` // | grep product.marketname'
|
|
|
cmd := exec.Command("adb", "-s", udid, "shell", command)
|
|
|
out, err := cmd.CombinedOutput()
|
|
|
if err != nil {
|
|
|
fmt.Println(err)
|
|
|
return udid
|
|
|
}
|
|
|
strs := strings.Split(string(out), "\n")
|
|
|
device_name := ""
|
|
|
for _, v := range strs {
|
|
|
if strings.Contains(v, "product.brand") {
|
|
|
str := strings.Split(strings.Trim(v, "\r"), ": ")[1]
|
|
|
device_name = str[1 : len(str)-1]
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
fmt.Println(device_name)
|
|
|
return device_name
|
|
|
}
|
|
|
|
|
|
func KeepDevice(udid string) error {
|
|
|
//adb shell input keyevent 3
|
|
|
cmd := exec.Command("adb", "-s", udid, "shell", "input", "keyevent", "4")
|
|
|
err := cmd.Run()
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
func killPid(pid int) error {
|
|
|
cmd := exec.Command("kill", "-9", cast.ToString(pid))
|
|
|
err := cmd.Run()
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
func checkTaskPids(pids []models.MonkeyPid) int {
|
|
|
if len(pids) == 0 {
|
|
|
return -1
|
|
|
}
|
|
|
var strs []string
|
|
|
for _, v := range pids {
|
|
|
strs = append(strs, cast.ToString(v.PId))
|
|
|
}
|
|
|
pids_str := strings.Join(strs, "|")
|
|
|
cmd_str := "ps -ef | grep -v -E 'bash|grep' | grep -E '" + pids_str + "'"
|
|
|
fmt.Println(cmd_str)
|
|
|
cmd := exec.Command("bash", "-c", cmd_str)
|
|
|
cmd.Run()
|
|
|
return cmd.ProcessState.ExitCode()
|
|
|
}
|