monkey圖形界面化製做

當時正在研究如何uiautomator的源碼,看的頭疼。和朋友聊天,朋友說monkey不想敲命令,反正也無聊,就花了2個小時寫了個GUI。python

最終呈現的效果圖:shell

其實是藉助adb shell monkey的命令的拼接,須要的環境和依賴包安卓SDK自帶的adb,python3.6和pyqt5.這裏咱們先封裝一個monkey函數。app

#-*-coding:utf-8-*-
'''
@Author:zhang yiqian
'''
import os
def monkey(**kwargs):
    command="adb shell monkey"
    try:
        command+=" -p "+kwargs["packageName"]
    except:
        print ("沒有指定包")
    command += " -v "
    try:
        command+=kwargs["count"]
    except:
        print("沒有指定次數")
    try:
        command += " -s " + kwargs["seed"]
    except:
        print ("沒有指定種子數")
    try:
        command += " --throttle " + kwargs["throttle"]
        if kwargs["random"]==True:
            command += " --randomize-throttle"
        else:
            pass
    except:
        print ("沒有指定時間間隔")
    #print (command)
    report=os.popen(command).read()
    return report

而後咱們去用pyqt5製做一個GUI,代碼以下dom

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'monkey.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys,monkeyadb
class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(346, 484)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(260, 50, 71, 81))
        self.pushButton.setObjectName("pushButton")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(90, 50, 171, 21))
        self.lineEdit.setText("")
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(Form)
        self.lineEdit_2.setGeometry(QtCore.QRect(90, 90, 171, 21))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.lineEdit_3 = QtWidgets.QLineEdit(Form)
        self.lineEdit_3.setGeometry(QtCore.QRect(90, 70, 171, 21))
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.lineEdit_4 = QtWidgets.QLineEdit(Form)
        self.lineEdit_4.setGeometry(QtCore.QRect(90, 110, 171, 21))
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.lineEdit_5 = QtWidgets.QLineEdit(Form)
        self.lineEdit_5.setGeometry(QtCore.QRect(30, 50, 61, 21))
        self.lineEdit_5.setObjectName("lineEdit_5")
        self.lineEdit_6 = QtWidgets.QLineEdit(Form)
        self.lineEdit_6.setGeometry(QtCore.QRect(30, 70, 61, 21))
        self.lineEdit_6.setObjectName("lineEdit_6")
        self.lineEdit_7 = QtWidgets.QLineEdit(Form)
        self.lineEdit_7.setGeometry(QtCore.QRect(30, 90, 61, 21))
        self.lineEdit_7.setObjectName("lineEdit_7")
        self.lineEdit_8 = QtWidgets.QLineEdit(Form)
        self.lineEdit_8.setGeometry(QtCore.QRect(30, 110, 61, 21))
        self.lineEdit_8.setObjectName("lineEdit_8")
        self.checkBox = QtWidgets.QCheckBox(Form)
        self.checkBox.setGeometry(QtCore.QRect(30, 130, 141, 31))
        self.checkBox.setObjectName("checkBox")
        self.textBrowser = QtWidgets.QTextBrowser(Form)
        self.textBrowser.setGeometry(QtCore.QRect(35, 161, 291, 301))
        self.textBrowser.setObjectName("textBrowser")

        self.retranslateUi(Form)
        self.pushButton.clicked.connect(self.startmonkey)
        QtCore.QMetaObject.connectSlotsByName(Form)

    #編寫本身的槽函數
    def startmonkey(self):
        try:
            packageName=self.lineEdit.text()
            count=self.lineEdit_3.text()
            seed=self.lineEdit_2.text()
            throttle =self.lineEdit_4.text()
            random =self.checkBox.isChecked()
            report=monkeyadb.monkey(packageName=packageName,count=count,seed=seed,throttle=throttle,random=random)
            self.textBrowser.setText(report)
        except:
            print ("error")
    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "執行"))
        self.lineEdit_5.setText(_translate("Form", "包名"))
        self.lineEdit_6.setText(_translate("Form", "事件次數"))
        self.lineEdit_7.setText(_translate("Form", "種子數"))
        self.lineEdit_8.setText(_translate("Form", "間隔時間"))
        self.checkBox.setText(_translate("Form", "間隔時間是否隨機"))

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = Ui_Form()
    w = QMainWindow()
    ex.setupUi(w)
    w.show()
    sys.exit(app.exec_())

編寫槽函數,經過信號和槽創建鏈接:函數

self.pushButton.clicked.connect(self.startmonkey)


    #編寫本身的槽函數
    def startmonkey(self):
        try:
            packageName=self.lineEdit.text()
            count=self.lineEdit_3.text()
            seed=self.lineEdit_2.text()
            throttle =self.lineEdit_4.text()
            random =self.checkBox.isChecked()
            report=monkeyadb.monkey(packageName=packageName,count=count,seed=seed,throttle=throttle,random=random)
            self.textBrowser.setText(report)
        except:
            print ("error")

這樣咱們的monkey工具就完成了,而後由於朋友是妹子,不會裝python環境和pyqt5,我就把python文件打包成exe文件,這樣就只須要安卓SDK了。工具

一、使用pyinstallerui

step1:安裝pyinstaller,在cmd窗口使用pip install pyinstaller安裝this

step2:cd 到你的文件目錄cd E:\pj\monkeyspa

step3:運行pyinstaller -F monkey.py,注意-F是大寫code

step4:看結果,結果在新生成的文件夾dist下就有monkey.exe

補充一下後來發現的問題,運行pyinstaller -F monkey.py後的exe打開時老是先有一個cmd窗口出現,要去掉的話應該用運行pyinstaller -F -w monkey.py

相關文章
相關標籤/搜索