引言废话
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()
