【minicap】基于图像识别的手机端UI自动化测试的截图方式更新

时间:2024-03-11 11:53:47
minicap属于STF框架的一个工具,可以高速截图、同步手机屏幕至浏览器等
 
为什么用minicap截图:
经过试验,截同一个屏幕的一张图,adb shell screencap速度为2.9秒,而minicap为0.8秒,效率高很多,这在基于图像识别的自动化测试中,起到至关重要的作用
 
minicap的使用
1、要给手机安装minicap,需要先传两个文件到手机,分别是minicap可执行文件,和minicap.so动态链接库
但这两个文件对于不同手机不是通用的,他是根据手机CPU架构(arm64-v8a、armeabi-v7a,x86,x86_64)和sdk版本来的
 
获取CPU架构
adb shell getprop ro.product.cpu.abi
 
获取sdk版本(安卓)
adb shell getprop ro.build.version.sdk
 
根据CPU架构和SDK版本,分别获取minicap和minicap.so(要获取对应的文件需要自己编译,太麻烦,airtest项目给我们提供了方便,直接获取就行,前提是下载了airtest项目的源码,或者import airtest)
就如我获取到我的手机CPU架构为arm64-v8a,sdk版本为27,则到airtest项目下根据arm64-v84找到minicap可执行文件(airtest\core\android\static\stf_libs/arm64-v8a/minicap)
(airtest\core\android\static\stf_libs\minicap-shared\aosp\libs\android-27\arm64-v8a\minicap.so)
 
2、找到文件,上传至手机指定的目录
adb push minicap /data/local/tmp
adb push minicap.so /data/local/tmp
 
3、更改权限
adb shell chmod 777 /data/local/tmp/minicap
adb shell chmod 777 /data/local/tmp/minicap.so
 
这个时候,准备工作都已经完成了,现在我要做两件事
1、截图
先获取手机分辨率
adb shell wm size
 
然后执行命令
adb shell \
LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -P 720x1520@720x1520/0 -s > /sdcard/deal_with_pic/1.png
这个时候,手机就有一张截图在指定的目录下了
 
2、同步手机屏幕至浏览器
同样的,先获取手机分辨率,然后执行命令
adb shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -P 720x1520@720x1520/0
这时候,就启动了一个server
打开另一个命令行窗口,端口映射:将服务端的端口映射到1717
adb forward tcp:1717 localabstract:minicap
然后,运行minicap项目下的example目录下的app.js(需要安装node.js,minicap项目到github上clone https://github.com/openstf/minicap)
node app.js
 
最后,打开浏览器,输入localhost:9002,就把手机屏幕同步到浏览器了
这个跟airtest中的手机屏幕同步是一样的,响应很快
 
搞了半天,这玩意儿能做什么?这就是minicap的母项目stf要做的(https://openstf.io/),可以自己做一个云测平台