一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种移动应用程序自动化测试方法及系统与流程

2023-02-04 18:24:52 来源:中国专利 TAG:


1.本发明涉及移动应用程序自动化测试领域,特别是涉及一种移动应用程序自动化测试方法及系统。


背景技术:

2.由于移动应用的快速增长,传统的手工测试的方法需要测试人员编写大量的测试用例,消耗大量的时间和精力。移动应用程序自动化测试渐渐进入测试人员的视野,涌现出大量的移动应用测试方法。
3.基于随机的策略,现有的工具如monkey测试,这类方法的优点是简单、快速。但又不可避免会产生大量冗余的测试序列,同时它测试的不平衡性导致已经探索过的场景与还未探索过的场景拥有同样的关注度,使得很难选择有效的路径去寻找能够在短时间内推动应用进入重要状态的交互。
4.基于模型的探索策略,测试工具构建被测应用程序的gui(graphical user interface)图形用户界面模型,然后使用该模型来探索应用程序并生成事件。比如使用动态深度优先搜索算法,构建事件流图、fsm(finite state machine)有限状态机、以及使用突变模型等方法,但建立起的模型搜索空间巨大带来了路径爆炸问题,而且适用范围不广。
5.基于目标的策略,通常使用复杂的技术,比如数据流分析和符号执行,以找到可能导致目标状态的交互。然而,他们的有效性很容易受到应用程序代码的复杂性以及将代码映射到ui控件的难度的影响。
6.目前,研究人员已开始将机器学习应用到android测试领域,李元春等人提出了humanoid,一种基于深度学习的自动化android应用程序测试方法,可从人类与应用程序的交互轨迹中学习哪些ui(user interface)用户界面元素更有可能被用户交互,从而在选择交互动作时可以选择人类最大概率选择的动作,生成类似人类的测试输入,但是提前建立的模型的适用性较差,对于新的应用程序还需要花费时间训练学习。
7.tuyet vuong等人提出基于q-learning测试方法,调整了将奖励函数设置为页面出现次数的倒数加上前后两个页面状态可交互控件数量的相对比值。minxue pan等人也运用q-learning测试方法,训练神经网络模型衡量页面之间的相似性,如果出现新页面,给一个大的奖励值,相反,给一个比较小的奖励。但是直接将页面抽象为状态存储到表格中,当测试大型的应用程序时,会带来大量的内存消耗。
8.随着应用程序的快速迭代,逻辑业务越来越复杂,比如,在购物应用中,核心业务的一般逻辑:首页-点击搜索框-输入商品名称-搜索-查看商品-立即购买-选择商品参数-确定收获地址-提交订单-付款-完成。同时在这条路径上,存在收藏、分享、进入聊天等辅助业务,收货地址有新增、编辑等辅助业务,付款有选择支付方式等辅助业务。以上逻辑业务路径较长而且每个页面控件数量大,形成了巨大的搜索空间,给测试应用程序的核心业务带来严峻挑战。


技术实现要素:

