从0开始搭建自动化(一)-appium+python

引言废话

2026.05.25
从0开始搭建自动化,我其实也是app的自动化小白,没办法,公司只有我一个软测,只能硬着头皮上
上周领导给了我四天的时间,让我去筛选适合我们物联网公司的app的自动化方案,筛选出了15种。

今天2026.05.25上午开会筛选出了两种,第一种是appium+python,第二种是flutter,说实话两种我都没有搭建过,盲人过河
上周最开始选的airtest被pass了
从0开始搭建公司的自动化,我其实是app的自动化小白,我只懂一点儿后端的接口自动化,app的自动化真的没有搭建过,没办法,公司只有我一个软测,只能硬着头皮上,如果后续一直在更新,说明我么有被开,如果后续中断了,说明我被开了,因为没有做出来,希望我能做出来吧,毕竟ai这么强大。
后面再补上自动化方案吧,这周给我的任务是先让我试用一下两种方案一是appium+python,第二种是flutter,看看哪种我能做出来,我想说我也不知道啊。。。
好了,不废话了,开始吧

以下是appium+python方案

需要安装的工具与软件清单

第一步:环境搭建

1. 安装Python

python我装的14,安装流程之前忘记写了,网上教程很多,这里就不写了

python 复制代码
python --version
pip --version

2、 安装Java JDK

我拿到这台电脑就已经有这个jdk版本了,无需安装

3. 验证Android设备连接 (adb)

Android SDK我之前已经安装上了,当时没有记录,网上有很多安装教程,可以搜,此处验证

python 复制代码
adb devices

4、验证Node.js与npm:在命令行输入:

powershell 复制代码
node -v
npm -v

5、 验证UIAutomator2驱动安装

android:appium driver install uiautomator2

ios:appium driver install xcuitest


6、 验证Appium Server及驱动安装

appium -v

pip show Appium-Python-Client

pip show paho-mqtt

pip show pyserial

pip show pytest

7、步骤4:验证Python库安装

pip show Appium-Python-Client

pip show paho-mqtt

pip show pyserial

pip show pytest

8、综合环境检查(运行验证脚本)

appium

9、创建并运行检查脚本

python 复制代码
from appium import webdriver
from appium.options.android import UiAutomator2Options
import paho.mqtt.client as mqtt
import serial.tools.list_ports
import pytest

print("=== 开始综合环境检查 ===")

# 1. 检查Python库导入
print("✅ 1. Python核心库导入成功")

# 2. 检查paho-mqtt
client = mqtt.Client()
print("✅ 2. paho-mqtt 库检查通过")

# 3. 检查pyserial,列出串口
ports = list(serial.tools.list_ports.comports())
print(f"✅ 3. pyserial 库检查通过,发现 {len(ports)} 个串口设备")

# 4. 检查pytest
print("✅ 4. pytest 库检查通过")

# 5. 尝试连接Appium Server (需确保Appium服务正在运行)
try:
    # 使用UiAutomator2Options对象配置能力参数
    options = UiAutomator2Options()
    options.platform_name = "Android"
    options.platform_version = "10"  # 【重要】请修改为您的手机实际Android版本
    options.device_name = "Android Device"
    options.automation_name = "UiAutomator2"
    options.app_package = "com.android.settings"
    options.app_activity = ".Settings"
    options.new_command_timeout = 60
    
    driver = webdriver.Remote('http://localhost:4723', options=options)
    print("✅ 5. Appium Server 连接与会话创建成功!")
    driver.quit()  # 立即退出会话
except Exception as e:
    print(f"❌ 5. 连接Appium Server失败: {e}")
    print("   请确认:1. Appium Server已在运行。 2. 设备已被adb识别(`adb devices`)。 3. 能力参数(如版本号)是否正确。")
    exit(1)

print("\n🎉 所有环境检查通过!您现在可以开始编写您的第一个自动化测试脚本了。")
print("下一步建议:运行'固定验证码登录'的PoC脚本,验证与您MARS App的连通性。")

python check_env.py

恭喜!成功搭建了一个专业、完整的自动化测试基础环境。

第二步:环境验证

验证与App的连通性,执行第一个业务场景的PoC(概念验证),即"固定验证码登录"测试

具体操作步骤

1、 下载安装 Appium Desktop

下载地址https://github.com/appium/appium-inspector/releases?page=2

