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 官方文档
相关推荐
wen_zhufeng5 小时前
用 vLLM 加速 TTS 推理:通用改造指南
android·vllm
长友cy7 小时前
windows 搭建Qt编译Android 应用程序,快速搭建
android·windows
智驭未来掌门人8 小时前
Android Kotlin 开发避坑指南:从语言特性到工程化实践
android
码农coding8 小时前
android12 ViewRootImpl分析
android
stevenzqzq8 小时前
compose项目返回到当前页面闪烁原因分析
android
古法安卓9 小时前
Android-显示流程
android·java·android studio
CircleMouse9 小时前
画一个Android智能手机机器人
android·智能手机·机器人
数据知道10 小时前
PHP 代码审计实战——ThinkPHP、Laravel 历史漏洞模式深度剖析
android·网络·web安全·网络安全·php·laravel
拍客圈10 小时前
换服务器 mozcjpeg 5.0.0
android
蜡台12 小时前
Jetpack Compose 稳定性、重组优化(Stable / @NonRestartableComposable)
android·kotlin·compose·jepack