9.本发明的目的是提供一种移动应用程序自动化测试方法及系统,以解决传统的基于强化学习的移动应用程序测试方法测试大型应用程序时测试效率低的问题。
10.为实现上述目的,本发明提供了如下方案:
11.一种移动应用程序自动化测试方法,包括:
12.获取待测移动应用程序的业务交互流程图,并利用不同格式表示每个页面中表单的页面表单属性;所述页面表单属性包括输入属性、输出属性、业务流属性以及输入输出属性约束信息;所述输入属性包括输入的长度范围、字段以及正则表达式;所述输出属性包括对所述输入属性进行逻辑处理后的输出结果;所述业务流属性包括当前页面和能从当前页面跳转到的其它页面;所述输入输出属性约束信息包括输入流流向的方向以及对所述输入属性进行的逻辑处理;
13.以多条状态-动作对序列表示所述业务交互流程图,并通过行为克隆利用监督学习算法从所述状态-动作对中学习不同状态下采用不同的动作分布;
14.通过自动化测试工作获取所述待测移动应用程序当前页面的控件布局信息,对每个控件的控件布局信息进行编码,并将编码结果、所述业务交互流程图以及所述页面表单属性共同作为神经网络的输入,根据输出的策略执行当前状态下最高价值的控件对应的动作;所述控件布局信息包括控件相对位置、文本、可交互性以及类名信息;在执行过程中包括输入事件、随机事件以及系统事件;
15.若执行的是输入事件,检索页面库中所述最高价值的控件的输入规则,生成启发式文本,执行动作后,按照所述状态-动作对序列的顺序进入下一状态;所述启发式文本包括正确文本以及错误文本;
16.在所述下一状态下,根据所述业务流属性、所述输入输出属性约束信息以及页面新颖性给予奖励,并根据行为克隆结果在所述奖励中加入惩罚项;行为克隆结果为不同状态下采用不同的动作分布;
17.当探索的状态-动作对达到设定数据后,随机抽取多个所述状态-动作对更新所述神经网络,返回步骤“以多条状态-动作对序列表示所述业务交互流程图,并通过行为克隆利用监督学习算法从所述状态-动作对中学习不同状态下采用不同的动作分布”,直到达到设定测试时长,结束测试并获取整个测试过程中的异常日志文件以及代码覆盖率;
18.根据所述异常日志文件以及代码覆盖率评估所述待测移动应用程序的性能。
19.可选的,所述以多条状态-动作对序列表示所述业务交互流程图,并通过行为克隆利用监督学习算法从所述状态-动作对中学习不同状态下采用不同的动作分布,之后还包括:
20.通过adb命令以调试桥方式连接设备,对待测移动应用程序在源代码级别进行插桩,构建源代码生成apk文件并在所述设备中安装;所述设备为虚拟机或实体机。
21.可选的,所述业务属性的动作分布为:
22.其中,πe为业务属性的动作分布;e为专家expert的首字母,表示用户作为专家进行业务属性提取;a为动作;s为状态;de为人为提取的业务属性。
23.可选的,所述奖励为:
24.其中,为奖励,s
t
为当前状态;a
t
为在当前状态s
t
下执行的动作;reward(s
t
,a
t
)为总奖励;d(π
θ’(
·
|s
t
,πe(
·
|s
t
))为kl散度;πe(
·
|s
t
)为行为克隆神经网络学习到的动作概率分布;π
θ

(
·
|s
t
)为神经网络的分布;p为当前状态;|p|为当前状态涉及的业务逻辑的路径的数量;g(p)为当前页面已经测试过的逻辑路径。
25.可选的,所述总奖励为:
26.reward(s
t
,a
t
)=αreward1 βreward2 γreward3;其中,α为业务流属性校验奖励占总奖励中的比重;β为数据校验奖励占总奖励中的比重;γ为新颖性判定奖励占总奖励中的比重;reward1为页面的业务流属性校验奖励,unexplored
action
为在s
t
下执行动作a
t
后到达下一个状态中未执行的动作数量,total
action
为在s
t
下执行动作a
t
后到达下一个状态中拥有动作的总数量,s
t 1
为在s
t
下执行动作a
t
后到达的下一个状态,graph(s
t
,a
t
)表示在所述被测移动应用程序的业务流下,在s
t
下执行a
t
要到达的页面;reward2为页面的数据校验奖励,reward2为页面的数据校验奖励,expect_data为初始数据经过逻辑处理后期望得到的数据表示,raw
data
为初始数据,f(raw
data
)为经过业务逻辑处理后的数据;reward3为页面新颖性判定的奖励,)为经过业务逻辑处理后的数据;reward3为页面新颖性判定的奖励,total
simlartity
为控件位置和文本的综合相似度,frequence(s
t
,a
t
)为在s
t
下执行动作a
t
的次数。
27.一种移动应用程序自动化测试系统,包括:
28.业务交互流程图以及页面表单属性确定模块,用于获取待测移动应用程序的业务交互流程图,并利用不同格式表示每个页面中表单的页面表单属性;所述页面表单属性包括输入属性、输出属性、业务流属性以及输入输出属性约束信息;所述输入属性包括输入的长度范围、字段以及正则表达式;所述业务流属性包括当前页面和能从当前页面跳转到的其它页面;所述输出属性包括对所述输入属性进行逻辑处理后的输出结果;所述输入输出属性约束信息包括输入流流向的方向以及对所述输入属性进行的逻辑处理;
29.行为克隆模块,用于以多条状态-动作对序列表示所述业务交互流程图,并通过行为克隆利用监督学习算法从所述状态-动作对中学习不同状态下采用不同的动作分布;
30.强化学习模块,用于通过自动化测试工作获取所述待测移动应用程序当前页面的控件布局信息,对每个控件的控件布局信息进行编码,并将编码结果、所述业务交互流程图以及所述页面表单属性共同作为神经网络的输入,根据输出的策略执行当前状态下最高价值的控件对应的动作;所述控件布局信息包括控件相对位置、文本、可交互性以及类名信
息;在执行过程中包括输入事件、随机事件以及系统事件;
31.动作执行模块,用于若执行的是输入事件,检索页面库中所述最高价值的控件的输入规则,生成启发式文本,执行动作后,按照所述状态-动作对序列的顺序进入下一状态;所述启发式文本包括正确文本以及错误文本;
32.奖励模块,用于在所述下一状态下,根据所述业务流属性、所述输入输出属性约束信息以及页面新颖性给予奖励,并根据行为克隆结果在所述奖励中加入惩罚项;行为克隆结果为不同状态下采用不同的动作分布;
33.神经网络更新模块,用于当探索的状态-动作对达到设定数据后,随机抽取多个所述状态-动作对更新所述神经网络,返回步骤“以多条状态-动作对序列表示所述业务交互流程图,并通过行为克隆利用监督学习算法从所述状态-动作对中学习不同状态下采用不同的动作分布”,直到达到设定测试时长,结束测试并获取整个测试过程中的异常日志文件以及代码覆盖率;
34.性能评估模块,用于根据所述异常日志文件以及代码覆盖率评估所述待测移动应用程序的性能。
35.可选的,还包括:
36.安装模块,用于通过adb命令以调试桥方式连接设备,对待测移动应用程序在源代码级别进行插桩,构建源代码生成apk文件并在所述设备中安装;所述设备为虚拟机或实体机。
37.可选的,所述业务属性的动作分布为:
38.其中,πe为业务属性的动作分布;e为专家expert的首字母,表示用户作为专家进行业务属性提取;a为动作;s为状态;de为人为提取的业务属性。
39.可选的,所述奖励为:
40.其中,为奖励,s
t
为当前状态;a
t
为在当前状态s
t
下执行的动作;reward(s
t
,a
t
)为总奖励;d(π
θ

(
·
|s
t
),πe(
·
|s
t
))为kl散度;πe(
·
|s
t
)为行为克隆神经网络学习到的动作概率分布;π
θ

