Appium 3.x安卓APP企业级安装实战

Appium 3.x 企业级安卓APP安装规范写法:商城实战示例

前言

本文整理Appium移动端自动化测试中,APP安装操作的企业级标准实现方式。对比课堂教学中为串讲知识点而设计的零散流程,梳理符合项目实战的代码结构与设计逻辑,所有代码均基于 Appium 3.5.2 + Python Client 5.x 环境实操验证,适合入门后向项目写法过渡,用于复习与面试参考。

本文为个人原创学习笔记,代码与内容均为实操整理,发布于CSDN仅作技术交流;Appium遵循Apache 2.0开源协议。


一、企业级写法 vs 课堂演示写法

课堂上"先打开设置→跳转APP→再安装商城"的流程,是为了在一段脚本里串联多个API知识点,属于教学专用演示。真实企业项目中,代码以「稳定、可维护、易排查」为核心,不会有冗余的跨应用跳转,目标明确、逻辑闭环。

两者核心区别:

维度 课堂演示写法 企业级规范写法
流程设计 为串联API强行拼接多步操作,流程冗余 目标单一,只做安装/启动相关操作,无多余步骤
结果校验 执行完无验证,静默失败也无法感知 每一步操作后校验状态,确保执行成功
代码维护 包名、路径硬编码在命令里,修改麻烦 配置抽离为变量,改参数不用动业务逻辑
排查成本 无日志输出,报错不知道哪一步出问题 每步加打印日志,快速定位故障点

二、方案一:自动安装(企业90%场景首选)

适用场景

常规自动化测试项目,只需要启动目标APP,不需要频繁卸载重装。这是Appium官方推荐的最简标准写法,全程不用自己写安装判断逻辑。

实现逻辑

直接在能力集caps中配置本地APK文件路径,Appium会自动处理:

  • 设备未安装该APP → 自动安装后启动
  • 设备已安装该APP → 直接启动(配合noReset保留数据)

完整可运行代码

python 复制代码
import time
from appium import webdriver
from appium.options.common import AppiumOptions

# ========== 可配置项:修改这里即可切换不同APP ==========
# 目标APP包名
TARGET_APP_PACKAGE = "com.tpshop.malls"
# 本地APK文件绝对路径
APK_FILE_PATH = r"D:\BaiduNetdiskDownload\配套课件\9-阶段九UI自动化测试\移动端环境\apk\TPshop.apk"
# Appium服务地址
APPIUM_SERVER = "http://127.0.0.1:4723"

# 设备基础配置
caps = {
    "platformName": "Android",
    "appium:platformVersion": "9",
    "appium:deviceName": "127.0.0.1:5555",
    "appium:automationName": "UiAutomator2",
    # 配置APK路径,Appium自动处理安装与启动
    "appium:app": APK_FILE_PATH,
    "appium:noReset": True,
}

# 加载配置,连接Appium服务
options = AppiumOptions()
options.load_capabilities(caps)
driver = webdriver.Remote(command_executor=APPIUM_SERVER, options=options)

# 等待APP加载完成
time.sleep(3)

# 验证启动结果
print(f"启动成功,当前包名:{driver.current_package}")
print(f"当前页面:{driver.current_activity}")

# 结束会话
driver.quit()

三、方案二:可控式安装卸载(环境清理/多版本测试)

适用场景

需要强制清理环境、每次执行前重装APP,或者需要切换多个APP版本的测试场景。

对安装、卸载过程有完全控制权,每一步都有状态校验,确保环境干净一致。

完整规范代码

python 复制代码
import time
from appium import webdriver
from appium.options.common import AppiumOptions

# ========== 可配置项 ==========
TARGET_APP_PACKAGE = "com.tpshop.malls"
APK_FILE_PATH = r"D:\BaiduNetdiskDownload\配套课件\9-阶段九UI自动化测试\移动端环境\apk\TPshop.apk"
APPIUM_SERVER = "http://127.0.0.1:4723"

# 设备基础配置
caps = {
    "platformName": "Android",
    "appium:platformVersion": "9",
    "appium:deviceName": "127.0.0.1:5555",
    "appium:automationName": "UiAutomator2",
    # 初始化先停在系统桌面,不启动业务APP
    "appium:appPackage": "com.android.launcher3",
    "appium:noReset": True,
}

# 连接Appium服务
options = AppiumOptions()
options.load_capabilities(caps)
driver = webdriver.Remote(command_executor=APPIUM_SERVER, options=options)

