zoukankan      html  css  js  c++  java
  • monkey图形界面化制作

    当时正在研究如何uiautomator的源码,看的头疼。和朋友聊天,朋友说monkey不想敲命令,反正也无聊,就花了2个小时写了个GUI。

    最终呈现的效果图:

    实际上是借助adb shell monkey的命令的拼接,需要的环境和依赖包安卓SDK自带的adb,python3.6和pyqt5.这里我们先封装一个monkey函数。

    #-*-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,代码如下

    # -*- 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了。

    1、使用pyinstaller

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

    step2:cd 到你的文件目录cd E:pjmonkey

    step3:运行pyinstaller -F monkey.py,注意-F是大写

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

    补充一下后来发现的问题,运行pyinstaller -F monkey.py后的exe打开时总是先有一个cmd窗口出现,要去掉的话应该用运行pyinstaller -F -w monkey.py

  • 相关阅读:
    Codeforces Round #372 (Div. 1) B. Complete The Graph (枚举+最短路)
    HDU6430 Problem E. TeaTree【dsu on tree】
    HDU4358 Boring counting【dsu on tree】
    HDU6191 Query on A Tre【dsu on tree + 01字典树】
    2019 ICPC Asia Yinchuan Regional
    广义后缀自动机 例题
    2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17)
    BZOJ3238 [Ahoi2013]差异 【SAM or SA】
    HDU4622 Reincarnation【SAM】
    BZOJ1396 识别子串【SAM+SegmentTree】
  • 原文地址:https://www.cnblogs.com/letmeiscool/p/8547881.html
Copyright © 2011-2022 走看看