背景

刚学会使用 Appium,觉得很好用,上手也比较容易,但每次换设备换 APP 测试时要在脚本修改很多东西,觉得很麻烦,就想自动获取可以通过指令获得的信息,使用该起来更方便。

最终效果是每次只需要修改测试的包的路径和包名就可以自动删除旧的安装包,并获得 Android 设备 id 和包名等 Appium 需要的信息。

适用于:Mac + Appium(指令启动) + Python + Android

使用到了 aapt,该工具在 SDK/tools 目录下,如果你没有设置环境变量,那需要进入该目录下才能运行 aapt 命令,如果设置了环境变量则可以在任何目录下运行 aapt 命令了。配置 aapt 环境变量的方法:

在当前用户目录下新建.bash_profile 文件,执行以下命令:

vi .bash_profile

设置图片宽度高度

然后保存,输入命令 :wq

最后使命令生效,执行命令 source .bash_profile

代码

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

from appium import webdriver

# 使用正则表达式筛选设备 id
import re

# 使用time.sleep(xx)函数进行等待
import time

# 使用 os 模块调用命令
import os

# 测试的包的路径和包名
appLocation = " /Users/Downloads/app.apk "

# 读取设备 id
readDeviceId = list(os.popen('adb devices').readlines())

# 正则表达式匹配出 id 信息
deviceId = re.findall(r'^\w*\b', readDeviceId[1])[0]

# 读取设备系统版本号
deviceAndroidVersion = list(os.popen('adb shell getprop ro.build.version.release').readlines())
deviceVersion = re.findall(r'^\w*\b', deviceAndroidVersion[0])[0]

# 读取 APK 的 package 信息
appPackageAdb = list(os.popen('aapt dump badging ' + appLocation ).readlines())
appPackage = re.findall(r'\'com\w*.*?\'', appPackageAdb[0])[0]

# 删除以前的安装包
os.system('adb uninstall ' + appPackage)


desired_caps = {
    'platformName': 'Android',
    'platformVersion': deviceVersion,
    'deviceName': deviceId,
    'appPackage': appPackage,
    'appWaitPackage': appPackage,
    'app': appLocation,
    'appActivity': appPackage + ".PageSplash",
}

command_executor = "http://localhost:4723/wd/hub"


↙↙↙阅读原文可查看相关链接,并与作者交流