(
·
|s
t
)为神经网络的分布;p为当前状态;|p|为当前状态涉及的业务逻辑的路径的数量;g(p)为当前页面已经测试过的逻辑路径。
41.可选的,所述总奖励为:
42.reward(s
t
,a
t
)=αreward1 βreward2 γreward3;其中,α为业务流属性校验奖励占总奖励中的比重;β为数据校验奖励占总奖励中的比重;γ为新颖性判定奖励占总奖励中的比重;reward1为页面的业务流属性校验奖励,unexplored
action
为在s
t
下执行动作a
t
后到达下一个状态中未执行的动作数量,total
action
为在s
t
下执行动作a
t
后到达下一个状态中拥有动作的总数量,s
t 1
为在s
t
下执行动作a
t
后到达的下一个状态,
graph(s
t
,a
t
)表示在所述被测移动应用程序的业务流下,在s
t
下执行a
t
要到达的页面;reward2为页面的数据校验奖励,reward2为页面的数据校验奖励,expect_data为初始数据经过逻辑处理后期望得到的数据表示,raw
data
为初始数据,f(raw
data
)为经过业务逻辑处理后的数据;reward3为页面新颖性判定的奖励,)为经过业务逻辑处理后的数据;reward3为页面新颖性判定的奖励,total
simlartity
为控件位置和文本的综合相似度,frequence(s
t
,a
t
)为在s
t
下执行动作a
t
的次数。
43.根据本发明提供的具体实施例,本发明公开了以下技术效果:本发明提供了一种移动应用程序自动化测试方法及系统,引入了待测移动应用程序的业务交互流程图以及页面表单属性,引导智能体探索应用的核心业务,实现更快的测试效率;同时,为输入事件提供了正确文本和错误文本,相对以往的随机文本生成输入,保证了输入的有效性,同时也在每一个分支上实现了更充分的测试,提高了被测应用的分支覆盖率。
附图说明
44.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
45.图1为本发明所提供的移动应用程序自动化测试方法流程图;
46.图2为本发明所提供的移动应用程序自动化测试工作流程图;
47.图3为本发明所提供的行为克隆模块的示意图;
48.图4为本发明所提供的强化学习模块的示意图;
49.图5为本发明所提供的强化学习算法的神经网络架构图。
50.图6为本发明所提供的移动应用程序自动化测试总体流程图。
具体实施方式
51.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
52.本发明的目的是提供一种移动应用程序自动化测试方法及系统,能够提高测试大型应用程序时的测试效率。
53.为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
54.图1为本发明所提供的移动应用程序自动化测试方法流程图,如图1所示,一种移动应用程序自动化测试方法,包括:
55.步骤101:获取待测移动应用程序的业务交互流程图,并利用不同格式表示每个页面中表单的页面表单属性;所述页面表单属性包括输入属性、输出属性、业务流属性以及输入输出属性约束信息;所述输入属性包括输入的长度范围、字段以及正则表达式;所述输出属性包括对所述输入属性进行逻辑处理后的输出结果;所述业务流属性包括当前页面和能从当前页面跳转到的其它页面;所述输入输出属性约束信息包括输入流流向的方向以及对所述输入属性进行的逻辑处理。
56.在实际应用中,通过获取待测应用的用户手册、需求文档以及产品说明书等文档获取该应用的业务交互流程图,同时以json、xml、yaml等格式表示每个页面中表单的输入属性、输出属性、业务流属性以及输入输出属性约束信息。
57.本发明融合了输入属性、输出属性、输入输出的属性约束特征,其中,输入属性包括输入的长度范围,字段组成以及正则表达式;输出属性包括对输入属性进行逻辑处理后的输出结果;输入输出属性约束包括输入流流向的方向,对输入属性进行的逻辑处理,以保证不会发生页面数据的逻辑错误。
58.步骤102:以多条状态-动作对序列表示所述业务交互流程图,并通过行为克隆利用监督学习算法从所述状态-动作对中学习不同状态下采用不同的动作分布。
59.本发明还包括:通过adb命令以调试桥方式连接设备,对待测移动应用程序在源代码级别进行插桩,构建源代码生成apk文件并在所述设备中安装;所述设备为虚拟机或实体机。
60.所述业务属性的动作分布为:
61.其中,πe为业务属性的动作分布;e为专家expert的首字母,表示用户作为专家进行业务属性提取;a为动作;s为状态;de为人为提取的业务属性。
62.在实际应用中,将业务交互流程图以多条(s
t
,a
t
)序列表示,通过行为克隆用监督学习算法从状态-动作对中学习在特定状态下采取特定的动作的分布。
63.通过行为克隆通过模仿人类专家的动作来学习策略引导强化学习探索应用的业务逻辑。
64.通过adb命令以调试桥方式连接android虚拟机或实体机,并对被测应用在源代码级别进行插桩,然后构建源代码生成apk文件并在设备中安装。
65.步骤103:通过自动化测试工作获取所述待测移动应用程序当前页面的控件布局信息,对每个控件的控件布局信息进行编码,并将编码结果、所述业务交互流程图以及所述页面表单属性共同作为神经网络的输入,根据输出的策略执行当前状态下最高价值的控件对应的动作;所述控件布局信息包括控件相对位置、文本、可交互性以及类名信息;在执行过程中包括输入事件、随机事件以及系统事件。
66.在实际应用中,启动app进入应用首页,通过自动化测试工具获得当前页面的页面层次结构,对当前页面中的每个控件的属性进行编码,编码的结果与业务流程图以及业务属性共同构成神经网络的输入;根据神经网络的输出的策略选择最高价值对应的动作,同时给出小概率事件执行随机动作或系统事件。
67.步骤104:若执行的是输入事件,检索页面库中所述最高价值的控件的输入规则,
生成启发式文本,执行动作后,按照所述状态-动作对序列的顺序进入下一状态;所述启发式文本包括正确文本以及错误文本。
68.在实际应用中,若选择的是输入动作,根据该输入事件的业务属性,得到该输入框的输入规则,执行动作后进入下一个状态;提前获得输入事件的数据规则,以准确生成真实的输入,同时生成错误输入以测试表单验证。
69.步骤105:在所述下一状态下,根据所述业务流属性、所述输入输出属性约束信息以及页面新颖性给予奖励,并根据行为克隆结果在所述奖励中加入惩罚项;行为克隆结果为不同状态下采用不同的动作分布;其中,业务流属性为页面逻辑的正确跳转。
70.所述奖励为:
71.其中,为奖励,s
t
为当前状态;a
t
为在当前状态s
t
下执行的动作;reward(s
t
,a
t
)为总奖励;d(π
θ’(
·
|s
t
),πe(
·
|s
t
))为kl散度;πe(
·
|s
t
)为行为克隆神经网络学习到的动作概率分布;π
θ

