人工智能自动化测试探索

 🔥 交流讨论:欢迎加入我们一起学习!

🔥 资源分享耗时200+小时精选的「软件测试」资料包

🔥 教程推荐:火遍全网的《软件测试》教程  

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

背景

自动化测试技术从最初的模拟硬件方式,到基于数据驱动,基于关键字驱动,再到现在基于功能和指令驱动的自动化测试技术,在各类软件项目中的应用也越来越多,越来越成熟。自动化测试技术有良好的可重复性,高并发和高效率的特点,为各类测试项目中显著的提高了测试效率,将测试人员从繁琐的执行中解放了出来;但是在实施自动化测试过程中,往往测试准备,测试复测,结果分析和案例维护等方面需要耗费大量的时间和资源。

随着人工智能的普及,期望在自动化测试的过程中还需大量投入人力的环节进行优化和重构;终极的目的是使得自动化测试能够尽可能脱离人工,实现真正意义上的自动化。

项目目标

形成一套智能的自动化测试解决方案,能实现各种移动app的全自动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)
  • 1
  • 2

初始化ORB检测器

    orb = cv2.ORB_create()
    kp1, des1 = orb.detectAndCompute(img1, None)
    kp2, des2 = orb.detectAndCompute(img2, None)
  • 1
  • 2
  • 3

提取并计算特征点

    bf = cv2.BFMatcher(cv2.NORM_HAMMING)
  • 1

knn筛选结果

    matches = bf.knnMatch(des1, trainDescriptors=des2, k=2)
  • 1

查看最大匹配点数目

    good = [m for (m, n) in matches if m.distance < 0.75 * n.distance]
    similary = len(good) / len(matches)
  • 1
  • 2

经验证,目前参数设置相似度达到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的规律,一般可以有以下几个元素构成:

一:text或content-desc(例如:财富)

二:resource-id(例如:cn.com.spdb.mobilebank.per:id/close_dialog)

三:instance(例如:0)

四:class(例如: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的控件类型非常多,并且还有很多自定义控件(布局控件),还有一些兼容用的视图,而对控件的操作主要是点击,输入和清空只用在文本控件的操作上。

可以参考下面的列表,包含了常用的一些控件类型:

操作类型 控件类型点击(Click)输入(send_keys)示例
TextView(文本)YY在这里插入图片描述
EditText(文本)YY在这里插入图片描述
Button(按钮)YN在这里插入图片描述 在这里插入图片描述
ImageButton(按钮)YN在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
ToggleButton(状态开关)YN在这里插入图片描述在这里插入图片描述
CheckBox(单选按钮)YN在这里插入图片描述
RadioButton(复选按钮)YN在这里插入图片描述在这里插入图片描述
Spinner(下拉列表)YN在这里插入图片描述
Gally(图像列表)YN在这里插入图片描述
ImageSwitcher(图像切换,可以变换图片)YN在这里插入图片描述
TableLayout(布局控件)YN在这里插入图片描述
FrameLayout(布局控件)YN在这里插入图片描述
LinearLayout(布局控件)YN在这里插入图片描述
RelativeLayout(布局控件)YN在这里插入图片描述
ImageView(图像)YN在这里插入图片描述在这里插入图片描述
ListView(列表视图)YN在这里插入图片描述
View(视图)YN在这里插入图片描述
AdapterView(适配视图)YN在这里插入图片描述
GridView(网格视图)YN在这里插入图片描述
WebView(网络视图)YN在这里插入图片描述

4、控件对象的操作封装

安卓基础控件库

这里我列举一些,更多的大家可以查看我之前的一篇帖子。

appinum常用方法_appinum点击iphone屏幕-CSDN博客

基础控件库名控件库作用详细说明
AndroidAppStart启动App启动应用的某个界面(比如首页)
AndroidClick点击控件点击控件
AndroidEdit编辑文本密码,特定格式文本,字体,输入框有无焦点
AndroidTap点击坐标点击坐标
AndroidSwipe滑动方向滑动,滑动触发行为,特定滑动控件

另外移动应用中存在着多页的页面,需要上下滑,或左右滑,才能完整显示,所有需要添加翻页的功能,并且要考虑到不同分辨率的情况。

以下是对应的滑动代码。

在这里插入图片描述

5、测试结果智能分析

1、错误分类识别和处理

测试中难免出现报错,手工排查效率很低,特别是在大量测试后,人工排查也将费时费力,如果自动识别测试错误类型,并针对性的自助处理,测试效率将大大提高。

主要有程序错误,数据错误,环境错误三大类,处理逻辑请看下图:
在这里插入图片描述

2、业务变更自动识别

在功能逻辑导图形成的前提下,智能对比变更前后的应用差异,快速告知测试人员业务功能变更情况;可以有效降低变更关联性风险,提高变更分析效率。

示意图:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
3、错误报告可视化

利用之前提到生成的应用逻辑导图做了一些功能扩展,在自动化执行开始后,根据验证情况,添加错误(红色)或提示(黄色)警告,帮助测试人员了解错误信息,并通过点击警告,了解详情。

例如下图,如果品牌特惠出现测试错误,基金存在新的基金上线,理财产品短期理财理财信息变更,理财产品专属理财数据错误。

示意图:
在这里插入图片描述
点击短期理财警告图标,将打开短期理财测试记录文件夹,查看提示信息

在这里插入图片描述

在这里插入图片描述

限于篇幅,很多地方未能介绍详细;同时也受限于精力,还有很多带实现优化的地方。后续笔者会继续更新,补全整篇。也欢迎广大的朋友们群策群力,共同完善。

最后我邀请你进入我们的【软件测试学习交流群:785128166】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:程序员二黑】自提!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
人工智能在软件测试中的应用,并不仅仅是指AI测试。AI测试是人工智能在软件测试领域中的一种具体应用方式。人工智能在软件测试中的应用还包括但不限于以下几个方面: 首先,人工智能可以应用于测试用例的生成与优化。传统的测试用例生成往往是人工编写,费时费力且可能漏掉一些特殊情况。而借助人工智能技术,可以通过数据驱动的方式,对软件进行学习和探索,从而自动生成更全面的测试用例,提高测试效率和覆盖率。 其次,人工智能可以用于软件缺陷的自动发现与定位。通过对软件运行时的行为进行监测和分析,结合机器学习和数据挖掘算法,可以实现对潜在缺陷的预测和及早发现,提早修复,从而提高软件的质量和稳定性。 此外,人工智能还可以应用于自动化测试自动化测试是软件测试中常用的一种方式,通过编写测试脚本和使用自动化测试工具,可以提高测试执行的效率和一致性。而人工智能技术可以进一步增强自动化测试的能力,例如利用机器学习算法,自动分析测试结果并进行错误分类和定位,提高自动化测试的准确性和可靠性。 综上所述,虽然AI测试是人工智能在软件测试中的一种具体应用方式,但人工智能在软件测试中的应用远不止于此,还包括测试用例生成与优化、缺陷自动发现与定位以及自动化测试等多个方面,共同推动了软件测试领域的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员二黑

V:testerhei

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值