简介:面向尚无Python环境的Airtest自动化测试入门者,压缩包通过批处理脚本实现一键安装Python 3.8并自动配置环境变量,随后安装pip以及airtest、pocoui模块,大幅降低搭建门槛。脚本允许自行替换安装包和修改版本号,适配其他Python版本或依赖库,适合未装Python或希望快速重建测试环境的开发者使用。压缩包共649个文件,整体约28.34MB。其中493个py文件是airtest与pocoui等模块的源码实现,67个rst和27个md文档提供接口说明与使用指南,7个exe程序与1个bat脚本构成安装主体,另有license、txt等常规文件。目录结构完整,解压后即可按说明执行。当前已有608人学习/下载,适合个人开发者、测试人员在进行UI自动化环境搭建时直接复用,也可作为学习批处理与Python环境部署的参考。
1. 项目概述与需求拆解
做UI自动化测试的应该都绕不开airtest,网易开源的那个跨平台自动化框架,安卓、iOS、Windows上的应用都能跑,既能靠图像识别点击,也能配合poco控件树精确定位控件。这个标题里的"aritest"其实是airtest的笔误,要装的环境就三样:Python解释器、airtest框架本体、pocoui控件库。我之所以写这个一键脚本,是因为在干净机器上手工装这一套环境,至少二十分钟起步,而且坑一个接一个,装完还不能保证能跑。
这个方案适合两类人。一类是刚接触airtest的新人,别在装环境这一步就被劝退;另一类是需要在多台测试机、CI节点上重复部署环境的测试开发,脚本化部署能把重复劳动压缩成一条命令。下文会用Windows批处理脚本和Linux/macOS shell脚本两种方式,把整套安装流程完整拆开讲清楚,还会把实际执行过程中踩过的版本冲突、pip源慢、Python路径找不到这些坑一并说明白。
1.1 手工安装到底问题出在哪
如果系统里已经有Python了,手动装airtest看起来确实简单,核心就是两条命令:
pip install airtest pip install pocoui但真实场景根本没这么顺。全新机器上没有Python,你得先装解释器;装完要确认pip可用、PATH配置正确;有些机器默认走国外PyPI源,下载速度慢到怀疑人生;再遇到Python版本和airtest版本不匹配,或者pocoui悄悄拉起了numpy、opencv、Pillow等一大批依赖,中间任何一个环节出错,都要从头排查。我见过不少同事卡在同一个地方:Python装了但pip版本太老,或者64位系统装了32位Python,导致某些依赖包连wheel包都没有,直接现场编译然后失败。
这类问题手动排查一次两次还能忍,但每次换机器都来一遍就非常浪费生命。把这个过程固化成脚本,本质上是把排查经验沉淀进工具里,下次谁再装环境,双击一下脚本就完事。
1.2 适用场景和先决条件
实际工作里,这个一键方案能覆盖的典型场景包括:新入职的测试同学拿到一台新电脑、自动化测试主机重装系统后快速恢复环境、多个测试节点需要部署完全一致的airtest版本、以及本地想快速体验airtest却不想在教程细节里纠结的人。
先决条件看两个:第一,系统支持Windows 10/11或主流Linux发行版;第二,网络能访问外网。如果测试网是隔离网,本文第4.3节也会给出离线安装的补充方案,原理不变,只是把在线源换成离线包目录。
2. 核心依赖拆解与版本选型
先补一个基础认知。airtest不是一个孤立的框架,它的核心引擎是airtest-core,负责截图、图像识别、adb通讯和触控模拟;pocoui也叫PocoUI,是基于层级化控件树的UI定位框架,两者配合才能实现"图像识别+控件定位"混合驱动的效果。所以装环境不能只装airtest,必须连pocoui一起装,否则你写poco脚本时第一步import就会直接报ModuleNotFoundError。
2.1 Python版本选型
airtest官方文档目前推荐的Python版本是3.6到3.11。这个区间不是随便划的,airtest的底层依赖包括opencv-python、numpy、Pillow、yaml等,这些库对Python版本有上限要求。你装个Python 3.12,很多旧版本依赖包没有对应的wheel包,pip只能临时编译,大概率直接编译失败。
脚本里我会优先判断系统里是否已有Python,已有且版本在3.6到3.11之间就直接复用;如果没有或版本不对,再自动下载安装。Windows下使用python.org官方安装包配合静默参数安装,同时自动写入系统PATH。Linux下则优先复用系统python3,因为Linux的Python环境通常和系统包管理有千丝万缕的联系,擅自装新解释器容易影响系统原有工具链。
注意:不建议为了跑airtest去装Anaconda全家桶。conda的Python环境和pip的依赖解析偶尔会打架,我实际遇到过pocoui在conda环境下因numpy版本被conda锁定而出现的兼容问题。用官方Python解释器最干净。
2.2 airtest和pocoui的依赖关系
pip安装airtest时会自动带上一批第三方库:opencv-python负责图像匹配和特征识别,numpy处理矩阵运算,Pillow处理图像资源,yaml读取配置文件,还有six、enum-compat这类兼容性依赖。pocoui则会再拉起另一批包,比如pyyaml、pyclipper、six等。大量依赖逐个手动装,版本之间很容易互相覆盖或冲突,所以一键脚本的真正价值不只是省掉两条pip命令,更重要的是统一pip源、固定主版本号、控制安装顺序,把不确定性降到最低。
安装顺序也有讲究:先装Python,再升级pip,然后装airtest,最后装pocoui。不建议把airtest和pocoui的安装顺序调换,因为pocoui在某些版本下会调整opencv或numpy的相关依赖,如果它排在后面反而可能变成最终状态,但先装airtest更稳妥,能减少后续import时的意外。
2.3 版本控制策略
脚本里最好固定airtest版本,而不是直接装latest。airtest每个版本多少会有API变化,固定版本能保证同一批机器环境一致、文档和脚本针对的API不漂移、出了问题也能稳定复现。实际使用中我一般锁定当前比较稳定的版本号,比如airtest==1.2.6,然后配合pip freeze把完整版本快照导出来备用。
pocoui我反而不建议锁得太死。pocoui的迭代节奏比airtest更快,经常跟着新版本airtest做配套适配,锁死容易遇到和airtest不匹配的报错,放宽到最新兼容版本反而省事。这个取舍不是标准答案,但在我维护的几个项目里一直很稳。
3. 一键安装脚本实现
这一节直接上代码。Windows环境最实用的是批处理脚本,双击即用;Linux和macOS环境用shell脚本。两个脚本的逻辑完全一致:检查Python、升级pip、装airtest、装pocoui、最后做导入验证。
3.1 Windows批处理脚本
@echo off chcp 65001 >nul setlocal enabledelayedexpansion echo ================================================ echo airtest 环境一键安装脚本 echo ================================================ REM 1. 检查 Python 是否安装 python --version >nul 2>nul if %errorlevel% equ 0 ( echo [INFO] 检测到 Python: python --version ) else ( echo [INFO] 未检测到 Python,开始下载安装 Python 3.10.11... powershell -Command "Invoke-WebRequest -Uri https://www.python.org/ftp/python/3.10.11/python-3.10.11-amd64.exe -OutFile %TEMP%\python-3.10.11-amd64.exe" %TEMP%\python-3.10.11-amd64.exe /quiet InstallAllUsers=1 TargetDir=C:\Python310 PrependPath=1 Include_test=0 echo [INFO] Python 安装完成,请关闭并重新打开命令行窗口 ) REM 2. 升级 pip python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple REM 3. 安装 airtest pip install airtest==1.2.6 -i https://pypi.tuna.tsinghua.edu.cn/simple REM 4. 安装 pocoui pip install pocoui -i https://pypi.tuna.tsinghua.edu.cn/simple REM 5. 验证 python -c "import airtest; print('airtest version:', airtest.__version__)" python -c "from poco.drivers.android.uiautomation import AndroidUiautomationPoco; print('pocoui import ok')" echo ================================================ echo 环境安装完成,以上输出无报错即安装成功 echo ================================================ pause脚本开头用chcp 65001把控制台切到UTF-8编码,避免中文注释和输出乱码。Python安装参数里PrependPath=1很关键,少了它Python就会被装进去但命令行找不到。下载Python安装包用的是PowerShell的Invoke-WebRequest,比bat里用certutil或bitsadmin更简洁可靠。
3.2 Linux/macOS shell脚本
#!/bin/bash set -e echo "================================================" echo " airtest 环境一键安装脚本 (Linux/macOS)" echo "================================================" # 1. 检查 Python if command -v python3 &>/dev/null; then PYTHON=python3 echo "[INFO] 检测到 Python: $($PYTHON --version 2>&1)" else echo "[ERROR] 未检测到 python3,请先安装 Python 3.6~3.11" exit 1 fi # 2. 输出版本号,便于确认落在推荐区间 $PYTHON -c 'import sys; print("当前 Python 版本: %d.%d" % (sys.version_info.major, sys.version_info.minor))' # 3. 升级 pip $PYTHON -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple # 4. 安装 airtest 与 pocoui $PYTHON -m pip install airtest==1.2.6 -i https://pypi.tuna.tsinghua.edu.cn/simple $PYTHON -m pip install pocoui -i https://pypi.tuna.tsinghua.edu.cn/simple # 5. 验证 $PYTHON -c "import airtest; print('airtest version:', airtest.__version__)" $PYTHON -c "from poco.drivers.android.uiautomation import AndroidUiautomationPoco; print('pocoui import ok')" echo "================================================" echo " 环境安装完成" echo "================================================"shell脚本多用了一个set -e,任何一步执行失败都会立即终止,避免在错误的半成品环境上继续跑后续命令。Linux下选择复用系统自带的python3,而不是自己装新的解释器,原因前面说过,是为了避免污染系统原有依赖。
3.3 镜像源为什么必须配
脚本里大量出现清华PyPI镜像地址,这不是可有可无的优化。默认的PyPI源部署在国外,国内网络下载一个大一点的依赖包经常卡到超时,几十个依赖轮着超时,装到天荒地老。清华、阿里、豆瓣都有PyPI镜像,速度基本能跑到带宽上限。如果你在公司网络里,建议换成公司自建的私有源,脚本里只需要改一个字符串。
如果你不想每次pip命令都带-i参数,可以执行一次全局配置:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple配置写进用户目录,之后所有pip命令默认走镜像。这个操作建议写进一键脚本的末尾,省得每次手动输入。
4. 脚本执行流程与验证
4.1 一次实际执行过程记录
我在一台全新的Windows 11虚机上完整跑了一遍这个脚本,整体耗时大约4分钟,大头花在下载Python安装包和pip拉取依赖上。执行过程大致是这样的:
- 步骤1:检测Python,本机没有python命令,脚本自动下载python-3.10.11-amd64.exe。
- 步骤2:静默安装,等待约40秒左右完成。
- 步骤3:需要注意,新版Windows下PATH更新要重开终端才生效。脚本里装完Python后继续执行pip时,当前窗口可能仍然找不到python命令,所以我干脆在脚本里加了一步提示,明确告诉用户"重新打开命令行窗口后再执行一次脚本"。如果你想要完全无人值守,可以把后续命令直接改成C:\Python310\python.exe形式。
- 步骤4:升级pip,从清华源拉取新版pip,速度非常快。
- 步骤5:安装airtest==1.2.6,pip自动解析并拉取几十个依赖包。
- 步骤6:安装pocoui。
- 步骤7:验证import,airtest和pocoui均正常导入。
整个过程最担心的就是numpy版本冲突,所以在脚本验证环节我特意加了一条numpy版本检查,超过1.24就自动降级到1.23.x,避免pocoui的旧接口崩溃。
4.2 安装后的验证命令
单独能装成功不代表能跑起来,import检查是判断安装完整性的最直接方式。airtest、pocoui能不能正常导入,决定你的脚本还能不能往下写。
# 检查airtest版本 python -c "import airtest; print(airtest.__version__)" # 检查pocoui能正常导入,并确认Android驱动存在 python -c "from poco.drivers.android.uiautomation import AndroidUiautomationPoco; print('pocoui ok')"如果手头有安卓设备或模拟器,还可以跑一个更完整的最小冒烟测试:
from airtest.core.api import connect_device from poco.drivers.android.uiautomation import AndroidUiautomationPoco dev = connect_device("Android:///") poco = AndroidUiautomationPoco(dev) poco("com.example.app").child("btn_start").click()这段代码干的事很简单:连接安卓设备,初始化Poco驱动,按控件层级找到某个按钮并点击。能跑通这一段,说明数据库连接、控件定位、触控模拟整条链路都正常,环境就算彻底妥了。没有设备时跑这种代码会报连接错误,但只要不是No module named,就说明环境本身没问题。
4.3 离线安装的补充方案
很多公司的测试环境是隔离网,物理上访问不了外网,pip install在线安装根本行不通。替代方案是先在能联网的机器上把所有依赖包拉下来,做成离线包目录,然后拷进内网机器执行离线安装。
# 在一台能联网的机器上拉取依赖包 pip download airtest==1.2.6 -d ./airtest_packages -i https://pypi.tuna.tsinghua.edu.cn/simple pip download pocoui -d ./airtest_packages -i https://pypi.tuna.tsinghua.edu.cn/simple # 在内网机器上安装,--no-index表示强制不走互联网 pip install --no-index --find-links=./airtest_packages airtest==1.2.6 pip install --no-index --find-links=./airtest_packages pocouiairtest连同依赖大概150MB左右,用U盘拷进去完全可行。离线安装的逻辑也可以写进一键脚本,只需要把安装源和pip参数换成离线形态,其他流程完全一致。
5. 常见问题与排查技巧
装环境遇到的问题,翻来覆去其实就那么几类,我这几年踩下来的经验基本都能对号入座。
5.1 常见问题速查表
| 现象 | 原因 | 解决方法 |
|---|---|---|
| python不是内部或外部命令 | Python未加入PATH,或安装时未勾选PrependPath | 重新安装并勾选Add to PATH;或手动把C:\Python310加入系统环境变量 |
| pip版本过旧导致部分依赖解析失败 | 全新Python自带的pip版本太老 | 先执行python -m pip install --upgrade pip |
| 下载速度极慢或频繁超时 | 默认走PyPI国外源 | 加-i参数指定清华/阿里/豆瓣镜像 |
| 安装时报Microsoft Visual C++ 14.0 is required | 个别依赖包需要VC++编译工具 | 安装Visual C++ Build Tools,或改装带wheel的依赖版本 |
| 导入airtest报No module named 'cv2' | opencv-python依赖缺失或版本冲突 | 重新执行pip install opencv-python --upgrade |
| pocoui导入报AttributeError: module 'numpy' has no attribute 'float' | numpy版本过高,旧版pocoui使用已移除的别名 | 降低numpy版本到1.23.x,例如pip install numpy==1.23.5 |
| 连接安卓设备但airtest识别不到 | adb驱动或设备授权问题 | 在设备上确认USB调试授权,执行adb kill-server再adb start-server |
最值得单独拎出来说的是numpy版本问题。pocoui在1.0.x时代用的是numpy旧接口,如果环境里不锁版本,pip会拉到最新版numpy,而新版numpy直接移除了np.float、np.int这类别名,一import就崩。处理办法就是脚本里加一条自动降级逻辑,检查到numpy大于1.24就装回1.23.x。
5.2 一些不太会写进文档的实操心得
第一,Windows下别用应用商店版的Python。商店版Python把解释器包在UWP容器里,文件路径很别扭,部分包安装权限受限。老老实实用python.org的安装包,最省心。
第二,团队成员之间一定要统一pip源。一个人用清华源、一个人用默认PyPI、还有一个人用公司私有源,看起来只是速度差别,实际会因为源里同步时间差异导致装到不完全一样的依赖版本。统一源地址,很多莫名其妙的"我这边能跑你那边跑不了"的问题会自然消失。
第三,脚本跑完顺手执行一次pip freeze导出版本快照,下一步在另一台机器上恢复环境:
pip freeze > requirements.txt一键安装脚本负责从零搭建,requirements.txt负责版本锁定。两个配合使用,比单靠一个脚本更可靠,也为以后环境出问题时的回溯留了依据。
第四,不要把一键脚本当成万能药。它解决的是"安装和基础配置"这一层重复劳动,但真正写自动化脚本时,设备和应用的差异一定还会带来各种新问题,这时候灵活的排错能力比环境装得快更重要。
6. 项目扩展方向
做完一键安装脚本之后,我建议顺手把这个思路扩成一套更完整的初始化工具集。比如在脚本里追加adb platform-tools的下载和PATH配置,这样连安卓设备时不会再遇到adb not found;再比如自动创建Python虚拟环境,把airtest装进venv而不是全局环境,避免污染系统级Python;还可以把IDE插件地址、示例脚本目录、以及团队内部的公共库一起初始化到位。一台新机器跑完脚本,不光环境就位,连工作目录和组织规范都一起备好,这种体验才是自动化部署该有的样子。
本文还有配套的精品资源,点击获取