(
·
|s
t
)为神经网络的分布;p为当前状态;|p|为当前状态涉及的业务逻辑的路径的数量;g(p)为当前页面已经测试过的逻辑路径。
72.所述总奖励为:
73.reward(s
t
,a
t
)=αreward1 βreward2 γreward3;其中,α为业务流属性校验奖励占总奖励中的比重;β为数据校验奖励占总奖励中的比重;γ为新颖性判定奖励占总奖励中的比重;reward1为页面的业务流属性校验奖励,unexplored
action
为在s
t
下执行动作a
t
后到达下一个状态中未执行的动作数量,total
action
为在s
t
下执行动作a
t
后到达下一个状态中拥有动作的总数量,s
t 1
为在s
t
下执行动作a
t
后到达的下一个状态,graph(s
t
,a
t
)表示在所述被测移动应用程序的业务流下,在s
t
下执行a
t
要到达的页面;reward2为页面的数据校验奖励,reward2为页面的数据校验奖励,expect_data为初始数据经过逻辑处理后期望得到的数据表示,raw
data
为初始数据,f(raw
data
)为经过业务逻辑处理后的数据;reward3为页面新颖性判定的奖励,)为经过业务逻辑处理后的数据;reward3为页面新颖性判定的奖励,total
simlartity
为控件位置和文本的综合相似度,frequence(s
t
,a
t
)为在s
t
下执行动作a
t
的次数。
74.在实际应用中,根据页面新颖性、业务流属性以及属性约束以一定的权重给予奖励。同时把行为克隆后的结果作为惩罚项加入奖励函数中;同时将下一状态与页面库中的页面进行对比,若发现新的页面,将其加入页面库中;融合页面的控件位置信息以及控件文本信息,确定一个状态,此外,加入页面跳转验证以及数据校验,扩大了测试缺陷和漏洞的范围。
75.步骤106:当探索的状态-动作对达到设定数据后,随机抽取多个所述状态-动作对
更新所述神经网络,返回步骤103,直到达到设定测试时长,结束测试并获取整个测试过程中的异常日志文件以及代码覆盖率。
76.当探索序列达到预定的数量后,开始对神经网络进行学习,完成对动作价值函数的更新;到达一个回合的最大步数后,然后重新启动app,进行下一轮的探索直到达到规定的测试时长。
77.步骤107:测试结束后,根据所述异常日志文件以及代码覆盖率评估所述待测移动应用程序的性能。
78.以具体移动应用程序为例,本实施例中的移动应用程序来自google play、开源中国、github开源项目。
79.图2为本发明所提供的移动应用程序自动化测试工作流程图,如图2所示,其中,m1用于在用户手册、需求说明书等文档构造被测应用的业务逻辑交互图和业务属性;m2用于将业务逻辑交互通过行为克隆,基于这些逻辑业务的数据d(s
t
,a
t
)进行监督学习算法,学习在特定状态下的特定动作的策略;m3用于在android虚拟机或实体机上自动运行被测应用的apk文件;m4用于通过自动化测试工具获取android应用当前的控件布局情况,对每个控件信息进行编码;m5用于推测出该回合要交互的控件,根据最大价值或随机或系统事件选择待执行的动作;m6用于根据该控件检索页面输入规则库,查找该控件具有的输入属性,启发式的生成输入文本后,执行动作;m7用于执行动作后进入下一个状态,根据业务流属性、输入输出属性约束、页面新颖性以及行为克隆的惩罚项给予奖励;m8用于当探索序列达到预定的数量后,采用深度强化学习算法对被执行事件的价值进行更新;m9用于重复执行上述步骤,直到达到设定的测试时长;并在测试结束后,获得捕获的异常日志文件和代码覆盖率以评估测试性能。
80.具体步骤如下:
81.步骤一,通过获取待测应用的用户手册、需求文档以及产品说明书等文档获取该应用的业务交互流程图,同时以json、xml、yaml等格式文件表示页面中输入框的表单约束。
82.步骤一中,通过用户手册、需求文档、产品说明书等文档获取该应用的业务交互流程图,将其表示为有向图,同时以json、xml、yaml等格式表示页面中表单的输入属性。例如(输入的长度范围,字段组成以及正则表达式),输出属性(对输入属性进行逻辑处理后的输出结果)以及输入输出属性约束(输入流流向的方向,对输入属性进行的逻辑处理)。
83.步骤二,将业务交互流程图以多条(s
t
,a
t
)序列表示,通过行为克隆从这些序列中学习在特定状态下采取特定的动作的分布,如图3所示。
84.步骤二中,将业务交互流程图以多条(s
t
,a
t
)序列表示,直接从专家样本中进行模仿学习,从这些序列对中学习在特定状态下采取特定的动作的分布,如公式(1)所示。
[0085][0086]
步骤三,通过adb命令以调试桥方式连接设备android虚拟机或实体机,首先对被测应用在源代码级别进行插桩,然后构建源代码生成apk文件并在设备中安装。
[0087]
步骤三中,使用自动化测试工具获取android应用当前的控件布局信息,以json、xml、yaml等格式表示。首先过滤系统事件,然后主要获取包括点击事件、点击与长点击事件、长点击事件、输入事件、选择事件(radiobox、checkbox)、滚动事件的事件属性。
[0088]
步骤四,启动app进入应用首页,获得当前页面的页面层次结构,对当前页面中的每个控件属性进行编码,包括点击、点击与长点击、长点击、输入(包含复选框、单选按钮、下拉选择)、滑动(向左、向右、向上、向下)事件,编码的结果与业务流程图以及页面属性共同构成强化学习算法的输入。
[0089]
步骤四中,将每一个控件的信息,包含控件相对位置、文本、可交互性、类名信息。
[0090]
对于相对位置,可采用归一化方法;文本采用生成句向量的方法;可交互性采取one-hot生成向量;类名信息首先进行分类,然后将其转换为one-hot形式编码;通过编码加入强化学习算法的输入中。由于每个页面的控件数各不相同,因此设置最大控件数,若页面控件数不足最大控件数,则需要补齐。
[0091]
步骤五,强化学习算法推测可执行的用户交互事件,同时有一定几率执行随机事件和系统事件,如图4与图5所示。
[0092]
步骤五中,选择当前状态下拥有最高价值的控件进行执行,同时,会有一定的概率执行随机动作和系统事件,其中系统事件包括打开关闭蓝牙,打开关闭网络,电话接入等,以便检测到更多的故障,如公式(2)所示。
[0093][0094]
步骤六,若选择是输入事件,需要检索页面库中该控件的输入规则,生成启发式文本,执行动作进入下一页面。并与页面库中的页面对比,若发现新的页面,将其加入页面库中。
[0095]
步骤六中,若选择是输入事件,需要检索页面库中该控件的输入规则,如输入长度、文本组成或特定的输入,生成启发式文本,其中随机生成正确和错误文本,以检测不同输入条件下的异常发生。
[0096]
步骤七,根据页面新颖性、业务流属性以及属性约束以一定的权重给予奖励。同时把行为克隆后的结果作为惩罚项加入奖励函数中。
[0097]
步骤七下,执行动作后,进入下一个状态,根据以下规则给予奖励。
[0098]
第一大部分的奖励来源于三个校验部分,其中两个校验部分为检测异常带来的奖励,奖励能带来异常的动作,目的在于软件测试理论中的2-8原则,即80%的缺陷和故障多发生在软件的20%的模块。在异常出现的部分给与奖励可以在异常出现的上下文发现更多异常信息,剩下一个是页面的新颖性校验部分,以鼓励智能体发现充分探索不同的页面。
[0099]
第一部分的奖励来自页面的业务流属性校验,即页面跳转后,是否跳转到符合预期的页面,如公式(3)所示。
[0100][0101]
其中,graph(s
t
,a
t
)表示在应用的业务流下,在s
t
下,执行a
t
本应到达的页面。若下一页面与graph(s
t
,a
t
)相同,则符合预期的结果,否则,将该页面中的控件探索程度作为奖励。
[0102]
第二部分的奖励来自页面的数据校验,即页面跳转后,页面中的数据经过应用的逻辑处理,是否符合预期的数据,如公式(4)所示。
[0103][0104]
其中raw
data
表示初始数据,f(raw
data
)表示经过业务逻辑处理后的数据,若expect_data与f(raw
data
)相同,则表示正确处理了业务数据。否则,给予负奖励,因为后续的逻辑业务都会走向错误的终点,不再鼓励探索。同时,转至步骤七并并终止此次计算,重新开始下一回合。
[0105]
第三部分的奖励来自于页面新颖性的判定,主要采取融合控件位置信息以及文本信息的方式。
[0106]
对于位置信息,使用交集运算进行控件匹配,首先将每个页面中的控件位置进行去重,然后将两个页面中位置相同的控件数量除以两个页面中拥有最多控件的页面中的控件数量的比值作为位置信息的相似度计算,如公式(5)所示。
[0107][0108]
对于文本信息,使用文本相似度算法进行匹配,将页面上的文本组成一串由空格分割的字符串进行基于词序方法的文本相似度计算,如公式(6)所示。
[0109]
sim
text
=simlarity(old
state
,cur
state
)
ꢀꢀꢀ
(6)
[0110]
综合以上控件位置和文本两部分信息,得出综合的相似度计算公式,如公式(7)所示。
[0111]
total
simlarity
=α*sim
location
(1-α)*sim
text
ꢀꢀꢀ
(7)
[0112]
其中α代表位置信息在页面相似度计算中控件位置的权重,1-α代表文本信息的权重,其中位置信息在相似度比较中占据主导地位。
[0113]
通过与页面库中每一个已经探索过的页面对比,若满足阈值θ,即可判定其为一个旧页面,若没有探索过,将当前页面添加到页面库以备后续的状态比较。若判定当前的页面是一个从未访问过的新页面,说明这是一次成功的探索,反之,以该动作执行的次数作为奖励,如公式(8)所示。
[0114][0115]
综合以上,第一大部分的总奖励如公式(9)所示,给三种奖励分配一定的权重,即α β γ=1,以调整三个校验部分在奖励函数中的权重。
[0116]
reward(s
t
,a
t
)=αreward1 βreward2 γreward3
ꢀꢀꢀ
(9)
[0117]
第二大部分为一个惩罚项,它将强化学习神经网络的概率分布和行为克隆方法产生的动作概率分布的差异作为惩罚,若两者相差越大,对应的惩罚项就越大,最终获得的奖励就越小。
[0118]
首先,使用kl散度来衡量两个分布之间的差异,kl散度的定义如公式(10)所示。
[0119]
[0120]
应用到该方法中,上式可变成公式(11)。
[0121]
d(π
θ’(
·
|s
t
),πe(
·
|s
t
))
ꢀꢀꢀ
(11)
[0122]
其中πe(
·
|s
t
)表示行为克隆策略学习到的动作概率分布,π
θ
(
·
|s
t
)表示神经网络的分布,若两者间的分布越大,kl散度就越大,若两者分布相同,则kl散度为0。
[0123]
综上所述,最后的奖励组成如公式(12)所示。
[0124][0125]
其中p为当前状态,|p|表示当前状态涉及多少条业务逻辑的路径,g(p)表示在当前页面已经测试过的逻辑路径。开始时,g(p)为0,为1,它作为惩罚项的权重加入到奖励函数中,表示当前页面中业务逻辑序列的探索程度,若当前所有页面所涉及的所有逻辑路径均已测试过,则在当前页面采取其它的动作便不再给予惩罚,便有机会探索其它辅助业务的功能。
[0126]
更新g(p),当或遇到页面数据校验的异常时,即当前回合中的状态序列满足了应用的某一条业务属性时,进行g(p)=g(p) 1运算。
[0127]
步骤八,当探索序列达到预定的数量后,开始从经验池中采样,对神经网络进行学习,完成对动作价值函数的更新。
[0128]
步骤八中,若经验池中收集到指定数量的交互数据,随机抽取一定量的数据用公式(13)-(15)进行神经网络更新。
[0129][0130][0131][0132]
步骤九,重复执行步骤二~步骤八,直到达到测试时长。同时在这个过程中每隔一定时间获取到代码覆盖率来得到覆盖率随时间演进的结果;测试结束后,得到被测应用程序的代码覆盖和分支覆盖信息。
[0133]
图6为本发明所提供的移动应用程序自动化测试总体流程图,如图6所示,其中,图6中的101-107与图1中步骤101-步骤107相对应,在过程中,如果程序意外退出,根据退出后的页面文字决定是否遇到异常。若出现异常退出、遇到问题、重新启动等字样,就判定其遇到了故障,将此回合的交互序列、异常信息记录在日志文件中,以便之后进行缺陷定位。
[0134]
本发明还提供了一种移动应用程序自动化测试系统,包括:
[0135]
业务交互流程图以及页面表单属性确定模块,用于获取待测移动应用程序的业务交互流程图,并利用不同格式表示每个页面中表单的页面表单属性;所述页面表单属性包括输入属性、输出属性、业务流属性以及输入输出属性约束信息;所述输入属性包括输入的长度范围、字段以及正则表达式;所述输出属性包括对所述输入属性进行逻辑处理后的输
出结果;所述业务流属性包括当前页面和能从当前页面跳转到的其它页面;所述输入输出属性约束信息包括输入流流向的方向以及对所述输入属性进行的逻辑处理。
[0136]
行为克隆模块,用于以多条状态-动作对序列表示所述业务交互流程图,并通过行为克隆利用监督学习算法从所述状态-动作对中学习不同状态下采用不同的动作分布。
[0137]
所述不同的动作分布为:
[0138]
其中,πe为业务属性的动作分布;e为专家expert的首字母,表示用户作为专家进行业务属性提取;a为动作;s为状态;de为人为提取的业务属性。
[0139]
本发明还包括:安装模块,用于通过adb命令以调试桥方式连接设备,对待测移动应用程序在源代码级别进行插桩,构建源代码生成apk文件并在所述设备中安装;所述设备为虚拟机或实体机。
[0140]
强化学习模块,用于通过自动化测试工作获取所述待测移动应用程序当前页面的控件布局信息,对每个控件的控件布局信息进行编码,并将编码结果、所述业务交互流程图以及所述页面表单属性共同作为神经网络的输入,根据输出的策略执行当前状态下最高价值的控件对应的动作;所述控件布局信息包括控件相对位置、文本、可交互性以及类名信息;在执行过程中包括输入事件、随机事件以及系统事件。
[0141]
动作执行模块,用于若执行的是输入事件,检索页面库中所述最高价值的控件的输入规则,生成启发式文本,执行动作后,按照所述状态-动作对序列的顺序进入下一状态;所述启发式文本包括正确文本以及错误文本。
[0142]
奖励模块,用于在所述下一状态下,根据所述业务流属性、所述输入输出属性约束信息以及页面新颖性给予奖励,并根据行为克隆结果在所述奖励中加入惩罚项;行为克隆结果为不同状态下采用不同的动作分布。
[0143]
所述奖励为:
[0144]
其中,为奖励,s
t
为当前状态;a
t
为在当前状态s
t
下执行的动作;reward(s
t
,a
t
)为总奖励;d(π
θ’(
·
|s
t
),πe(
·
|s
t
))为kl散度;πe(
·
|s
t
)为行为克隆神经网络学习到的动作概率分布;π
θ

