发明内容
本发明实施例的目的在于提供一种基于机器学习的自动化应用程序界面测试方法和测试系统,以解决现有技术应用程序界面测试消耗人力、物力且无法模拟使用者操作步骤,测试效率低等问题。
本发明实施例是一种基于机器学习的自动化应用程序界面测试方法,所述测试方法,包括:
当判断已获取的待测试应用程序的UI界面为初次出现时,将所述UI界面转换为图片;
将得到的图片输入到预设UI界面分类器,以获取所述UI界面的类别,其中,所述UI界面分类器为基于生成对抗神经网络GAN与卷积神经网络CNN的UI界面分类器;
根据所述UI界面的类别从预设的测试大纲脚本库中获取对应的测试大纲脚本;
将所述测试大纲脚本与所述UI界面的布局进行适配,获取所述UI界面对应的测试脚本;
通过所述测试脚本对所述UI界面进行测试。
本发明实施例的另一目的在于提供一种基于机器学习的自动化应用程序界面测试系统,所述测试系统,包括判断单元、UI界面类别获取单元、测试大纲脚本获取单元、测试脚本获取单元及测试单元,其中:
所述判断单元,用于判断已获取的待测试应用程序的UI界面为初次出现时,将所述UI界面转换为图片;
所述UI界面类别获取单元,用于将得到的图片输入到预设UI界面分类器,以获取所述UI界面的类别,其中,所述UI界面分类器为基于生成对抗神经网络GAN与卷积神经网络CNN的UI界面分类器;
所述测试大纲脚本获取单元,用于根据所述UI界面的类别从预设的测试大纲脚本库中获取对应的测试大纲脚本;
所述测试脚本获取单元,将所述测试大纲脚本与所述UI界面的布局进行适配,获取所述UI界面对应的测试脚本;
所述测试单元,用于通过所述测试脚本对所述UI界面进行测试。
本发明相比于现有技术的有益效果在于:本发明可以在拥有少量已标记类别的UI界面图片的情况下,先使用GAN算法产生大量的已标记类别的UI界面图片,有效降低图片标记成本,再透过CNN算法获取UI界面分类器,其分类结果能与一般使用者的分类结果相似,而根据分类结果后的自动测试步骤,能贴近使用者操作流程。有效降低图片标记成本,并且极大提升了测试场景有效性及测试的效率。其后,将测试大纲脚本与UI界面的布局进行适配,获取对应的测试脚本,通过测试脚本对UI界面进行测试,使得应用程序界面的测试可以自动获取对应的测试脚本,节省了人工测试的人工成本,也节省了为每个应用程序分别撰写测试脚本的财务成本。
实施例一
如图1所示为本发明一示例性实施例示出的一种基于机器学习的自动化应用程序界面测试方法的流程图,所述测试方法包括以下步骤:
步骤S101,当判断已获取的待测试应用程序的UI界面为初次出现时,将所述UI界面转换为图片。
在本发明实施例中,应用程序界面通常用UI界面进行表达,测试时可以通过预设的自动扫描工具对待测试应用程序进行扫描。优选的,该自动扫描工具为通过Python制做的自动扫描工具,比如在开源测试工具Appium上使用Python撰写测试逻辑,以测试Andorid、IOS的应用程序。可以理解的,待测试应用程序包括但不限于:移动端应用程序、非移动端应用程序,移动端应用程序包括但不限于:Android应用程序、IOS应用程序。
判断所述UI界面是否为初次出现可以采用多种办法,可以通过计算UI界面的唯一识别值来判断。具体的,测试工具通过计算获取UI界面的唯一识别值,将该唯一识别值放入预设的识别值库中进行检索,如果识别值库中不包含该唯一识别值,则表示该类UI界面未被处理过,没有对应的测试脚本,可以按照本发明对其进行处理。计算UI界面唯一识别值的方法包括:挑选UI界面内预设的UI控件的特征(如UI界面的前20个UI控件的特征)计算MD5值。所述特征包含位置、类型、内容等。
需要将UI界面转换为图片是为了应用于UI界面分类器,后文将详细说明。
步骤S102,将得到的图片输入到预设UI界面分类器,以获取所述UI界面的类别,其中,所述UI界面分类器为基于生成对抗神经网络GAN与卷积神经网络CNN的UI界面分类器。
对抗神经网络GAN(Generative Adversarial Networks)为一主要应用于图像的深度学习框架,经由同一类型的图像数据作为训练输入,GAN可以生成具有相同类型特征的图像。GAN内部包含生成器和鉴别器。生成器使用原始样本与随机噪声生成对抗样本;鉴别器需判断输入样本,是原始样本还是对抗样本。训练过程中,生成器与鉴别器不断相互迭代,直到鉴别器无法识别原始样本与对抗样本之间的区别,则终止迭代,并输出生成器。CNN训练所获得的UI界面分类器,其高精度需要依靠大量、多样化和准确地标记的训练集,但其成本很高。故使用GAN来生成大量的已标记类别样本,可以有效降低标记成本,且提高的UI界面分类器的准确度。CNN(Convolutional Neural Network,卷积神经网络)为一主要应用于图像和视频的深度学习框架,CNN训练的模型对缩放、平移、旋转等畸形具有不变性,有着很强的泛化性。CNN最大的特点在于卷积的权值共享结构,可以大幅减少神经网络的参数量,在防止过拟合的同时又降低了神经网络模型的复杂度。由于CNN对图片的分类比较精确,因此需要将应用程序的UI界面转换为图片格式,输入到预设UI界面分类器,以获取所述UI界面的类别。
可以通过下述方法得到UI界面分类器:
(1)获取预设数量的应用程序的UI界面,为各UI界面计算唯一识别值,并将各UI界面转换为UI界面图片。
(2)将所有已搜集的UI界面图片进行类别标记,组成原始数据集。譬如将百度搜索的首页UI标记为搜索类;招商银行主页UI标记为金融类。
(3)将原始数据集作为TensorFlow的GAN算法的输入,代码实现基于DCGAN(DeepConvolutional Generative Adversarial Networks)的结构。根据TensorFlow的GAN算法输出,可以获得GAN生成器,并生成一定数量的已标记类别的UI界面图片,与原始数据集合并后组成训练集。
(4)将训练集作为TensorFlow的CNN算法的输入,参数设定以ReLU为激活函数,设定横竖两个方向以2为stride,并设定SAME为Padding的处理方式,根据TensorFlow的CNN算法输出,可以获得Activity组件的分类器。
应用程序在设计时,一般会考虑UI(User Interface,使用者界面)及UX(UserExperience,使用者经验)设计,如何让一般使用者觉得好用、易用是考虑的重点;应用程序开发商也会不断收集使用者的操作反馈进行UI/UX改良,让使用者快速、甚至零学习成本的情况下,愉快的使用应用程序。不同类别的应用程序,最佳的UI/UX也会不同,譬如搜寻类别与购物类别的页面,肯定是截然不同得布局,但一般使用者分别看到两者的页面时,并不会因为布局不同而觉得难以上手,因为搜寻类别的操作顺序大致为找到搜寻内容输入框,接著点击搜寻按钮;而购物类别的页面,则是透过点选物品分类页签,来进行购物。在本发明中,使用GAN与CNN以透过学习大量的UI界面的分类结果,得到一个UI界面分类器;在测试阶段,透过UI界面分类器对未知UI界面进行分类,并对不同类别的UI界面进行不同的顺序操作。通过上述方法获取的分类结果与一般使用者的分类结果相似,能让自动遍历系统做出符合人类顺序的操作。因此,整个测试过程中无须人工介入,操作方便,并且极大提升了测试场景有效性及测试的效率。
步骤S103,根据所述类别从预设的测试大纲脚本库中获取对应的测试大纲脚本。
在本发明实施例中,测试大纲脚本是每一类UI界面基本的遍历顺序,测试大纲脚本根据人类操作应用程序的顺序进行撰写,如:搜索类UI界面,首先搜寻到内容输入框,然后输入关键字,最后找到搜寻按钮并点击,完成搜索的顺序操作。
UI界面分类器是通过训练大量(数万或数十万)应用程序的UI界面获取的,因此UI界面分类器可以识别出多种不同类别的UI界面。将识别出的UI界面类别放入测试大纲脚本库中进行检索,获取对应的测试大纲脚本。
步骤S104,将所述测试大纲脚本与所述UI界面的布局进行适配,获取所述UI界面对应的测试脚本。
在本发明实施例中,测试大纲脚本只是UI界面最基本的遍历顺序,并不能对UI界面进行精细的测试,因此需要将测试大纲脚本与对应的UI界面的UI布局进行适配,通过适配获取对应的测试脚本。所述适配包括但不限于:UI控件顺序适配、UI控件操作细节适配。
UI界面中可能包含多个不同的UI控件,这多个UI控件的作用不同,运行的顺序也不同,因此UI控件顺序适配可以确定这多个不同的UI控件的运行顺序,UI控件操作细节适配可以确定每个UI控件的作用,如:按钮类UI控件和文本输入框类UI控件,UI控件顺序适配确定文本输入框类UI控件首先运行、按钮类UI控件其次运行,UI控件操作细节适配确定按钮类UI控件的作用是点击、文本输入框类UI控件的作用是接收输入的内容。
作为本发明的一个可选实施例,在所述将所述测试大纲脚本与所述UI界面的UI布局进行适配,获取所述UI界面对应的测试脚本的步骤之后,所述测试方法还包括:
将所述唯一识别值与所述测试脚本进行关联。
在本发明实施例中,一个应用程序中通常包含多个UI界面,而在一次测试中,通常需要测试多个应用程序,为了在多个应用程序中准确的找到对应的测试脚本,可以将唯一识别值与测试脚本进行关联。由于在之前的步骤中UI界面与唯一识别值进行了关联,因此UI界面可以在大量的测试脚本中快速、准确的找到对应的测试脚本进行测试。
步骤S105,通过所述测试脚本对所述UI界面进行测试。
在本发明实施例中,在获取了对应的测试脚本之后,即可通过该测试脚本对UI界面进行测试,重复上述步骤S101~S105即可对所有UI界面进行测试。
本发明实施例,获取待测试应用程序的UI界面,如果所述UI界面为初次出现,先使用GAN算法产生大量的已标记类别的UI界面图片,有效降低图片标记成本,再透过CNN算法获取UI界面分类器,然后由UI界面分类器获取其类别和测试大纲脚本,其分类结果能与一般使用者的分类结果相似,自动测试步骤贴近使用者操作流程,并且极大提升了测试场景有效性及测试的效率。其后,将测试大纲脚本与UI界面的布局进行适配,获取对应的测试脚本,通过测试脚本对UI界面进行测试,使得应用程序界面的测试可以自动获取对应的测试脚本,节省了人工测试的人工成本,也节省了为每个应用程序分别撰写测试脚本的财务成本。
以待测试应用程序为Android应用程序为例对发明做进一步说明:
(1)使用Python制做的自动扫描工具,开始遍历应用程序,首先解析AndroidManifest.xml,取得其Package name与MainActivity,作为自动遍历的入口。计算UI界面的Activity组件的MD5值为唯一识别值,若该MD5值为第一次出现,则透过Appium进行屏幕截屏并存储为图片格式。
(2)将图片格式传入UI界面分类器,可以得到该Activity组件的类别。
(3)根据Activity组件的类别,取得对应的测试大纲脚本。
(4)开始执行测试大纲脚本的适配流程,该流程包含将当前Activity组件中的UI布局与测试大纲脚本进行适配,生成适配于当前Activity组件的测试脚本,包括UI控件遍历顺序与UI控件操作细节。将适配后的测试脚本根据Activity组件的识别值储存,并依循UI控件遍历顺序逐一取出后,参考UI控件操作细节进行操作。
(5)进行自动化遍历。若遍历的过程发生Activity组件转跳,则计算Activity组件识别值,若为新的识别值,则再次进行步骤(3),若为已存在的识别值,则根据上次已遍历的顺序,接著继续遍历。
(6)重复上述自动化遍历操作,直到所有从Activity组件中获取到的UI控件进行操作完毕,或者满足遍历结束条件。
如图2所示为本发明一示例性实施例示出的一种基于机器学习的自动化应用程序界面测试系统的结构图,所述测试系统包括判断单元10、UI界面类别获取单元20、测试大纲脚本获取单元30、测试脚本获取单元40及测试单元50,其中:
判断单元10,用于当判断已获取的待测试应用程序的UI界面为初次出现时,将所述UI界面转换为图片。
测试时可以通过预设的自动扫描工具对待测试应用程序进行扫描。优选的,该自动扫描工具为通过Python制做的自动扫描工具,比如在开源测试工具Appium上使用Python撰写测试逻辑,以测试Andorid、IOS的应用程序。可以理解的,待测试应用程序包括但不限于:移动端应用程序、非移动端应用程序,移动端应用程序包括但不限于:Android应用程序、IOS应用程序。
判断所述UI界面是否为初次出现可以采用多种办法,可以通过计算UI界面的唯一识别值来判断。具体的,测试工具通过计算获取UI界面的唯一识别值,将该唯一识别值放入预设的识别值库中进行检索,如果识别值库中不包含该唯一识别值,则表示该类UI界面未被处理过,没有对应的测试脚本,可以按照本发明对其进行处理。计算UI界面唯一识别值的方法包括:挑选UI界面内预设的UI控件的特征(如UI界面前20个UI控件的特征)计算MD5值。所述特征包含位置、类型、内容等。
当判断已获取的待测试应用程序的UI界面为初次出现时,将所述UI界面转换为图片,输入到UI界面类别获取单元20。
UI界面类别获取单元20,用于将得到的图片输入到预设UI界面分类器,以获取所述UI界面的类别,其中,所述UI界面分类器为基于生成对抗神经网络GAN与卷积神经网络CNN的UI界面分类器。
在本发明中,使用GAN与CNN以透过学习大量的UI界面的分类结果,得到一个UI界面分类器;在测试阶段,透过UI界面分类器对未知UI界面进行分类,并对不同类别的UI界面进行不同的顺序操作。通过上述方法获取的分类结果与一般使用者的分类结果相似,能让自动遍历系统做出符合人类顺序的操作。因此,整个测试过程中无须人工介入,操作方便,并且极大提升了测试场景有效性及测试的效率。
得到UI界面分类器的方法包括:
(1)获取预设数量的应用程序的UI界面,为各UI界面计算唯一识别值,并将各UI界面转换为UI界面图片。
(2)将所有已搜集的UI界面图片进行类别标记,组成原始数据集。譬如将百度搜索的首页UI标记为搜索类;招商银行主页UI标记为金融类。
(3)将原始数据集作为TensorFlow的GAN算法的输入,代码实现基于DCGAN的结构。根据TensorFlow的GAN算法输出,可以获得GAN生成器,并生成一定数量的已标记类别的UI界面图片,与原始数据集合并后组成训练集。
(4)将训练集作为TensorFlow的CNN算法的输入,参数设定以ReLU为激活函数,设定横竖两个方向以2为stride,并设定SAME为Padding的处理方式,根据TensorFlow的CNN算法输出,可以获得Activity组件的分类器。
测试大纲脚本获取单元30,用于根据所述UI界面的类别从预设的测试大纲脚本库中获取对应的测试大纲脚本。
在本发明实施例中,测试大纲脚本是每一类UI界面基本的遍历顺序,测试大纲脚本根据人类操作应用程序的顺序进行撰写,如:搜索类UI界面,首先搜寻到内容输入框,然后输入关键字,最后找到搜寻按钮并点击,完成搜索的顺序操作。
UI界面分类器是通过训练大量(数万或数十万)应用程序的UI界面获取的,因此UI界面分类器可以识别出多种不同类别的UI界面。将识别出的UI界面类别放入测试大纲脚本库中进行检索,获取对应的测试大纲脚本。
测试脚本获取单元40,将所述测试大纲脚本与所述UI界面的布局进行适配,获取所述UI界面对应的测试脚本。
在本发明实施例中,测试大纲脚本只是UI界面最基本的遍历顺序,并不能对UI界面进行精细的测试,因此需要将测试大纲脚本与对应的UI界面的UI布局进行适配,通过适配获取对应的测试脚本。所述适配包括但不限于:UI控件顺序适配、UI控件操作细节适配。
UI界面中可能包含多个不同的UI控件,这多个UI控件的作用不同,运行的顺序也不同,因此UI控件顺序适配可以确定这多个不同的UI控件的运行顺序,UI控件操作细节适配可以确定每个UI控件的作用,如:按钮类UI控件和文本输入框类UI控件,UI控件顺序适配确定文本输入框类UI控件首先运行、按钮类UI控件其次运行,UI控件操作细节适配确定按钮类UI控件的作用是点击、文本输入框类UI控件的作用是接收输入的内容。
作为本发明的一个可选实施例,测试脚本获取单元40还用于在将所述测试大纲脚本与所述UI界面的布局进行适配,获取所述UI界面对应的测试脚本的步骤之后,将所述唯一识别值与所述测试脚本进行关联。一个应用程序中通常包含多个UI界面,而在一次测试中,通常需要测试多个应用程序,为了在多个应用程序中准确的找到对应的测试脚本,可以将唯一识别值与测试脚本进行关联。由于之前的步骤中UI界面与唯一识别值进行了关联,因此UI界面可以在大量的测试脚本中快速、准确的找到对应的测试脚本进行测试。
测试单元50,用于通过所述测试脚本对所述UI界面进行测试。
本发明实施例,应用程序界面的测试系统获取待测试应用程序的UI界面,如果所述UI界面为初次出现,先使用GAN算法产生大量的已标记类别的UI界面图片,有效降低图片标记成本,再透过CNN算法获取UI界面分类器,然后由UI界面分类器获取其类别和测试大纲脚本,其分类结果能与一般使用者的分类结果相似,自动测试步骤贴近使用者操作流程,并且极大提升了测试场景有效性及测试的效率。该测试系统还能将测试大纲脚本与UI界面的布局进行适配,获取对应的测试脚本,通过测试脚本对UI界面进行测试,使得应用程序界面的测试可以自动获取对应的测试脚本,节省了人工测试的人工成本,也节省了为每个应用程序分别撰写测试脚本的财务成本。
本领域普通技术人员可以理解为上述实施例所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
本领域普通技术人员还可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以在存储于一计算机可读取存储介质中,所述的存储介质,包括:ROM/RAM、磁盘、光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。