保姆级教程!手把手教你用 Appium+Python 搭建 Android 自动化测试框架(附完整源码)

📅 2026/8/5 9:52:32
保姆级教程!手把手教你用 Appium+Python 搭建 Android 自动化测试框架(附完整源码)
一次编写多设备运行崩溃自动捕获测试效率翻倍这个开源项目帮你摆脱手动回归的噩梦 文章目录前言你还在手动点 App 测试吗项目简介一个开箱即用的自动化测试脚手架核心特性一览技术栈与运行环境项目结构详解附代码片段3 分钟快速上手实战常见问题排雷指南总结与互动前言你还在手动点 App 测试吗移动互联网时代App 迭代快如闪电但质量保障却成了很多团队的“阿喀琉斯之踵”每次发版前测试人员要花半天甚至一天做回归测试点得手指发麻UI 频繁改动自动化脚本跟着改到崩溃维护成本高得离谱线上偶尔闪退难以复现开发只能靠猜多品牌、多系统版本兼容性测试一台一台手动操作效率低到让人怀疑人生。如果你也正在被这些问题折磨那么今天推荐的这款开源自动化测试框架绝对值得你花 5 分钟好好看完——它来自开发者Prodryas专为脉脉 AppAndroid 端打造但完全通用稍作修改即可用于任何 Android 应用的自动化测试。项目简介一个开箱即用的自动化测试脚手架项目名称maimai-appium-testsGitHub 已开源技术选型Appium 2.0Python 3.7pytest设计模式经典的Page Object页面对象模式核心能力UI 功能验证 稳定性监控 崩溃自动检测扩展能力多设备并行执行 数据驱动 美观的 HTML 测试报告简单说这就是一个**“开箱即用”的自动化测试脚手架**你只需配置好设备和账号就能快速跑起一套完整的回归测试还能接入 CI/CD 实现持续集成。核心特性一览特性具体说明✅Page Object 分层设计页面元素与操作逻辑分离脚本可读性高维护成本低✅智能等待 失败重试内置显式等待和重试机制极大降低因网络/渲染导致的不稳定✅崩溃自动检测自动识别 ANR、闪退对话框并记录异常现场日志截图✅全流程日志与截图每个步骤都有详细日志失败自动截图问题定位像看回放一样轻松✅数据驱动测试支持 JSON / Excel 文件注入测试数据一套脚本覆盖多种场景✅多设备并行借助pytest-xdist可同时在多台真机/模拟器上运行效率翻倍✅HTML 测试报告生成带截图链接的漂亮报告领导看了都说好✅CI/CD 就绪自带 GitHub Actions 示例轻松接入 Jenkins、GitLab CI 等技术栈与运行环境组件版本要求Python3.7 及以上Appium Server2.0推荐使用 Appium DesktopAndroid 设备8.0 真机或模拟器需开启 USB 调试依赖管理pip requirements.txt测试框架pytest pytest-xdist pytest-html操作系统Windows / macOS / Linux 均可项目结构详解附代码片段整个项目结构清晰层次分明新人也能一眼看懂maimai-appium-tests/ ├── src/ │ ├── config/ # 配置文件设备参数、测试账号等 │ ├── pages/ # Page Object 页面对象 │ │ ├── login_page.py │ │ └── home_page.py │ ├── utils/ # 工具模块日志、崩溃检测、截图 │ └── tests/ # 测试用例 │ └── test_maimai.py ├── test_data/ # JSON / Excel 测试数据 ├── test_results/ # 运行日志、截图、HTML报告 ├── docs/ # 详细使用文档 ├── .github/workflows/ # GitHub Actions CI 配置 └── requirements.txt # Python 依赖清单 代码示例感受 Page Object 的魅力页面对象login_page.pyfromappium.webdriver.common.appiumbyimportAppiumByclassLoginPage:# 定位器USERNAME_INPUT(AppiumBy.ID,com.aimi:id/et_username)PASSWORD_INPUT(AppiumBy.ID,com.aimi:id/et_password)LOGIN_BTN(AppiumBy.ID,com.aimi:id/btn_login)def__init__(self,driver):self.driverdriverdeflogin(self,username,password):self.driver.find_element(*self.USERNAME_INPUT).send_keys(username)self.driver.find_element(*self.PASSWORD_INPUT).send_keys(password)self.driver.find_element(*self.LOGIN_BTN).click()defis_logged_in(self):# 判断是否跳转到首页returnself.driver.find_element(AppiumBy.ID,com.aimi:id/tab_home).is_displayed()测试用例test_maimai.pyimportpytestfromsrc.pages.login_pageimportLoginPagedeftest_valid_login(driver):login_pageLoginPage(driver)login_page.login(13800138000,123456)assertlogin_page.is_logged_in(),登录失败未进入首页这种分层设计当 UI 变化时你只需修改对应页面对象中的定位符测试用例几乎不用改动维护成本大大降低。3 分钟快速上手实战Step 1克隆项目gitclone https://github.com/Prodryas/maimai-appium-tests.gitcdmaimai-appium-testsStep 2安装 Python 依赖pipinstall-rrequirements.txtStep 3启动 Appium Server方式一推荐打开 Appium Desktop点击 “Start Server”方式二命令行执行appium需提前npm install -g appiumStep 4配置测试参数编辑src/config/config.py填入你的设备desired_caps如 platformVersion、deviceName测试账号、密码其他自定义参数Step 5运行测试# 运行全部测试用例pytest src/tests/# 运行指定文件pytest src/tests/test_maimai.py# 按关键词运行如只测登录pytest-klogin# 生成 HTML 报告pytest--htmltest_results/report.html --self-contained-html运行完成后在test_results/目录下即可查看日志、截图和报告。常见问题排雷指南 {#常见问题排雷指南}问题解决方案Appium 无法启动会话① 确认 Appium Server 已启动② 检查appPackage和appActivity是否正确③ 尝试添加noReset: true元素定位失败① 使用 Appium Inspector 重新获取resource-id或 XPath② 避免依赖text等易变属性③ 检查是否处于 WebView 上下文需driver.switch_to.context并行执行冲突确保每个设备使用独立的端口systemPort、chromeDriverPort等并在配置中区分测试报告无截图确认conftest.py中已添加pytest_runtest_makereport钩子并在失败时调用截图工具中文输入乱码在 desired_caps 中添加unicodeKeyboard: True和resetKeyboard: True总结与互动 {#总结与互动}这个开源项目真正做到了“低门槛、高产出”无论你是测试工程师—— 想摆脱重复劳动提升个人价值开发工程师—— 想为自己的 App 加上自动化质量防线在校学生—— 想系统学习 Appium Python 的实战技巧它都值得你Star ⭐ 收藏并花一个下午跑起来体验一下。项目地址https://github.com/Prodryas/maimai-appium-tests如果这篇文章对你有帮助欢迎点赞、评论、转发让更多需要的朋友看到也欢迎在评论区留下你的使用心得或遇到的问题我会尽力帮你解答Happy Testing! 让自动化解放我们的双手版权声明本文为 CSDN 博主昨夜星河入梦来的原创文章遵循 CC 4.0 BY-SA 版权协议转载请附上原文出处链接及本声明。