人工智能自动化测试探索
背景
自动化测试技术已经从最初的模拟硬件方法发展到数据驱动、关键字驱动,再到现在的函数和指令驱动的自动化测试技术。 它越来越多地用于各种软件项目。 成熟。 自动化测试技术具有重复性好、高并发、高效率的特点,显着提高了各类测试项目的测试效率,将测试人员从繁琐的执行中解放出来; 但在实施自动化测试的过程中,往往会消耗大量的时间和资源在测试准备、测试重测、结果分析和案例维护上。
随着人工智能的普及,预计自动化测试过程中将投入大量人力进行优化和重构; 最终目标是让自动化测试尽可能摆脱手工劳动,实现真正的自动化。
项目目标:
形成一套智能自动化测试解决方案,可实现各类移动应用的全自动Bug探索和测试。
1.通过一套自动化测试框架/脚本实现任意APP的全路径bug探索和测试。
2、实现APP功能模块的自动探索,形成功能图。
3、实现故障案例的自动分析和复测以及测试结果的智能分析。
4、实现执行过程的可视化,使定位问题更清晰、更准确。
可行性分析
一、被测物体智能识别
1.通过android工具的LazyUIAutoMatorViewer可以自动获取控件对象信息。
2、根据控件的特征,通过人工智能提取特征训练来识别业务功能。
二、根据被测对象的特点,智能地进行测试
1、对移动应用测试的操作方法进行分类封装(参见4.控制对象的操作封装)。
2、根据不同的业务功能,形成具体的测试脚本。
3. 根据被测应用的对象和业务情况,智能地进行测试执行。
三、检测结果智能分析,针对性补充检测
1. 根据错误的特征,利用人工智能对错误进行识别和分类。
2、通过对形成的业务功能图进行分析,根据故障节点的错误特征进行补充测试。
环境信息
测试APP:手机银行APP、微信APP
测试平台:Android+Appium
人工智能工具:Sklearn、ANN
脚本语言:Python3.6
人工智能自动化探索流程:
流程概述:获取应用信息->生成操作代码->执行测试操作->完成探索性测试->生成应用逻辑图->测试对象分类->匹配测试脚本->执行测试->生成测试报告
整体流程图如下:
项目详情:
1.应用逻辑图
首先,在执行测试之前,我们需要探索构成被测应用程序的结构、函数和控制对象类型集,并生成应用程序的应用程序逻辑图。 通过在应用逻辑图对应的接口图中添加大量的函数名称标签,训练逻辑图知道相关接口的函数名称。 最后,通过人工智能识别,可以自动生成准确的逻辑图。
通过逻辑图,首先可以提供测试执行的操作步骤和执行顺序; 其次,出现问题时可以记录分析并自动补充测试。
下图是APP部分功能的逻辑图示例:
应用界面探索:
由于逻辑图需要探索被测应用,在探索过程中会不断出现新的未测试的接口,但已经测试过的接口也会出现。 为了不重复探索,需要识别该界面是否是新界面,并且界面中存在很多自动变化的控件,例如轮播,或者定期刷新数据。
这个区域可以利用人工智能识别图像来判断是否是新界面。 方法如下:
测试对象是进入界面的截图,对比对象是之前所有界面截图的数据集。
使用ORB检测器、BFMatcher提取并计算特征点、KNN对结果进行过滤,并计算对比图片的相似度。
主要代码如下:
阅读图片
img1 = cv2.imread(img1_path,cv2.IMREAD_GRAYSCALE)img2 = cv2.imread(img2_path,cv2.IMREAD_GRAYSCALE)
初始化 ORB 检测器
orb = cv2.ORB_create()kp1, des1 = orb.detectAndCompute(img1, None)kp2, des2 = orb.detectAndCompute(img2, None)
提取并计算特征点
bf = cv2.BFMatcher((cv2.NORM_HAMMING)
knn 过滤结果
匹配 = bf.knnMatch(des1, trainDescriptors=des2, k=2)
检查最大匹配点数
good = [m for (m, n) in matchesif m.distance < 0.75 * n.distance]similary = len(good)/ len(matches)
经验证,如果当前参数设置相似度达到65%以上,则界面相同较为合适。 但该算法也会造成极少数界面相似度异常(例如下面两个屏幕会被算法识别为新界面,即低于65%),需要改进算法或者更好的算法需要使用。
为了保证准确性,增加了图像像素遍历比较方法,相似度设定为98%。
未通过 KNN 算法且相似度低于 65% 但像素比较高于 98% 的界面被视为已通过测试。
2、业务功能智能识别
2.1 OCR文字识别
通过OCR图像文字识别技术,可识别业务关键词,如储蓄、存款、存单、定期、周年、专属、利率等。并为各界面的关键词组建立相关数据,构建界面关键词数据库,锚定界面业务功能。
2.2 图像特征识别
对于图标、图片等对象,还可以通过卷积神经算法获取对象特征,计算对象的业务功能和业务层级关系。 当界面中存在相同文字的对象时,可以达到良好的识别和区分效果。
示意图如下:
2.3 功能接口分类
通过前面提到的控件标识和界面标题标识,结合具体的功能界面,可以推断出功能界面信息。
如下图所示,左图将被识别为入口界面; 中间的图片会被识别为具体的功能界面;
右侧标题位置有明显标记的类型将被识别为特定功能接口,并增加标题权重作为主要功能关键字。
3. 应用控制对象识别。
应用程序中的每个界面都有很多控件,控件的类型也很多。我们需要能够智能识别控件的类型、路径等信息
比如下左图是某银行APP的首页; 下右图是该控件对应的XML信息。
通常手动编写脚本的过程是手动查找控件的XML信息,编写一个Appium可以识别的对象,然后添加Appium操作代码,完成对该对象的操作指令,如下所示:
上图红框中,find_element_by_name 和 find_element_by_xpath 是查找对象的不同方法。 括号中的参数是对应的值。 一般需要人工确认才能找到对象。 Find_element_by_xpath是最常用的方法,其对应的参数是Xpath。
click()方法是最常用的对象操作指令,可以完成大部分页面跳转。
因此,要由机器完成appium脚本创建,只需要自动找到对象并添加相应的操作指令即可。
通过学习和研究,我们总结了一些Xpath规则,一般由以下几个要素组成:
一:文本或content-desc(例如:财富)
二:resource-id(例如:cn.com.spdb.mobilebank.per:id/close_dialog)
三:实例(例如:0)
四:类(例如:android.widget.RadioButton)
组合后一般可以得到如下Xpath
//android.widget.RadioButton[@resource-id=’cn.com.spdb.mobilebank.per:id/radio_button1′]
//android.widget.TextView[@text=’转账汇款’]
//android.widget.LinearLayout[@resource-id=’cn.com.spdb.mobilebank.per:id/ll_item_adver_layout’]/android.widget.ImageView[1]
APP中的控件类型很多,也有很多自定义控件(布局控件),以及一些兼容的视图。 对控件的主要操作是点击,输入和清除仅用于文本控件。
您可以参考以下列表,其中包括一些常用的控件类型:
4、控制对象的操作封装
Android基础控件库
另外,移动应用中存在多个页面,需要向上或向左或向右滑动才能完整显示。 需要添加所有翻页功能,并且要考虑到不同的分辨率。
下面是对应的滑动代码。
5、测试结果智能分析
1.错误分类识别及处理
测试过程中难免会出现错误,手动排错效率非常低。 尤其是经过大量测试后,手动排查问题也会费时费力。 如果能够自动识别测试错误类型并进行有针对性的自助处理,测试效率将会大大提高。
主要分为三类:程序错误、数据错误和环境错误。 处理逻辑见下图:
2.自动识别业务变化
在形成功能逻辑图的前提下,智能对比变更前后的应用差异,快速告知测试人员业务功能的变更; 这可以有效降低变更关联风险,提高变更分析效率。
原理图,示意图:
3. 错误报告可视化
利用之前生成的应用逻辑图进行了一些功能扩展。 自动化执行开始后,根据验证情况,添加错误(红色)或提示(黄色)警告,帮助测试人员了解错误信息并点击警告。 了解更多。
比如下图,品牌推广出现测试错误,推出新基金,理财产品短期理财信息发生变更,理财产品专属财务数据错误。
原理图,示意图:
点击短期理财警告图标,打开短期理财测试记录文件夹,查看提示信息。
顾翔老师与云测试学院联合推出:软件测试分析与设计,请点击观看。 如果您有不同的想法,欢迎与顾翔老师交流!