Python调用adb实现自动化安装Apk

 

# -*- encoding=utf8 -*-
__author__ = "Lee.li"
"""
命名规则:
1.模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况)
2.类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头
3.函数名一律小写,如有多个单词,用下划线隔开,私有函数在函数前加一个下划线_
4.变量名首字母尽量小写, 如有多个单词,用下划线隔开,后续字母大写
5.常量采用全大写,如有多个单词,使用下划线隔开
"""

import inspect
import queue
import threading
from Views.multi_processframe.ProjectTools import common
from airtest.core.api import *
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
from airtest.core.android.adb import ADB
from airtest.utils.apkparser import APK
from Views.paaS import tools
from Views.multi_processframe.ProjectTools.path import CONFIGPATH

index_print = print
adb = ADB().adb_path  # 获取内置adb路径
queue = queue.Queue()  # queue线程通讯


def print(*args, **kwargs):
    index_print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), *args, **kwargs)


class AndroidTools:

    def __init__(self, momentDevices=""):

        self._rootPath = CONFIGPATH  # 获取当前目录根目录
        self._configPath = self._rootPath  # 获取config.ini的路径
        self._discerncode = common.get_value(self._configPath, 'discerncode')[0]  # 获取下载识别码
        self._testCase = common.get_value(self._configPath, 'testCase')  # 获取测试列表
        self._email = common.get_value(self._configPath, 'email')[0]  # 获取邮箱
        self._packageName = common.get_value(self._configPath, 'packageName')[0]  # 获取安装包名称
        self._packagePath = common.get_value(self._configPath, 'packagePath')[0]  # 获取安装包路径
        self._devicesList = common.get_value(self._configPath, 'devicesList')  # 获取配置设备列表
        self._installApk = common.get_value(self._configPath, 'installApk')[0]  # 获取安装测试包开关 1 为打开 0 为关闭
        self._testType = common.get_value(self._configPath, 'testType')[0]  # 获取测试类型开关 1 兼容 0 为分布
        self._performanceType = common.get_value(self._configPath, 'performanceType')[0]  # 获取性能测试开关 1 为打开 0 为关闭
        self._storage_by_exce = common.get_value(self._configPath, "storage_by_exce")[0]  # 获取性能报告方式 1 为excle 0 为json
        self._username = common.get_value(self._configPath, 'username')  # 获取账号
        self._password = common.get_value(self._configPath, 'password')[0]  # 获取密码
        self._uwatype = common.get_value(self._configPath, "uwatype")[0]  # 获取uwa测试判断
        self._testuwacase = common.get_value(self._configPath, "testuwacase")  # 获取uwa测试用例
        self._number = common.get_value(self._configPath, "number")[0]  # 获取uwa测试用例
        self._server = common.get_value(self._configPath, 'server')[0]  # 获取server
        if self._server == "1server":
            self._server = "日补丁qq android一服"
        elif self._server == "2server":
            self._server = "日补丁qq android二服"
        self._momentDevices = momentDevices  # 获取连接的设备
        if ':' in self._momentDevices:
            self._devicesName = self._momentDevices.split(':')[1]
        else:
            self._devicesName = self._momentDevices
        self._activityName = common.get_value(self._configPath, 'activityName')[0]  # 获取测试包的界面活动名
        if self._activityName == '':
            self._activityName = APK(self.get_apkpath()).activities[0]  # 如果活动包名没有填,就通过APK的activities方法,用包的路径获取活动名

    def get_discerncode(self):
        """
        获取下载状态识别码
        :return:
        """
        return self._discerncode

    def get_uwatype(self):
        """
        获取config中的uwatype
        :return:
        """
        return self._uwatype

    def get_number(self):
        """
        获取config中的uwatype
        :return:
        """
        return self._number

    def get_testuwacase(self):
        """
        获取uwa测试脚本
        :return:
        """
        return self._testuwacase

    def get_server(self):
        """
        获取config中的账号名称
        :return:
        """
        return self._server


    def get_password(self):
        """
        获取config中的账号名称
        :return:
        """
        return self._password

    def get_username(self):
        """
        获取config中的账号名称
        :return:
        """
        return self._username

    def get_rootpath(self):
        """
        获取当前路径的根目录绝对路径
        :return:
        """
        return self._rootPath

    def get_configpath(self):
        """
        获取config路径
        :return:
        """
        return self._configPath

    def get_testcase(self):
        """
        获取需要测试的测试用例
        :return:
        """
        return self._testCase

    def get_email(self):
        """
        获取需要测试的测试用例
        :return:
        """
        return self._email

    def get_packagename(self):
        """
        获得config配置中的包名
        :return:
        """
        return self._packageName

    def get_apkpath(self):
        """
        获取apk的本地路径
        :return:
        """
        return self._packagePath

    def get_deviceslist(self):
        """
        获得config配置中的设备列表
        :return:
        """
        return self._devicesList

    def get_installapk(self):
        """
        获取是否需要安装开关
        :return:
        """
        return self._installApk

    def get_testtype(self):
        """
        获取测试类型开关 1 兼容 0 为分布
        :return:
        """
        return self._testType

    def get_performancetype(self):
        """
        获取性能测试开关 1 为打开 0 为关闭
        :return:
        """
        return self._performanceType

    def get_momentdevices(self):
        """
        获取当前设备
        :return:
        """
        return self._momentDevices

    def get_devicesname(self):
        """
        获取当前设备的ID
        :return:
        """
        return self._devicesName

    def get_activityname(self):
        """
        获得config配置中的Activity类名
        :return:
        """
        return self._activityName

    def get_storage_by_excel(self):
        """
        获得config配置中的excel配置 1 使用exlce 0 使用json
        :return:
        """
        return self._storage_by_exce

    def get_workdevices(self):
        """
        实时读取连接的设备
        :return:
        """
        deviceslist = []
        for devices in os.popen(adb + " devices"):
            if "\t" in devices:
                if devices.find("emulator") < 0:
                    if devices.split("\t")[1] == "deviceconnect\n":
                        deviceslist.append(devices.split("\t")[0])
        return deviceslist

    def thread_installapk(self):
        """
        采用多线程进行安装包操作
        :return:
        """
        installapk = self.get_installapk()
        if installapk == 'False':
            return 'Skip'
        device = self.get_momentdevices()
        try:
            installthread = threading.Thread(target=self.install, args=(self,))
            installthread.start()
            installresult = queue.get()
            authorization = threading.Thread(target=self.authorization, args=(self,))
            authorization.start()
            installthread.join()
            authorization.join()
            if installresult == "Install Success":
                return "Success"
            else:
                return "Fail"
        except Exception as e:
            print(e)
        pass

    def install(self):
        """
        实现测试包安装
        :return:
        """
        devices 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值