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 官方文档
相关推荐
微露清风7 小时前
浅析 MySQL 索引
android·数据库·mysql
91刘仁德7 小时前
MySQL 数据类型详解
android·笔记·mysql·adb
编程圈子8 小时前
操作系统学习14 IDT + PIC + 键盘中断
android·学习·计算机外设
齊家治國平天下15 小时前
Android 14 Vehicle HAL (VHAL) 设计与实现深度解析
android·aaos·carservice·车载开发·android 14·vhal·vehicle hal
AFinalStone21 小时前
Android 7系统网络(八)应用API层—ConnectivityManager使用与实战调试
android·网络
plainGeekDev1 天前
kapt 替换为 KSP
android·java·kotlin
蜡台1 天前
通过Gradle脚本声明更改Java变量
android·java·开发语言·python·kotlin·gradle·groovy
阿pin1 天前
Android随笔-SharedPreferences
android·sp
阿pin1 天前
Android随笔-DataStore
android·datastore