一、如何评估框架和分层思想
1、为什么要设计测试框架
- 产品或工具需要考虑开发效率和成本;
- 需要高效的框架;
- 框架,就是介于原生代码和最终产品之间的一个半成品;
2、如何评价一个框架的好坏?
从以下几个方面来评估:
- 独立于测试工具;如测试框架不受工具限制,测试工具如postman或jmeter只是测试框架某种支持功能的底层的一部分;
- 测试步骤可重用;
- 测试资产可重用;如测试脚本,测试数据,测试环境等;
- 测试数据易定制;如页面输入测试数据,或上传数据,自动生成特定条件的数据;
- 异常处理机制;如自动截图,保留日志和数据,提交bug,自动继续运行等;
- 测试脚本易开发;
- 测试脚本易维护;
- 无人干预执行;如代码提交后可自动运行,半夜可定时运行等;bug修复后可自动进行回归验证;
- 代码可移植性高;如从window移植到linux上;
- 适宜于团队开发;如多人开发;
3、当前流行的框架设计思路
- 数据驱动测试DDT(Data-Driven Testing)
- 关键字驱动测试KDT(Keyword-Driven Testing)
- 业务流程测试BPT(Business Process Testing)
- 页面对象模式POM(Page Object Model)
- 基于组件的测试CBT(Component-Based Testing)
4、分层思想
- 核心就是不同的操作,应该放在不同的类和不同的方法中,层与层之间互相依赖,互相调用,每一层都有自己的独特的分工;
- 不会跨层调用;
指导原则:
- 上层总是依赖下层,不要跨层访问;
- 一切从系统需要提供的功能进行分析;
- 每个层的接口有明确的职责范围;
- 只要接口规范无变化,接口的实现互不影响;
Woniu CBT框架的设计思想:
- 核心,基于产品业务和基于测试组件;
- 组件有几大类:
- 公共组件
- 操作组件
- 测试组件
- 业务组件
- 模块组件
5、现在流行框架存在的问题
- 测试框架只针对某些特定领域;
- 测试框架试图减少测试人员的编码量,导致脚本的各项操作被限制的恨死,无法进行深度开发和定制;
- 测试框架的通用性更强,试图适用于各类测试,使得灵活性和可深度开发性大打折扣;
6、小结
- 测试框架,就是介于原生代码和最终产品之间的一个半成品;
- 测试框架的好坏,需要从独立性,可重用性,稳定性,易开发,易移植,可团队开发等多角度来衡量;
- 当前流行的框架设计,主要有数据驱动,关键字驱动,业务驱动,页面对象模式,基于组件模式等;
- 框架设计和产品设计,一样要遵循分层指导原则;
- 现有的框架,存在只针对特别领域,灵活性,可扩展性不强等多种问题;
二、图像识别和模版匹配算法
1、图像识别匹配算法
为什么要做图像识别?
- 界面元素定位难题;
- SikuliX没有专门的python接口,只能利用JPype进行跨语言调用;
什么是图像识别?
- 核心本质,对图像轮廓的描述,变形后的容错,像素信息的匹配处理等;
图像识别要怎么做和做什么?
- 在一个大的画面中,查找一个匹配某个小区域的画面元素,然后定位到该元素上,再进行相应的操作(如点击),从而实现测试的目的;
模版匹配
- 对于要操作的画面元素,进行单独的截图,这个截图称之为模版;(如要被点击的按钮图片)
- 利用这个模版,在整个当前屏幕或者当前窗口进行搜索匹配,找到完全符合条件的区域的中心位置坐标的过程,就是模版匹配;(如拿着按钮的图片,在页面中按照像素来查找,找到了,就点击页面中按钮的中心位置,完成操作目的);
- 模版匹配的缺点:模版匹配具有一些局限,只能进行平行移动,若原画面中的匹配模版发生旋转或大小变化时,模版匹配算法无效;即识别不出来模版变形的情况;
滑动比对(RGBA比对)
匹配度(Similarity)
- 即相似度,主要用于解决图像匹配过程中的容错问题;
- 考虑的角度有以下几方面:
- 像素数占比;
- RGBA值占比;(在正确的值的上下浮动10%范围以内,都可以判断为正确),如红色取200为正确,180或220以内也可以算正确;
- 还可以采用预先转换为灰度图的方式,即图片转为白黑灰后比对;
图像识别匹配算法--算法思路
1)依据测试场景,对需要操作的元素截图;
- 注意,截图时最好确保图片的中心位置与元素的中心位置一致;
2)依据需要对当前屏幕截图;
3)获取模版图片和屏幕截图的每一个像素点的颜色值,并保存到一个列表中,供后续滑动和遍历对比;
4)通过循环在X和Y轴两个方向上进行逐点判断,如果没有匹配就滑动到下一个点,直到找到匹配为止;
5)依据匹配的点的位置,获取中心点的位置,并返回;
6)利用获取到的坐标,进行相应的鼠标和键盘操作即可。
2、利用Python开发模版匹配算法
3、基于图像识别的自动化开发
4、基于OpenCV的图像识别技术
5、图像识别技术在移动端的应用
三、云测试平台