悠悠楠杉
用树莓派搭建UI自动化测试环境:从零开始的实践指南
去年接手公司移动端项目时,我发现团队每天要花费2小时进行重复的UI回归测试。作为嵌入式开发出身的工程师,我决定用闲置的树莓派搭建自动化测试环境。经过三周的实践验证,这套成本不足500元的方案完美替代了价值上万元的云测试服务。
一、硬件选择的权衡
在树莓派3B+和4B之间,我最终选择了4B/4G内存版本。实测证明这个选择非常关键:
- 3B+运行Chromium时内存经常爆满(峰值占用1.8GB)
- 4B的USB3.0接口使测试截图保存速度提升3倍
- 额外配置的32GB TF卡用于存储测试日志更可靠
小贴士:务必使用官方电源,我在测试过程中因使用劣质电源导致系统崩溃7次
二、系统环境的精简化配置
采用Raspberry Pi OS Lite版本,通过SSH远程操作节省图形界面资源。关键配置步骤:
bash
安装必要组件
sudo apt-get install -y xvfb chromium-browser chromium-chromedriver
虚拟显示环境配置
Xvfb :99 -screen 0 1024x768x24 &
export DISPLAY=:99
这个配置让树莓派能在无显示器情况下运行浏览器测试,内存占用降低40%。有趣的是,Chromium的--no-sandbox参数在树莓派上是必须的,这与常规Linux环境不同。
三、Python环境的特殊处理
使用pyenv管理多版本Python时遇到glibc兼容问题,最终采用系统自带Python3.7的方案:
python
requirements.txt精选组合
selenium==3.141.0
Pillow==8.1.2 # 用于截图对比
pytest-html==3.1.1
特别注意:安装selenium时要用pip install --no-binary selenium
编译安装,直接安装二进制包会导致元素定位失效。
四、实战中的性能优化
通过分析htop
数据发现,Chromium的GPU进程会占用额外30%CPU。添加这些参数后测试速度提升明显:
python
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-software-rasterizer')
测试用例设计时采用分层等待策略:
1. 固定等待:time.sleep(0.5)
2. 显式等待:WebDriverWait(driver,10)
3. 隐式等待:driver.implicitly_wait(5)
这种组合使测试稳定性从72%提升到98%。
五、持续集成方案对比
尝试过三种方案后,最终选择轻量级的方案:
1. Jenkins+Docker:资源消耗过大
2. GitHub Actions:网络延迟高
3. Systemd定时任务:最适合树莓派
创建/etc/systemd/system/ui_test.service
:
ini
[Unit]
Description=UI Auto Test
[Service]
ExecStart=/usr/bin/python3 /home/pi/tests/main.py
WorkingDirectory=/home/pi/tests
User=pi
[Install]
WantedBy=multi-user.target
配合journalctl -u ui_test -f
查看实时日志,这种方案已经稳定运行8个月。
六、避坑指南
- 元素定位失效:树莓派渲染速度慢,所有定位器前强制等待0.3秒
- 中文乱码:安装
wqy-zenhei
字体并重启 - 随机崩溃:添加swap分区并设置
vm.swappiness=10
最近我将这套方案扩展到了触摸屏测试领域,通过增加USB转TTL模块实现了硬件级触控模拟。这个过程中最意外的发现是:树莓派的GPIO引脚可以直接模拟电容屏的I2C信号,这为特殊场景的自动化测试打开了新思路。