(
·
|s
t
)为神经网络的分布;p为当前状态;|p|为当前状态涉及的业务逻辑的路径的数量;g(p)为当前页面已经测试过的逻辑路径。
[0145]
所述总奖励为:
[0146]
reward(s
t
,a
t
)=αreward1 βreward2 γreward3;其中,α为业务流属性校验奖励占总奖励中的比重;β为数据校验奖励占总奖励中的比重;γ为新颖性判定奖励占总奖励中的比重;reward1为页面的业务流属性校验奖励,unexplored
action
为在s
t
下执行动作a
t
后到达下一个状态中未执行的动作数量,total
action
为在s
t
下执行动作a
t
后到达下一个状态中拥有动作的总数量,s
t 1
为在s
t
下执行动作a
t
后到达的下一个状态,
graph(s
t
,a
t
)表示在所述被测移动应用程序的业务流下,在s
t
下执行a
t
要到达的页面;reward2为页面的数据校验奖励,reward2为页面的数据校验奖励,expect_data为初始数据经过逻辑处理后期望得到的数据表示,raw
data
为初始数据,f(raw
data
)为经过业务逻辑处理后的数据;reward3为页面新颖性判定的奖励,)为经过业务逻辑处理后的数据;reward3为页面新颖性判定的奖励,total
simlartity
为控件位置和文本的综合相似度,frequence(s
t
,a
t
)为在s
t
下执行动作a
t
的次数。
[0147]
神经网络更新模块,用于当探索的状态-动作对达到设定数据后,随机抽取多个所述状态-动作对更新所述神经网络,返回步骤“以多条状态-动作对序列表示所述业务交互流程图,并通过行为克隆利用监督学习算法从所述状态-动作对中学习不同状态下采用不同的动作分布”,直到达到设定测试时长,结束测试并获取整个测试过程中的异常日志文件以及代码覆盖率。
[0148]
性能评估模块,用于根据所述异常日志文件以及代码覆盖率评估所述待测移动应用程序的性能。
[0149]
本发明根据移动应用程序的软件需求文档、软件测试说明书、用户手册流程、版本迭代说明等文档构建业务交互模型图,同时获得每个状态对应的业务属性,包含输入属性、输出属性、输入与输出的属性约束;应用自动化测试工具api对当前gui进行控件提取和文字提取,对提取的控件属性进行编码,对页面的文字进行异常捕获;通过行为克隆的监督学习算法方法获得状态价值对的行为分布;基于深度强化学习算法,编码后的控件属性以及业务交互模型与业务属性共同作为状态,神经网络作为动作推断模型输出动作,结合页面表单属性,执行该动作,获得下一个状态,同时根据页面新颖性、业务流属性以及属性约束以一定的权重给予奖励,再通过行为克隆模块在奖励中加入惩罚项;若出现意外退出app或出现异常信息,数据异常等,将当前序列、采取动作及异常信息记录在日志文件中,以便进行复现和调试。
[0150]
本发明定义并引入了应用的业务逻辑信息,引导智能体探索应用的核心业务,实现更快的测试效率,同时为输入事件提供了正确和错误的输入,相对以往的随机文本生成输入,保证了输入的有效性,同时也在每一个分支上实现了更充分的测试,提高了被测应用的分支覆盖率。
[0151]
本发明定义并引入了控件位置信息的相似度结合页面文字信息的相似度来计算综合相似度的方法,该方法能高效准确地唯一界定一个页面,可忽略页面之间微小的差异。同时,融合控件的位置、可交互性、文字、类名属性丰富了模型的输入,为动作决策提供了更多依据。
[0152]
本发明定义并引入了将行为克隆的分布与当前强化学习策略网络的分布的差异作为惩罚项加入损失函数中的方法,并通过设置探索程度因子作为惩罚项的权重,使得在测试主流业务的同时,也覆盖到了应用的其它辅助业务。
[0153]
本发明定义并引入了页面业务流属性验证与数据校验,页面业务流属性验证是否跳转至预期的页面、数据校验验证应用对数据的业务逻辑处理是否合理,以上两部分的校
验,扩大了检测故障和缺陷的范围,以此检测到更多故障和缺陷。
[0154]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0155]
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献