针对绝大多数普通 Windows 电脑(Intel 或 AMD 的 64 位处理器):

请下载 Appium-Inspector-2024.12.1-win-x64.exe​ 这个文件。
这是最通用版本。

2、确保手机USB连接电脑,并已安装所需的App。

3、打开 Appium Desktop,启动 Inspector​ 会话。

保持Appium Server运行:在另一个命令行窗口中,确保通过 npm安装的 Appium Server​ 正在运行(命令:appium)。这是Inspector能连接的基础。

在主界面,会看到 "Host"(默认 localhost)和 "Port"(默认 4723)

关闭旧版Appium Desktop:如果之前打开了旧版 Appium Desktop​ 应用,请将其完全关闭,避免端口冲突。

服务器设置 (Appium Server)

Remote Host: 127.0.0.1(默认,表示本机,通常无需改动)

Remote Port: 4723(默认,与您启动的Appium Server端口一致,通常无需改动)

Remote Path: /(默认,通常无需改动)

SSL: 不勾选

4、在"Desired Capabilities"中填入连接您MARS App所需的参数(包名appPackage、启动页appActivity等,可与开发同事确认)。

需要在 "Capability Builder"​ 区域,点击 "+"​ 号,逐一添加以下键值对:

标题为 "Desired Capabilities"​ 或 "Capabilities"​ 的大区域。它通常有两种呈现方式:

表格/构建器视图 (Capability Builder):一个带有 "Name"​ 和 "Value"​ 列的空表格,旁边有一个明显的 "+"​ (加号) 按钮。

JSON 编辑器视图:一个大的文本框,里面可能已经有几行默认的JSON内容(如 { "platformName": "Android" })。

如果找不到表格或"+"按钮:

请直接在那个大的 JSON 编辑器文本框​ 中,输入或修改为以下格式的JSON内容(请将 <>中的示例值替换为您从开发同事那里获取的或通过 adb命令查到的实际值):

填写完成后,点击右下角的 "Start Session"​ 按钮,即可尝试连接手机和App

5、 启动并开始检查

①配置完成后,点击右下角的 "Start Session"​ 按钮。

②此时,手机会自动启动App,并跳转到指定的登录界面。

③电脑上会弹出 Inspector 窗口,左侧是手机屏幕的实时截图,右侧是当前界面的元素层级树。

第三步:验证登录python脚本

在任何路径写这个python脚本,执行脚本python poc_mars_login_fixed.py

这个脚本只是为了验证登录是否连通和resource-id是否加上

这个脚本验证的结果最后是开发未加resource-id,反馈开发加key

python脚本如下

python 复制代码
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
import time

# ============================================
# 第一部分:配置与定义 (请根据您的实际情况修改以下变量)
# ============================================

# 1. 设备与App配置
DEVICE_PLATFORM_VERSION = "10"  # 您的手机Android版本,请确认
YOUR_TEST_ACCOUNT = ""  # 测试用的手机号/邮箱
FIXED_VERIFICATION_CODE = ""  # 固定验证码

# 2. App 标识 (关键修改点!必须使用您App的真实标识)
APP_PACKAGE = ""  # 您的应用包名
APP_ACTIVITY = ""  # 登录界面的Activity

# 3. 期望的元素ID (与开发约定的定位符,用于验证是否已添加)
EXPECTED_ELEMENT_IDS = {
    "email_input_id": ",
    "password_input_id": "",
    "login_button_id": "",
    "home_element_id": ""  # 用于登录成功后断言
}

# ============================================
# 第二部分:脚本主体 - 自动化登录流程
# ============================================

