探索人工智能在自动化测试中的应用

news2024/11/17 7:33:28

自动化测试技术从最初的模拟硬件方式,到基于数据驱动,基于关键字驱动,再到现在基于功能和指令驱动的自动化测试技术,在各类软件项目中的应用也越来越多,越来越成熟。自动

背景

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

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

项目目标:

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

初始化ORB检测器

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

提取并计算特征点

bf = cv2.BFMatcher
((cv2.NORM_HAMMING)

knn筛选结果

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

查看最大匹配点数目

good = [m for (m, n) in matches
if 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的规律,一般可以有以下几个元素构成:

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

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

4、控件对象的操作封装

安卓基础控件库

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

以下是对应的滑动代码。

5、测试结果智能分析

1、错误分类识别和处理

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

主要有程序错误,数据错误,环境错误三大类,处理逻辑请看下图:

2、业务变更自动识别

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

示意图:

3、错误报告可视化

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

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

示意图:

点击短期理财警告图标,将打开短期理财测试记录文件夹,查看提示信息

 正在做测试的朋友可以进来交流,群里给大家整理了大量学习资料和面试题项目简历等等....

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/660433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB | 如何使用MATLAB获取顶刊《Nature》全部绘图(附带近3年全部图像)

我出了如何使用MATLAB获取期刊《Cell》全部绘图&#xff0c;立马就有粉丝问《Nature》、《Sience》、《PNAS》啥的会不会安排&#xff0c;这期就给大家安排《Nature》全部绘图获取&#xff0c;之后其他期刊也会慢慢安排&#xff0c;但是不会一次性全出完(毕竟不能抓住一个主题就…

【第三次】21级计科计算机组成原理课外练习

【第三次】21级计科计算机组成原理课外练习 一、单选题二、填空题三、程序填空题 一、单选题 2-1假设变量x的位数为n&#xff08;n>8&#xff09;&#xff0c;x的最低有效字节不变&#xff0c;其余各位全变为0&#xff0c;则对应C语言表达式为。 A.x | ~ 0xFF B.x ^ 0xFF C…

css基础四:说说设备像素、css像素、设备独立像素、dpr、ppi 之间的区别?

一、背景 在css中我们通常使用px作为单位&#xff0c;在PC浏览器中css的1个像素都是对应着电脑屏幕的1个物理像素 这会造成一种错觉&#xff0c;我们会认为css中的像素就是设备的物理像素 但实际情况却并非如此&#xff0c;css中的像素只是一个抽象的单位&#xff0c;在不同…

循环码生成矩阵与监督 (校验) 矩阵

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 循环码生成多项式与…

详解七层反向代理与四层反向代理【Nginx+Tomcat负载均衡、动静分离】

文章目录 1. 反向代理和正向代理概述2.七层反向代理实例2.1 实验环境描述2.2 部署Nginx负载均衡器2.3 部署2台Tomcat应用服务器2.3.1 部署CentOS 7-5 Tomcat服务器2.3.2 部署CentOS 7-6 Tomcat多实例服务器 3.四层反向代理实例3.1 实验环境描述3.2 部署Nginx负载均衡器&#xf…

2023年护网常见面试题汇总!看过的都通过面试啦!

​时间过得很快&#xff0c;回想起去年的这个时候&#xff0c;我也正在准备秋招&#xff0c;今天的我刚刚结束培训。 我的个人情况就读于某双非大学&#xff0c;信息与计算科学&#xff08;大数据方向&#xff0c;校企合作&#xff0c;一个介于数学与计算机之间的专业&#xf…

JVM调优参数+Visual GC 插件安装及使用,jvm分析

调优的目的是什么呢&#xff1f; 1.就是让系统更加的丝滑&#xff0c;让用户体验变得更好。 2.提升系统的性能&#xff0c;提高效率&#xff0c;充分利用jvm内存。 更多参考->JVM常用调优参数 一.JVM参数配置位置 1.java.lang.OutOfMemoryError: Java heap space 解决方…

微信小程序开发之获取用户头像昵称

本文是对另一篇文档 https://blog.csdn.net/duke_ding2/article/details/130674320 的补充。 环境 微信开发者工具 Stable 1.06.2306020调试基础库 2.32.2 背景 在较低版本&#xff08;2.27.0及以下&#xff09;的基础库中&#xff0c;在小程序里可以使用 wx.getUserProfil…

PostgreSQL BTree(B-Link-tree) 索引 基本 实现原理

文章目录 背景BTreeBTreeB-Link-Tree 基本数据结构的插入实现BTree Insert 实现BTree Insert 实现 PostgreSQL BTree实现整体结构BTree 索引创建实现_bt_buildadd_bt_uppershutdown BTree 查询 _bt_search 实现BTree 插入 _bt_doinsert 实现_bt_split 节点分裂_bt_insert_paren…

flyway在Windows下安装及基本使用

文章目录 1. flyway中的SQL脚本命名2. flyway执行SQL脚本演示3. flyway中设置 ${CURRENT_DATE} 为当前时间的值 Flyway是一个开源的数据库迁移工具&#xff0c;用于管理和自动化数据库架构的演进。它允许开发人员和团队对数据库进行版本控制&#xff0c;并通过简单的命令行或脚…

【数据库与身份认证】课程笔记

目标&#xff1a; 知道如何配置MySQL数据库环境认识并使用常见的SQL语句操作数据库在Express中操作MySQL数据库了解Session的实现原理了解JWT的实现原理 目录&#xff1a; 数据库的基本概念安装并配置MySQLMySQL的基本使用在Express中操作MySQL前后端的身份认证 一. 数据库的…

美团一面:OOM后,JVM一定会退出吗?为什么?

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如美团、拼多多、极兔、有赞、希音的面试资格&#xff0c;遇到一几个很重要的面试题&#xff1a; OOM后&#xff0c;JVM一定会退出吗&#xff1f;为什么&#xff1f; 生产环境&am…

MIT 6.S081 (BOOK-RISCV-REV1)教材第四章内容 -- 上

MIT 6.S081 教材第四章内容 -- 上 引言陷阱指令和系统调用RISC-V陷入机制代码&#xff1a;调用系统调用从用户空间陷入系统调用参数补充 引言 MIT 6.S081 2020 操作系统 本文为MIT 6.S081课程第四章教材内容翻译加整理。 本课程前置知识主要涉及: C语言(建议阅读C程序语言设计…

Django基础入门⑤:模板变量和标签的使用

Django基础入门④&#xff1a;数据表显示和Django模板详讲 模板变量使用模板变量模板标签if标签for标签forloop变量forloop.revcounter 示例forloop.first 和 forloop.last 示例forloop.parentloop 示例 &#x1f3d8;️&#x1f3d8;️个人简介&#xff1a;以山河作礼。 &…

Liunx开发工具:git和gdb

目录 一. git的功能和使用 1.1 git的功能 1.2 git三板斧 1.3 git使用中的其他问题 二. 使用gdb调试代码 2.1 生成带有调试信息的可执行程序 2.2 gdb调试代码的方法 一. git的功能和使用 1.1 git的功能 git是一块开源、免费的版本管理系统&#xff0c;能够高效敏捷地处…

【人工智能】— 神经网络、前向传播、反向传播、梯度下降、局部最小值、多层前馈网络、缓解过拟合的策略

【人工智能】— 神经网络、前向传播、反向传播 前向传播反向传播梯度下降局部最小值多层前馈网络表示能力多层前馈网络局限缓解过拟合的策略 前向传播和反向传播都是神经网络训练中常用的重要算法。 前向传播是指将输入数据从输入层开始经过一系列的权重矩阵和激活函数的计算后…

计算机网络408大题(2009-2019)

必备结构 TCP报文段结构 IP数据报结构 2009年 考察点&#xff1a;子网划分、路由表、路由聚合 2010年 考察点&#xff1a;CSMA/CD协议的相关计算 2011年 考察点&#xff1a;以太网帧格式、IP分组格式、IP地址和MAC地址、ARP协议、HTTP/1.1持续的非流水方式 在转发过程中&am…

Jupyter中使用Pyecharts绘制地图

背景&#xff1a;根据各省频率绘制地图 根据各省频率绘制地图&#xff0c;可以使用 Pyecharts 绘制。下面是详细的步骤&#xff1a; 1、安装 Pyecharts&#xff1a;可以通过 !pip install pyecharts 命令安装。 2、导入相关库 import pandas as pd from pyecharts import o…

设计模式之抽象工厂模式笔记

设计模式之抽象工厂模式笔记 说明Abstract Factory(抽象工厂)目录UML抽象工厂示例类图甜品抽象类甜品提拉米苏类甜品抹茶慕斯类 咖啡抽象类美式咖啡类拿铁咖啡类 甜品工厂接口美式风味的甜品工厂意大利风味的甜品工厂 测试类模式扩展 说明 记录下学习设计模式-抽象工厂模式的写…

SSMP整合案例(2) Spring Boot整合Lombok简化实体类开发

好啊 接着我们上文SSMP整合案例(1) 构建 Spring Boot Vue MySql项目环境 我们继续 接下来 我们要在java项目中 建立出数据库表对应的实体类 我们还是先看看自己上文中 创建的这个 book表 其中四个字段 主键id 数字枚举类型的type 字符串类型name 字符串类型 description 我们…