# ========== 核心安装流程 ==========
# 1. 检查APP是否已安装
is_installed = driver.execute_script("mobile: isAppInstalled", {"appId": TARGET_APP_PACKAGE})

if is_installed:
    print(f"检测到 {TARGET_APP_PACKAGE} 已安装,执行卸载清理...")
    driver.execute_script("mobile: removeApp", {"appId": TARGET_APP_PACKAGE})
    time.sleep(3)  # 等待卸载完成
    
    # 卸载后二次校验
    if not driver.execute_script("mobile: isAppInstalled", {"appId": TARGET_APP_PACKAGE}):
        print("卸载成功")
    else:
        print("警告:卸载失败,请检查权限")

# 2. 执行安装
print("开始安装TPshop商城...")
driver.execute_script("mobile: installApp", {"appPath": APK_FILE_PATH})
time.sleep(5)  # 安装耗时较长,根据APK大小调整等待时间

# 3. 安装结果校验
if driver.execute_script("mobile: isAppInstalled", {"appId": TARGET_APP_PACKAGE}):
    print("✅ TPshop商城安装成功")
else:
    print("❌ 安装失败,请检查APK文件路径与系统权限")

# 4. 启动APP验证
print("正在启动APP...")
driver.execute_script("mobile: shell", {
    "command": f"monkey -p {TARGET_APP_PACKAGE} -c android.intent.category.LAUNCHER 1"
})
time.sleep(3)
print(f"当前前台包名:{driver.current_package}")

# 结束会话
driver.quit()
print("安装测试流程结束")

四、API版本适配对照表(复习必看)

Appium-Python-Client 5.x 已移除大量直接调用方法,所有操作统一通过 mobile: 协议执行,对应关系如下:

老版本直接方法(已失效) 新版标准写法 功能说明
driver.is_app_installed() driver.execute_script("mobile: isAppInstalled", {"appId": "包名"}) 判断APP是否已安装
driver.install_app() driver.execute_script("mobile: installApp", {"appPath": "APK路径"}) 安装本地APK
driver.remove_app() driver.execute_script("mobile: removeApp", {"appId": "包名"}) 卸载指定APP
driver.terminate_app() driver.execute_script("mobile: terminateApp", {"appId": "包名"}) 强制关闭APP

前置条件:启动Appium服务时需添加 --relaxed-security 参数,放开shell与安装相关权限,本地学习测试使用无安全风险。


五、企业级写法核心设计总结

  1. 配置抽离:把包名、路径、地址等易变参数抽成顶部变量,后续维护只改配置,不用动业务逻辑
  2. 结果校验:关键操作后必须校验执行结果,避免静默失败导致后续步骤全错
  3. 日志清晰:每一步加打印输出,排查问题时能一眼定位到失败节点
  4. 最小冗余:不做无意义的跨应用跳转,初始化要么直接打开目标APP,要么停在桌面,流程最短最稳定

版权与参考说明

  1. 本文为个人原创学习笔记,所有代码与案例均为实操整理,发布于CSDN仅作技术交流;
  2. Appium 为开源自动化测试框架,遵循 Apache 2.0 开源协议,引用其官方规范仅作学习说明;
  3. 转载请注明原文出处,禁止商用;
  4. 参考资料:Appium 官方文档
相关推荐
wardenlzr1 小时前
车机看门狗(Watchdog)为何会让整机硬重启
android·优化·车机
IT毕设实战小研1 小时前
基于大数据的商场商铺数据分析与可视化的设计与实现
android·java·大数据·django·课程设计
aqi002 小时前
一文读懂 HarmonyOS 7.0 带来的十大API重要升级
android·华为·harmonyos·鸿蒙·harmony
是店小二呀3 小时前
鸿蒙PC开源移植:CodeLite原生IDE与Remote Agent适配
android·智能手机·远程桌面
终端安全笔记3 小时前
iOS 27 给了租赁一个新工具,但它只认受监督的设备
android·网络·安全·ios
爱笑鱼4 小时前
Android 系统启动机制(八):系统服务怎样从创建走到可用?SystemServiceManager 和 Boot Phase 各管什么?
android
hai_android4 小时前
Android 组件化开发实践
android·java·kotlin
mmsx4 小时前
Android 几何构造器的双栈机:链式 API 底层是怎么装配几何的
android
mmsx4 小时前
Android 地图卡成 PPT 之后:双渲染管线与空间网格渐进加载怎么救
android·app