def run_login_poc():
    print("🚀 启动 App 登录自动化 PoC ...")

    # 1. 创建并配置驱动选项
    options = UiAutomator2Options()
    options.platform_name = "Android"
    options.automation_name = "UiAutomator2"
    options.platform_version = DEVICE_PLATFORM_VERSION
    options.device_name = "My_MARS_Test_Phone"
    # 【核心修正】此处已修改为您的MARS App包名和Activity
    options.app_package = APP_PACKAGE
    options.app_activity = APP_ACTIVITY
    options.no_reset = True
    options.new_command_timeout = 60

    # 2. 连接 Appium Server 并启动应用
    driver = webdriver.Remote('http://localhost:4723', options=options)
    time.sleep(2)  # 等待应用初始加载

    try:
        print("📱 应用已启动,开始执行登录步骤...")

        # 3. 使用【期望的ID】定位元素并操作
        # 3.1 输入账号
        email_input = driver.find_element(AppiumBy.ID, EXPECTED_ELEMENT_IDS["email_input_id"])
        email_input.send_keys(YOUR_TEST_ACCOUNT)
        print(f"   ✅ 已向元素 '{EXPECTED_ELEMENT_IDS['email_input_id']}' 输入账号")

        # 3.2 输入固定验证码
        password_input = driver.find_element(AppiumBy.ID, EXPECTED_ELEMENT_IDS["password_input_id"])
        password_input.send_keys(FIXED_VERIFICATION_CODE)
        print(f"   ✅ 已向元素 '{EXPECTED_ELEMENT_IDS['password_input_id']}' 输入验证码")

        # 3.3 点击登录按钮
        login_button = driver.find_element(AppiumBy.ID, EXPECTED_ELEMENT_IDS["login_button_id"])
        login_button.click()
        print(f"   ✅ 已点击元素 '{EXPECTED_ELEMENT_IDS['login_button_id']}'")

        # 4. 验证登录结果
        print("⏳ 等待登录结果...")
        time.sleep(3)  # 等待网络请求和页面跳转

        # 尝试查找登录后才能看到的首页元素
        home_element = driver.find_element(AppiumBy.ID, EXPECTED_ELEMENT_IDS["home_element_id"])
        assert home_element.is_displayed(), "登录失败,未找到首页标志性元素"

        print(f"   ✅ 登录成功!首页元素 '{EXPECTED_ELEMENT_IDS['home_element_id']}' 可见。")
        print("\n" + "🎉" * 20)
        print("🎉 PoC 验证成功!自动化登录流程完整执行。")
        print("🎉 如果此脚本运行成功,说明开发同学已添加约定的resource-id。")
        print("🎉" * 20)

    except Exception as e:
        print(f"\n❌ PoC 执行失败: {e}")
        print("\n可能原因:")
        print("1. 【最常见】期望的 resource-id 尚未被开发添加到应用中。")
        print("2. 应用包名、Activity名或设备连接不正确。")
        print("3. 页面加载超时或业务流程有变化。")
        # 保存截图以便精准定位问题
        screenshot_path = "poc_login_failure.png"
        driver.save_screenshot(screenshot_path)
        print(f"   已保存错误截图至: {screenshot_path},可将其提供给开发同学辅助排查。")

    finally:
        # 5. 关闭会话
        driver.quit()
        print("\n🔄 测试会话已结束。")

# ============================================
# 第三部分:脚本执行入口
# ============================================
if __name__ == "__main__":
    # 运行前提检查提示
    print("⚠️  运行前请确认:")
    print("   1. Appium Server 已在另一个命令行窗口中启动 (运行 'appium' 命令)")
    print("   2. 测试手机已通过USB连接,且 'adb devices' 能识别")
    print("   3. 手机屏幕已解锁")
    print("-" * 40)

    run_login_poc()
相关推荐
子豪-中国机器人1 天前
Python 阶段性综合强化训练(新版)
开发语言·python·语音识别
杰杰7981 天前
DRF的分页讲解-入门篇 三个基础分页类介绍
python·django
清水白石0081 天前
让对象像函数一样工作:深入理解 Python `__call__` 的作用与实战场景
开发语言·python
程序媛kelly1 天前
如何打开 .md / .ipynb 文件?Markdown 与 Jupyter Notebook 本地预览全攻略
ide·python·jupyter
KaMeidebaby1 天前
卡梅德生物技术快报 | Fab 合成文库构建与抗体筛选实验流程及数据解析
人工智能·python·tcp/ip·算法·机器学习
装不满的克莱因瓶1 天前
掌握3D CNN模型结构——从时空特征建模到视频理解与医学影像核心架构
人工智能·pytorch·python·深度学习·神经网络·3d·cnn
AINative软件工程1 天前
LLM 应用的 Schema 演进工程:structured output 字段改了,下游为什么炸了?
后端·python·架构
极客先躯1 天前
高级java每日一道面试题-2026年02月12日-实战篇[Docker]-什么是容器的 Seccomp 配置?如何自定义?
java·运维·分布式·docker·容器·自动化·文件
法海爱捉虫1 天前
小微企业 / 货代专用快递打单工具,适配热敏 / A4 打印机 功能设计
python