51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2917|回复: 2
打印 上一主题 下一主题

[转贴] [解锁 UI 自动化新姿势]- Macaca+ 计算机视觉

[复制链接]
  • TA的每日心情
    无聊
    前天 09:07
  • 签到天数: 11 天

    连续签到: 2 天

    [LV.3]测试连长

    跳转到指定楼层
    1#
    发表于 2017-6-27 16:18:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    【解锁UI自动化新姿势】- Macaca+计算机视觉OpenCV 是计算机视觉领域广泛使用的开发库之一,现在 Macaca 已集成并提供 OpenCV 能力,用来支撑自动化测试过程中的计算视觉需要。
    1 计算机视觉?你能够做什么?现在的UI自动化用例大都使用工具,围绕着各种 id, text, xpath 等信息进行采集和编写,有了 OpenCV 的支持,你可以直接对着 Screen 截图,保存元素图像,然后解锁新姿势:
    • 用作元素验证:输入元素图路径与屏幕截图路径进行match,确认元素是否出现。
    • 用作元素定位:输入元素图路径与屏幕截图路径,得到元素出现的坐标,进行下一步操作。
    • 有了图像匹配,图像相似度计算,人脸识别等功能,发挥想象力,你可以做得更多!

    2 看上去很不错!但我有些顾虑?Q: 我们用 Macaca 或 Appium 已经写了很多自动化用例,测试框架也都在顺畅运行,接入后会不会破坏当前的和谐?
    A:接入成本几乎为零,现有的测试框架和用例无需改造,部署 nodecv-server 后,在需要的地方调用就行。
    Q: 我们的自动化用例是 Java 写的,还有 Python 写的,甚至是 C 写的...
    A: 没关系,我们已提供 Node.js, Java, Python 的 Sample 供你选择使用,只要你可以发送post请求就行。
    Q: 我们的用例跑在不同的设备上,需要重复部署吗?
    A: 建议部署 nodecv-server,提供服务供多个设备调用(支持Docker部署,环境不再是问题),另外,你也可以选择单机直接调用 OpenCV API。
    3 好的!我要怎么上车?3.1 安装 OpenCVMac:
    $ brew tap homebrew/science$ brew install opencvWindows:
    网上Windows安装 OpenCV 教程非常多,可自行选择参考,建议安装OpenCV 2.4版本,此版本稳定。
    3.2 截屏关于自动化用例的截屏,大部分框架都有现成的 API 可以使用,传入保存路径即可,如 Macaca 的screenshot(path)
    关于元素图,可根据当前的实现进行图像文件管理,等同于用例的测试数据部分。
    3.3.1 服务调用:
    • 1) 安装部署Node服务
    $ 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
    • 2) 目前支持Node,Python,Java的调用方式,以下用法以Python为例:
    将待匹配图像发送POST请求/opencv/findpairs进行处理,其中file1为元素图(小图),file2为Screen截屏(大图)
    得到响应为:
    1. {"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)为匹配矩形区域右下角坐标



    1. class nodecvSample:

    2.     def __init__(self, host):
    3.         self.host = host

    4.     def getresult(self, files):
    5.         url = self.host + '/opencv/findpairs'
    6.         res = requests.post(url, files=files)
    7.         try:
    8.             jsonres = json.loads(res.text)
    9.             match_res=jsonres["match"]
    10.             if match_res["result"] == True:
    11.                 print "Match"
    12.             else:
    13.                 print "Not Match"
    14.         except:
    15.             print "Exception"
    16.         return res.text

    17. if __name__ == '__main__':
    18.     sample = nodecvSample('http://localhost:9900')
    19.     print sample.getresult({
    20.         'file1': ('nodecv_button.png', open('./fixture/nodecv_button.png', 'rb'), 'image/jpeg', {'Expires': '0'}),
    21.         'file2': ('nodecv_page.png', open('./fixture/nodecv_page.png', 'rb'), 'image/jpeg', {'Expires': '0'})
    22.     })
    复制代码
    • 3)除了findpairs之外,nodecv-server目前也提供了dissimilarity相似度计算,matchtemplate模板匹配等服务。
    3.3.2 本地CV调用
    • 1) 安装Python OpenCV
    1. $ git clone https://github.com/macaca-sample/cv-sample-python
    2. $ pip install -r requirements.txt
    复制代码
    • 2) 本地调用OpenCV API进行开发,目前有Python版本Sample,参考opencv-sample.py

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    该用户从未签到

    2#
    发表于 2017-6-27 16:51:23 | 只看该作者

    运行 python nodecv-server-sample.py,会提示:TypeError: Cannot read property 'name' of undefined,Python:2.7,macOS:10.12
    10129

    弄好了,原来是是楼主给的代码有问题,

    可以看出,楼主的代码
    ,“file1,file2”应该改成“image1,image2”
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    前天 09:07
  • 签到天数: 11 天

    连续签到: 2 天

    [LV.3]测试连长

    3#
     楼主| 发表于 2017-6-27 16:52:21 | 只看该作者
    悠悠小仙仙 发表于 2017-6-27 16:51
    运行 python nodecv-server-sample.py,会提示:TypeError: Cannot read property 'name' of undefined, ...

    嗯,大意了,谢谢指正!
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-21 05:49 , Processed in 0.063494 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表