移动测试基础 在 N 多人安卓手机安装 apk 的一个方法,希望求的更快捷安装方法

tql · 2016年08月10日 · 最后由 tql 回复于 2016年08月12日 · 1770 次阅读

在兼容性测试中,需要在众多手机中安装待测 apk,设计思路使用 adb 命令安装 apk,达到 usb 插入手机后就能自动安装
1、使用 adb devices 命令,采取多线程查找插入手机,获取手机 udid,
2、然后使用 adb udid install -r +apk 安装软件
备注:手机需要设置成可调试

#codeing=utf-8
# FUNCTION module
#return phone info udid[] or False
import os
import re
def getPhoneInfo():
    dviceUdid = []
    os.system('adb devices > devices.txt')
    fp = open('devices.txt', 'r+')
    text = fp.readlines()
    print text
    for el in text[1:-1]:
        list = re.split('\\t',el)
        dviceUdid.append(list[0])
    if len(dviceUdid) == 0:
        return False

    return dviceUdid

安装代码

#codeing=utf-8

import os
import re
import threading
import sys
import Function
import time
#用来安装apk线程
class InstallApk(threading.Thread):
    def __init__(self, udid, arrayApkPackage):
        threading.Thread.__init__(self)
        self.udid = udid
        self.arrayApkPackage = arrayApkPackage

    def run(self):
        for apkPackage in self.arrayApkPackage:
            os.system('adb -s '+self.udid+' install -r '+apkPackage)

class FindDevice(threading.Thread):
    def __inti__(self):
        threading.Thread.__init__(self)

    def run(self):
        arrayDev = []
        arrayApkPackage = ['C:\Python27\xxx.apk', 'C:\Python27\xxxxx.apk'];
        while True:
            phoneInfo = Function.getPhoneInfo()
            if phoneInfo == False:
                time.sleep(1)
                continue
            for udid in phoneInfo:
                #将测试过设备保存在arrayDev,防止安装后设备没有拔出而重复安装
                if udid in arrayDev:
                    continue
                InstallApk(udid, arrayApkPackage).start()
                arrayDev.append(udid)
                #如果保存设备超过10个则清空,视个人情况而定
                if len(arrayDev) > 10:
                    arrayDev.clear()
            time.sleep(5)


FindDevice().start()

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 14 条回复 时间 点赞

写个批处理脚本,然后插上手机,运行脚本安装,然后循环此步骤(我曾经就这样把应用装到了 10 个手机上,当然应用很小)

tql #2 · 2016年08月10日 Author

恩,我们经常要测试 1500 台手机😂

@codeskyblue 对,我也是这样写了个批处理,直接往上脱

#2 楼 @tql 你为何这么土豪,我要是你肯定整出来一个设备管理平台了,安装时候必然也是全并发的安装。可惜我并没有这么多手机,也并没有这个需求。感觉 adb install 已经挺适合我了

5楼 已删除

这还不够快捷?

—— 来自 TesterHome 官方 安卓客户端

#!/bin/bash
device_num=adb devices | grep "device"$ | wc -l
for ((i=1;i<=$device_num;i++))
do
device_serialname=adb devices | grep "device"$ | awk '{print $1}' | sed -n "${i}p"
adb -s $device_serialname install -r xx.apk &
done

多线程安装,个人感觉这样就已经足够快了。主要还是看你电脑的传输效率和其他没关系了。

直接上云测试,简单省事。

大批量和高并发下安装 实际上 adb client 并不稳定,还是用底层的安装方式把

需要安装 1500 台?这么多,你的静默安装没有碰到很多问题吗?这个不是简单的一个 adb 就能搞定的事情

tql #11 · 2016年08月12日 Author

#10 楼 @qiangf1213 有什么问题呢,说一下嘛

tql #4 · 2016年08月12日 Author

#8 楼 @daveze 软件与蓝牙有关,连接硬件蓝牙设备

tql #13 · 2016年08月12日 Author

#4 楼 @codeskyblue 都是租用的手机,花费好高😂 😂 😂 😂

@tql 小米、联想静默安装、同台 server 对挂载的设备频繁调用情况下 tcp 的两端发送和消费不一致,设备套接字满了怎么处理。。。。等等

tql #15 · 2016年08月12日 Author

#14 楼 @qiangf1213 加个好友 QQ349111840

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册