OpenCV 是计算机视觉领域广泛使用的开发库之一,现在 Macaca 已集成并提供 OpenCV 能力,用来支撑自动化测试过程中的计算视觉需要。
现在的 UI 自动化用例大都使用工具,围绕着各种 id, text, xpath 等信息进行采集和编写,有了 OpenCV 的支持,你可以直接对着 Screen 截图,保存元素图像,然后解锁新姿势:
用作元素验证:输入元素图路径与屏幕截图路径进行 match,确认元素是否出现。
用作元素定位:输入元素图路径与屏幕截图路径,得到元素出现的坐标,进行下一步操作。
有了图像匹配,图像相似度计算,人脸识别等功能,发挥想象力,你可以做得更多!
Q: 我们用 Macaca 或 Appium 已经写了很多自动化用例,测试框架也都在顺畅运行,接入后会不会破坏当前的和谐?
A:接入成本几乎为零,现有的测试框架和用例无需改造,部署 nodecv-server 后,在需要的地方调用就行。
Q: 我们的自动化用例是 Java 写的,还有 Python 写的,甚至是 C 写的...
A: 没关系,我们已提供 Node.js, Java, Python 的 Sample 供你选择使用,只要你可以发送 post 请求就行。
Q: 我们的用例跑在不同的设备上,需要重复部署吗?
A: 建议部署 nodecv-server,提供服务供多个设备调用(支持 Docker 部署,环境不再是问题),另外,你也可以选择单机直接调用 OpenCV API。
Mac:
$ brew tap homebrew/science
$ brew install opencv
Windows:
网上 Windows 安装 OpenCV 教程非常多,可自行选择参考,建议安装 OpenCV 2.4 版本,此版本稳定。
关于自动化用例的截屏,大部分框架都有现成的 API 可以使用,传入保存路径即可,如 Macaca 的 screenshot(path)
关于元素图,可根据当前的实现进行图像文件管理,等同于用例的测试数据部分。
$ git clone git@github.com:macacajs/nodecv-server.git --depth=1
$ cd nodecv-server
$ npm i
$ make server
启动服务后,访问本地 Demo Page: http://localhost:9900/opencv/demo
将待匹配图像发送 POST 请求/opencv/findpairs 进行处理,其中 file1 为元素图(小图),file2 为 Screen 截屏(大图)
得到响应为:
{"match":{"result":true,"width":1258,"height":308,"match_x1":184,"match_y1":69,"match_x2":334,"match_y2":112},"urls":[{"name":"nodecv_button.png","url":"d6175319f3319e736a2351c37480bb4f.png"},{"name":"nodecv_page.png","url":"0446ea910f55ddc27f82d8778b836cdf.png"}]}
其中 width 为大图宽,height 为大图高,(match_x1,match_y1) 为匹配矩形区域的左上角坐标,(match_x2,match_y2) 为匹配矩形区域右下角坐标
class nodecvSample:
def __init__(self, host):
self.host = host
def getresult(self, files):
url = self.host + '/opencv/findpairs'
res = requests.post(url, files=files)
try:
jsonres = json.loads(res.text)
match_res=jsonres["match"]
if match_res["result"] == True:
print "Match"
else:
print "Not Match"
except:
print "Exception"
return res.text
if __name__ == '__main__':
sample = nodecvSample('http://localhost:9900')
print sample.getresult({
'file1': ('nodecv_button.png', open('./fixture/nodecv_button.png', 'rb'), 'image/jpeg', {'Expires': '0'}),
'file2': ('nodecv_page.png', open('./fixture/nodecv_page.png', 'rb'), 'image/jpeg', {'Expires': '0'})
})
$ git clone https://github.com/macaca-sample/cv-sample-python
$ pip install -r requirements.txt
微博:小斤陈
Email: shchenxin@aliyun.com
最后打个广告,支付宝国际无线团队正在大力招聘测试开发专家/Senior Engineer,有兴趣欢迎联系!