CN107193734B - 用于移动Web应用的重放方法及重放系统 - Google Patents
用于移动Web应用的重放方法及重放系统 Download PDFInfo
- Publication number
- CN107193734B CN107193734B CN201710346413.9A CN201710346413A CN107193734B CN 107193734 B CN107193734 B CN 107193734B CN 201710346413 A CN201710346413 A CN 201710346413A CN 107193734 B CN107193734 B CN 107193734B
- Authority
- CN
- China
- Prior art keywords
- uncertainty
- recording
- log
- source
- playback
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Abstract
本发明公开了用于移动Web应用的重放方法,包括:记录阶段:全面记录影响程序状态的不确定性源,并记录于日志;重放阶段:按照日志重放不确定性源,确保程序执行状态与记录时一致,并保证时间精度。同时提供了一种用于移动Web应用的重放系统。本发明全面地记录影响程序运行状态的不确定性源,并能高精度地确定性重放记录的不确定性源,保证重放阶段的程序状态与记录阶段相同。利用本发明,移动应用开发者能实现记录用户行为、重现应用状态等功能,方便地实施用户行为分析、回归测试等,提高测试效率并降低维护成本。
Description
技术领域
本发明属于移动应用开发、测试和维护领域。具体来说,本发明提供了一种高精度确定性的用于移动Web应用的重放方法及重放系统。
背景技术
伴随智能手机的飞速发展和用户需求的不断增加,为了使移动应用获得更好的兼容性和在线更新能力,移动开发者逐渐趋向于在移动应用中采用Web技术。使用了Web技术的移动应用包括网络应用(Mobile Web App)和混合应用(Hybrid Mobile App),统称移动Web应用。移动Web应用基于移动操作系统提供的Web组件(例如安卓(Android)提供WebView,苹果(iOS)提供UIWebView/WKWebView)。
移动Web应用开发、测试和维护阶段,面临以下问题:
1、测试过程中需要大量重复相同操作,以确认程序的正确性和可靠性。
2、需对不同设备进行相同操作,以测试程序兼容性。
3、某次异常发生后,需重复产生导致异常的一系列操作,用于调试异常的产生原因。
4、统计用户操作习惯和操作方式,以产生有效的测试样例或改进交互界面。
发明内容
针对现有技术中存在的上述问题,本发明的目的是提供一种用于移动Web应用的重放方法及重放系统,利用本发明的方法和系统,移动应用开发者能实现记录用户操作、记录系统和网络不确定性源、重放应用状态、重现应用异常和错误等功能;进一步的,利用上述功能,开发者能轻易实现用户行为分析、测试样例自动化生成、应用自动化测试、功能测试、健壮性测试、回归测试,提高移动应用测试效率并降低维护成本。
本发明是通过以下技术方案实现的。
根据本发明的一个方面,提供了一种用于移动Web应用的重放方法,包括如下步骤:
-记录阶段:全面记录影响程序状态的不确定性源,并记录于日志;
-重放阶段:按照日志重放不确定性源,确保程序执行状态与记录时一致,并保证时间精度。
优选地,所述不确定性源包括如下任一项或任多项:
不确定性源1:网络通信;
不确定性源2:用户输入;
不确定性源3:程序回调函数;
不确定性源4:具有不确定返回值的函数调用。
优选地,其特征在于,
在不确定性源1中,所述网络通信为应用程序与外部之间的网络通信,包括同步网络请求和异步网络请求,所述外部为服务器或文件系统;
在不确定性源2中,用户输入为HTML文档对象模型事件,一个文档对象模型事件引发该事件的事件监听器,其中,文档对象模型事件包括:由用户操作产生的事件和Web接口产生的事件;
在不确定性源3中,应用程序执行其回调函数,包括注册到定时器的回调函数以及注册用于处理异步行为的回调函数;
在不确定性源4中,不确定返回值的函数调用,包括:时间查询函数和/或随机数产生函数。
优选地,在记录阶段,针对不同的不确定性源,记录方法分别为:
记录方法1:对于不确定性源1,通过架设网络代理,拦截并使网络流量全部通过该网络代理,并在该网络代理中记录网络请求、网络回复以及网络延迟;所述网络代理位于应用内部或存在于应用外部;
记录方法2:对于不确定性源2,给HTML标准定义的每种文档对象模型事件注册一个新增的事件监听器,该事件监听器在对应事件发生时被调用,并记录这个事件的类型和详细属性;其中,事件的类型包括但不限于:鼠标事件(包括click、dblclick、select、mouseup、mousedown、mouseover、mouseover、mouseenter、mouseleave等)、键盘事件(包括keydown、keyup、keypress)触摸事件(包括touchstart、touchend、touchmove、touchenter、touchleave、touchconcel等)、资源事件(包括cached、error、abort、load、beforeunload、unload等)、表单事件(包括reset、submit等)、视图事件(包括resize、scroll等)、焦点事件(包括focus、blur、focusin、focusout)、进度事件(包括loadstart、load、loadend、abort、timeout、error、abort、progress)、拖动事件(包括drag、drop、dragstart、dragend等),事件的详细属性包括:target、relatedTarget、type、view、detail、bubbles、cancelable、scoped、composed、screenx、screeny、clientx、clienty、button、buttons、ctrlKey、shiftKey、altKey、metaKey及某些类型的特有属性:键盘事件属性包括key、code、location、charCode、keyCode、which等;触摸事件属性包括touches、targetTouches、changedTouches等;进度事件属性包括:lengthComputable、loaded、total等;拖动事件属性包括:dataTransfer。
记录方法3:对于不确定性源3,通过修改注册的回调函数,使这个回调函数在执行原始代码之前会首先记录这次回调函数的调用;所述修改发生在回调函数被首次调用之前,通过包装和覆盖回调函数的注册函数,在注册时修改回调函数,或在回调函数注册后至被调用前的某个必经阶段修改回调函数;
记录方法4:对于不确定性源4,通过包装和覆盖不确定性函数,实现记录函数调用及其返回值。
优选地,在重放阶段,针对不同的不确定性源,重放方法分别为:
重放方法1:对于不确定性源1,记录方法1中所述网络代理对比记录阶段的网络请求和重放阶段的网络请求,然后根据日志,在相同的网络延迟后返回相同的网络回复,用来模拟与记录相同的网络;
重放方法2:对于不确定性源2,根据日志中的事件类型和属性,对于由用户交互产生的文档对象模型事件,构建相同的文档对象模型事件,并将此事件分发给相同的文档对象,用来模拟记录阶段的事件的发生;为保证重放产生的事件产生相同的影响,通过包装和模拟修复不一致情况;对于接口产生的文档对象模型事件,因为这些事件由其他不确定性源引发,所以只需观测到这些事件的产生并保证满足程序执行状态与记录阶段一致即可;
重放方法3:对于不确定性源3,回调函数不会真正被注册,根据日志在合适时刻直接调用相应的回调函数;对于有因果关系的回调函数调用,替代的注册一个新的回调函数,当替代的回调函数被调用后,日志记录的回调函数将被正确的重放;
重放方法4:对于不确定性源4,通过包装和覆盖不确定性函数,实现根据日志返回对应的记录阶段的返回值。
优选地,所述日志包括:日志的元数据和多个不确定性源日志条目;其中:
日志的元数据为记录产生时的全局信息,包括日志产生的设备信息、应用信息、地理信息;
每个日志条目代表一种不确定性源的一次发生;日志条目均由记录方法产生;日志条目包括不确定性源属性、类型和发生的时间。
优选地,重放阶段,通过为不确定性源的重放增加因果关系的限定和检测,确保程序执行状态与记录时一致;所述程序执行状态包括:不确定性源重放的先后顺序和不确定性源重放的因果逻辑关系、不确定性源对应用造成改变和影响。
优选地,重放阶段,为保证时间精度,采用以下重放时间策略:
记日志为{e0,e1,...,en},对应的记录时间戳为{T0,T1,...,Tn};重放时,依次重放不确定性源e0,e1,...,en,对应的重放时间戳为{t0,t1,...,tn};
当事件k-1重放完成后,此时的时间为tnow,将于interval时间后重放不确定性源k,其中:
interval=(Tk-T0)-(tnow-t0);
根据interval的值,采取时间精确的策略以重放不确定性源k:
根据本发明的第二个方面,提供了一种用于移动Web应用的重放系统,包括如下组件:
-组件1:中心管理组件,用于管理组件2~组件5;
-组件2:日志导入和导出组件,用于通过文件系统或网络,将日志从外部导入至组件1或将日志从组件1导出至外部;
-组件3:网络相关不确定性源的记录和重放组件,用于实现记录方法1和重放方法1,用来记录和重放不确定性源1;
-组件4:控制流相关不确定性源的记录和重放组件,用于实现记录方法2、记录方法3、重放方法2和重放方法3,用来记录和重放不确定性源2和不确定性源3;
-组件5:不确定性函数相关不确定源的记录和重放组件,用于实现记录方法4和重放方法4,用来记录和重放不确定性源4。
优选地,
在组件1中,记录阶段接收来自组件3~组件5的日志条目,并按时间戳汇总成完整日志;重放阶段根据时间精确的策略,利用组件3~组件5重放日志中的不确定性源;所述组件1利用组件2将日志持久化储存;
在组件2中,日志以JavaScript对象表示法格式导入、导出和存储,网络资源文件以原文件格式和编码导入、导出和存储;
在组件3中,记录阶段将记录不确定性源1,并将日志条目发送给组件1;重放阶段将接收组件1发送来的日志条目,并重放该日志条目记录的不确定性源1;
在组件4中,记录阶段将记录不确定性源2和不确定性源3,并将日志条目发送给组件1;重放阶段将接收组件1发送来的日志条目,并重放该日志条目记录的不确定性源2或不确定性源3;
在组件5中,记录阶段将记录不确定性源4,并将日志条目发送给组件1;重放阶段接收组件1发送来的日志条目,并重放该日志条目记录的不确定性源4。
与现有技术相比,本发明具有如下有益效果:
1、本发明不改变操作系统(包括系统框架、系统软件等),不需要额外特权(例如root权限)。
2、在记录阶段可以全面记录影响程序状态的不确定性源于日志。
3、在重放阶段,按照日志高精度重放不确定性源,确保程序执行状态与录制时一样,并且保证高时间精度。
4、存储、传输、更新、可视化日志文件。
5、可以跨设备重放,即可以将一个设备上记录产生的日志,到另一个设备进行重放。
6、重放的不确定性源对应用产生的影响,与此不确定性源在记录阶段产生的影响相同。
7、不确定性源重放的先后顺序与记录阶段相同。
8、不确定性源重放的因果逻辑关系与记录阶段相同。
9、不确定性源重放的时间与记录阶段相同或十分相近。
10、本发明全面地记录影响程序运行状态的不确定性源,并能高精度地确定性重放记录的不确定性源,保证重放阶段的程序状态与记录阶段相同;利用本发明,移动应用开发者能实现记录用户行为、重现应用状态等功能,方便地实施用户行为分析、回归测试等,提高测试效率并降低维护成本。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明重放系统在混合应用中的架构。
图2为本发明重放系统的工作结构和数据流。
具体实施方式
下面对本发明的实施例作详细说明:本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。
实施例1
本实施例提供了一种用于移动Web应用的高精度确定性的重放方法,包括:
-记录阶段:全面记录影响程序状态的不确定性源,并记录于日志;
-重放阶段:按照日志重放不确定性源,确保程序执行状态与记录时一致,并保证时间精度。
本实施例的特征包括:
特征1:不改变操作系统(包括系统框架、系统软件等);不需要额外特权(例如root权限)。
特征2:在记录阶段可以全面记录影响程序状态的不确定性源于日志。
特征3:在重放阶段,按照日志高精度重放不确定性源,确保程序执行状态与录制时一样,并且保证高时间精度。
特征4:存储、传输、更新、可视化日志文件。
特征5:可以跨设备重放,即可以将一个设备上记录产生的日志,到另一个设备进行重放。
进一步地,特征2中所述不确定性源包括:
不确定性源1:网络通信。特征在于:应用程序与外部的网络通信,此外部可能是服务器,也可能是文件系统。包括同步网络请求(例如普通HTTP请求)和异步网络请求(例如AJAX)。
不确定性源2:用户输入,具体为HTML文档对象模型事件(DOM Event)。特征在于:一个文档对象模型事件会引发该事件的事件监听器(Event Listener);文档对象模型事件包括由用户操作产生的事件(例如鼠标点击事件click)和接口(Web APIs)产生的事件(例如进度完成事件load)。
不确定性源3:程序回调函数。特征在于:应用程序会在某种条件下执行其回调函数。包括注册到定时器(Timer)的一类回调函数以及注册用于处理异步行为的回调函数(例如XMLHttpRequest.onreadystatechange)。
不确定性源4:具有不确定返回值的函数调用。特征在于:这类函数返回值具有不确定性值,通常包括时间查询函数、随机数产生函数等。
进一步地,特征2中所述各不确定源的记录方法为:
记录方法1:对于不确定性源1,通过架设网络代理(Proxy),拦截并使网络流量全部通过所述网络代理,并在此网络代理中记录网络请求(Request)、网络回复(Response)、网络延迟(Latency)等。这个网络代理可以位于应用内部(位于应用所属的某个进程内),也可以存在于应用外部(配置到操作系统内或服务器端)。
记录方法2:对于不确定性源2,通过给HTML标准定义的每种文档对象模型事件注册一个新增的事件监听器。此事件监听器在对应事件发生时被调用,并记录这个事件的类型和详细属性。
记录方法3:对于不确定性源3,通过修改注册的回调函数,使这个回调函数在执行原始代码之前会首先记录这次回调函数的调用。所述修改(即增加记录的代码)应发生在回调函数被首次调用之前。通常,通过包装和覆盖回调函数的注册函数,在注册时就修改回调函数,例如对定时器。特殊的,也可以在回调函数注册后至被调用前某个必经阶段修改。
记录方法4:对于不确定性源4,记录函数调用及其返回值。一般通过包装和覆盖不确定性函数实现本方法。
进一步地,特征2中所述日志包括:日志的元数据(Meta Data)和多个不确定性源日志条目(Entry)。日志元数据为记录产生时的全局信息,包括此日志产生的设备信息、应用信息、地理信息等。每个日志条目代表一种前述不确定性源的一次发生。日志条目均由前述记录方法产生。日志条目不仅包括前述方法所述不确定性源属性,还包括此不确定性源的类型、发生的时间(时间戳,Timestamp)。
进一步地,特征3中所述高精度重放的特征包括:
高精度特征1:重放的不确定性源对应用产生的影响,与此不确定性源在记录阶段产生的影响相同。
高精度特征2:不确定性源重放的先后顺序与记录阶段相同。
高精度特征3:不确定性源重放的因果逻辑关系与记录阶段相同。
高精度特征4:不确定性源重放的时间与记录阶段相同或十分相近。
进一步地,为满足高精度特征1,本实施例采用以下重放方法:
重放方法1:对于不确定性源1,重放阶段,记录方法1中所述网络代理会对比记录阶段的网络请求和重放阶段的网络请求,然后根据日志,在相同的网络延迟后返回相同的网络回复,用来模拟与记录相同的网络。
重放方法2:对于不确定性源2,重放阶段,根据日志中的事件类型和属性:对于由用户交互产生的文档对象模型事件,本发明构建相同的文档对象模型事件,并将此事件分发(Dispatch)给相同的文档对象,用来模拟记录阶段的事件的发生。为保证重放产生的事件产生相同的影响,本发明通过包装和模拟修复一些不一致情况;对于接口产生的文档对象模型事件,因为这些事件由其他不确定性源引发,所以重放阶段只需观测到这些事件的产生并保证满足高精度特征2、高精度特征3即可。
重放方法3:对于不确定性源3,重放阶段,回调函数不会真正被注册,本发明会根据日志在合适时刻直接调用相应的回调函数。对于有因果关系的回调函数调用,重放阶段,本发明会替代地注册一个新的回调函数,当替代的回调函数被调用后,日志记录的回调函数将被正确的重放,以此保证满足高精度特征2、高精度特征3。
重放方法4:对于不确定性源4,重放阶段,根据日志返回对应的记录阶段的返回值。一般通过包装和覆盖不确定性函数实现本方法。
进一步地,为满足高精度特征2和高精度特征3,本发明为不确定性源的重放增加因果关系的限定和检测,如上述重放方法2和重放方法3中所述。
进一步地,为满足高精度特征4,本实施例采用以下重放时间策略:
记日志为{e0,e1,...,en},对应的记录时间戳为{T0,T1,...,Tn}。重放时,依次重放不确定性源e0,e1,...,en,对应的重放时间戳为{t0,t1,...,tn}。
当事件k-1重放完成后,此时的时间为tnow,将于interval时间后重放不确定性源k,其中:
interval=(Tk-T0)-(tnow-t0);
根据interval的值,本发明采取时间精确的策略以重放不确定性源k:
进一步地,特征4所述序列化日志可以持久化地储存在文件系统中,可以通过网络或其他方式传输,可以从外部导入至应用,也可以从应用导出至外部。本方法也能将日志可视化地显示。
进一步地,本实施例采用JavaScript对象表示法(JSON)作为序列化的目标格式。
进一步地,特征5所述跨设备重放,本实施例会记录运行应用的设备信息,可根据设备信息对日志进行可逆的双向的平台无关化处理。即可将特征2中日志根据设备信息处理成平台无关日志,也可将平台无关日志根据设备信息恢复成特征2中日志。
实施例2
本实施例提供了一种用于移动Web应用的高精度确定性的重放系统,用于实施实施例1提供的重放方法。
本实施例提供的重放系统,包括以下几个组件:
组件1:中心管理组件。
具体的,此组件管理其余组件。记录阶段接收来自组件3-5的日志条目,并按时间戳汇总成完整日志;重放阶段根据前述时间精确的重放策略,利用组件3-5重放日志中的不确定性源。
进一步地,本发明选择postMessage()以“立刻异步地重放不确定性源k”,选择setTimeout()以“设置定时器异步地重放不确定性源k”。
组件2:日志导入和导出组件。
具体的,此组件通过文件系统或网络,将日志从外部导入至组件1或将日志从组件1导出至外部。
进一步地,日志以JavaScript对象表示法(JSON)格式导入、导出和存储,网络资源文件以原文件格式和编码导入、导出和存储。
组件3:网络相关不确定性源的记录和重放组件。
具体的,此组件实现了记录方法1和重放方法1,用来记录和重放不确定性源1。
具体的,在记录阶段将记录不确定性源1,并将日志条目发送给组件1;在重放阶段将接收组件1发送来的日志条目,并重放该日志条目记录的不确定性源1。
组件4:控制流相关不确定性源的记录和重放组件。
具体的,此组件实现了记录方法2、记录方法3和重放方法2、重放方法3,用来记录和重放不确定性源2和不确定性源3。
具体的,在记录阶段将记录不确定性源2和不确定性源3,并将日志条目发送给组件1;在重放阶段将接收组件1发送来的日志条目,并重放该日志条目记录的不确定性源2或不确定性源3。
组件5:不确定性函数相关不确定源的记录和重放组件。
具体的,此组件实现了记录方法4和重放方法4,用来记录和重放不确定性源4。
具体的,在记录阶段将记录不确定性源4,并将日志条目发送给组件1;在重放阶段将接收组件1发送来的日志条目,并重放该日志条目记录的不确定性源4。
进一步地,本实施例实施实施例1重放方法的具体步骤如下:
记录阶段:
步骤S1.1,将组件1-5加入应用。
步骤S1.2,开启记录模式。
步骤S1.3,组件3-5将记录所有不确定性源,并将日志条目发送至组件1整合为完整日志。
步骤S1.4,组件1利用组件2将日志持久化储存(通过网络或文件系统)。
重放阶段:
步骤S2.1,将组件1-5加入应用。
步骤S2.2,组件1利用组件2读取将要重放的日志。
步骤S2.3,开启重放模式。
步骤S2.4,组件1根据所述时间精确的重放策略,利用组件3-5将日志中的不确定性源重放。
具体的,步骤S1.1、步骤S2.1中本实施例的方法实现加入应用的方式包括:开发者直接代码集成、软件开发工具包(SDK,Software Development Kit)、插桩(Instrumentation)等方式。
下面结合附图和实施例对本发明作进一步的详细说明。
本发明的组件在混合应用中的架构如图1所示。特征在于:重放系统,有一部分位于应用原生代码的空间,也有一部分位于应用Web代码的空间,以此来记录和重放所有不确定性源(即不确定性源1-4)。
本发明的组件的工作结构和数据流如图2所示。特征在于:记录所有不确定性源(即不确定性源1-4)的信息,并将这些信息汇总成完整日志;将日志序列化并可持久性地存储;根据完整日志,满足上述高精度特征1-4,重放所有不确定性源。
下述实施例为在安卓(Android)操作系统开发者直接代码集成的实施。
可以理解的是,在其他操作系统以其他方式加入本发明的方法与此实施例等同。具体的,其他操作系统为其他移动平台操作系统,例如苹果操作系统(iOS)。具体的,其他方式为在应用中使用本发明方法的其他方式,例如插桩、使用软件开发工具包等。
对于安卓操作系统,本发明实现组件的代码包括Java代码和JavaScript代码。具体的,本实施例中,上述5个组件,组件1,2,3实现在Java代码中,组件4,5实现在JavaScript代码中。
具体的,组件1和组件3使用、重载、包装、覆盖或扩展android.webkit包实现其功能。例如,组件3使用android.webkit.WebViewClient和android.webkit.WebChromeClient,并扩展android.webkit.WebResourceResponse等,实现一个记录和重放网络的代理。
具体的,组件4和组件5通过使用、重载、包装、覆盖或扩展JavaScript运行环境中的相关对象和函数实现其功能。例如重载重载、包装、覆盖setTimeout、Math.random等函数,利用addEventListener等函数增加新的监听器。
本实施例的实施步骤包括:
(1),将重放系统加入应用
对于一个混合应用,首先需要将本发明所述的实现组件加入应用。
开发者直接代码集成时,可将重放系统的Java代码放置于应用Java代码所处位置,将JavaScript代码放置于应用可读取的位置(文件系统或甚至网络)。具体的,本实施例中,JavaScript代码放置于资源文件目录(即assets目录)中,并利用系统提供的AssetManager进行管理和使用。
直接代码集成时,开发者需建立重放系统与应用的联系。具体的,本实施例中,用户调用new ReplayConsole(target_webview,context),使组件能记录和重放目标Webview。
(2)组件初始化
加入应用的组件会在组件使用前进行初始化。
本实施例中,程序开始运行时会初始化组件1。
进一步的,组件1会初始化组件2和组件3。
进一步的,组件3会为每个Web运行上下文初始化一个组件4和一个组件5。
具体的,组件3的网络代理会介入所有的网络通信,使其可以记录和重放所有网络相关的不确定性源,即不确定性源1。同时,组件3会筛选和修改产生新的Window或WorkerGlobalScope对象的网络资源(如超文本标记语言文档,即HTML文档),将组件4和组件5加入。
优选的,为了保证第一时间拦截到所有的不确定性源,组件3会将组件4和组件5的代码添加到会被首先执行的位置。例如,HTML文档的head标签内的第一行。
组件4通过相关初始化操作以记录和重放所有控制流相关的不确定性源,即不确定性源2和不确定性源3。例如,会为所有DOM事件注册监听器以记录DOM事件,会包装和覆盖setTimeout、setInterval、requestAnimationFrame等定时器函数以记录和重放定时器回调,会包装和覆盖XMLHttpRequest以记录和重放异步JavaScript和XML的回调函数,会包装和覆盖Image等函数以记录图片的progress事件。
组件5同样通过相关初始化操作以记录和重放所有不确定性函数相关的不确定性源,即不确定性源4。例如,会包装和覆盖Date函数以记录和重放时间查询,会包装和覆盖Math.random函数以记录和重放随机数查询。
重放阶段的初始化过程与记录阶段相似。而不同点在于,组件会初始化不同的功能、使用不同的被包装和覆盖过的函数以重放而不是记录不确定性源。
(3)记录不确定性源
记录阶段,每当所述不确定性源产生时,相应组件会使用上述记录方法1-4,记录下这个不确定性源的日志条目。之后,相应组件会将这个日志条目传给组件1,所以组件1维护着一个全局的完整的日志。
例如用户点击了网页的一个元素产生click事件,组件4会记录click事件的类型(DOMEvent:click)、时间戳和所有属性(包括target、screenX、ctrlKey等)。
(4)日志导入、导出和持久化存储
为了实现跨设备重放,组件2可将组件1中的日志导出至外部持久化存储,例如服务器的文件系统或数据库中;相应的,组件2也可将外部的日志导入到组件1。
(5)重放不确定性源
重放阶段,组件1按照日志记录,使用上述重放方法1-4,按顺序重放日志的每一个条目。
进一步的,为了保证时间精确地重放不确定性源,本发明使用上述时间精确的重放策略。
例如,之前的一个类型为DOMEvent:click的不确定性源条目,重放时首先会初始化一个MouseEvent,这个MouseEvent的类型是click,并且screenX、ctrlKey等属性均赋值为日志记录的值;接下来,将这个事件发送给条目中的target,完成此次日志重放。
在上述两个实施例中:
在记录阶段,全面地记录影响程序状态的不确定性源,并记录于日志;
在重放阶段,根据日志,高精度地重放不确定性源。
通过架设代理记录和重放网络不确定性源。
通过利用、修改、重载、包装和覆盖JavaScript的对象、接口、函数,记录和重放JavaScript运行空间内的不确定性源。
JavaScript运行空间内的不确定性源,包括:HTML文档对象模型事件、程序回调函数、具有不确定返回值的函数调用。
重放时不确定性源发生的先后顺序、产生的影响与记录阶段相同;重放时不确定性源的发生时间与记录阶段相同或十分相近;程序运行状态及运行状态的改变与记录阶段相同。
日志可被存储、传输。
可实现跨设备重放。
不改变操作系统,不需要额外特权。
程序实现部分位于应用原生代码的空间,部分位于应用Web代码的空间,以此记录和重放所有不确定性源。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。
Claims (7)
1.一种用于移动Web应用的重放方法,其特征在于,包括如下步骤:
-记录阶段:全面记录影响程序状态的不确定性源,并记录于日志;
-重放阶段:按照日志重放不确定性源,确保程序执行状态与记录时一致,并保证时间精度;
所述不确定性源包括:
不确定性源1:网络通信;
不确定性源2:用户输入;
不确定性源3:程序回调函数;
不确定性源4:具有不确定返回值的函数调用;
在记录阶段,针对不同的不确定性源,记录方法分别为:
记录方法1:对于不确定性源1,通过架设网络代理,拦截并使网络流量全部通过该网络代理,并在该网络代理中记录网络请求、网络回复以及网络延迟;所述网络代理位于应用内部或存在于应用外部;
记录方法2:对于不确定性源2,给HTML标准定义的每种文档对象模型事件注册一个新增的事件监听器,该事件监听器在对应事件发生时被调用,并记录这个事件的类型和详细属性;
记录方法3:对于不确定性源3,通过修改注册的回调函数,使这个回调函数在执行原始代码之前会首先记录这次回调函数的调用;所述修改发生在回调函数被首次调用之前,通过包装和覆盖回调函数的原注册函数,在注册时修改回调函数,或在回调函数注册后至被调用前的某个必经阶段修改回调函数;
记录方法4:对于不确定性源4,通过包装和覆盖原不确定性函数,实现记录函数调用及其返回值;
在重放阶段,针对不同的不确定性源,重放方法分别为:
重放方法1:对于不确定性源1,记录方法1中所述网络代理对比记录阶段的网络请求和重放阶段的网络请求,然后根据日志,在相同的网络延迟后返回相同的网络回复,用来模拟与记录阶段相同的网络;
重放方法2:对于不确定性源2,根据日志中的事件类型和属性,对于由用户交互产生的文档对象模型事件,构建相同的文档对象模型事件,并将此事件分发给相同的文档对象,用来模拟记录阶段的事件的发生;为保证重放产生的事件产生相同的影响,通过包装和模拟修复不一致情况;对于接口产生的文档对象模型事件,因为这些事件由其他不确定性源引发,所以只需观测到这些事件的产生并保证满足程序执行状态与记录阶段一致即可;
重放方法3:对于不确定性源3,回调函数不会真正被注册,根据日志在合适时刻直接调用相应的回调函数;对于有因果关系的回调函数调用,替代的注册一个新的回调函数,当替代的回调函数被调用后,日志记录的回调函数将被正确的重放;
重放方法4:对于不确定性源4,通过包装和覆盖不确定性函数,实现根据日志返回对应的记录阶段的返回值。
2.根据权利要求1所述的用于移动Web应用的重放方法,其特征在于,
在不确定性源1中,所述网络通信为应用程序与外部之间的网络通信,包括同步网络请求和异步网络请求,所述外部为服务器或文件系统;
在不确定性源2中,用户输入为HTML文档对象模型事件,一个文档对象模型事件引发该事件的事件监听器,其中,文档对象模型事件包括:由用户操作产生的事件和Web接口产生的事件;
在不确定性源3中,应用程序执行其回调函数,包括注册到定时器的回调函数以及注册用于处理异步行为的回调函数;
在不确定性源4中,不确定返回值的函数调用,包括:时间查询函数和/或随机数生成函数。
3.根据权利要求1至2中任一项所述的用于移动Web应用的重放方法,其特征在于,所述日志包括:日志的元数据和多个不确定性源日志条目;其中:
日志的元数据为记录产生时的全局信息,包括日志产生的设备信息、应用信息、地理信息;根据设备信息能够对日志进行双向可逆的平台无关化处理;
每个日志条目代表一种不确定性源的一次发生;日志条目均由记录方法产生;日志条目包括不确定性源属性、类型和发生的时间;
记录运行应用的设备信息,可根据设备信息对日志进行可逆的双向的平台无关化处理。
4.根据权利要求1至2中任一项所述的用于移动Web应用的重放方法,其特征在于,重放阶段,通过为不确定性源的重放增加因果关系的限定和检测,确保程序执行状态与记录时一致;所述程序执行状态包括:不确定性源重放的先后顺序、不确定性源重放的因果逻辑关系、不确定性源对应用造成改变和影响。
6.一种用于移动Web应用的重放系统,其特征在于,包括如下组件:
-组件1:中心管理组件,用于管理组件2~组件5;
-组件2:日志导入和导出组件,用于通过文件系统或网络,将日志从外部导入至组件1或将日志从组件1导出至外部;
-组件3:网络相关不确定性源的记录和重放组件,用于实现记录方法1和重放方法1,用来记录和重放不确定性源1;
-组件4:控制流相关不确定性源的记录和重放组件,用于实现记录方法2、记录方法3、重放方法2和重放方法3,用来记录和重放不确定性源2和不确定性源3;
-组件5:不确定性函数相关不确定源的记录和重放组件,用于实现记录方法4和重放方法4,用来记录和重放不确定性源4;
所述不确定性源包括:
不确定性源1:网络通信;
不确定性源2:用户输入;
不确定性源3:程序回调函数;
不确定性源4:具有不确定返回值的函数调用;
在记录阶段,针对不同的不确定性源,记录方法分别为:
记录方法1:对于不确定性源1,通过架设网络代理,拦截并使网络流量全部通过该网络代理,并在该网络代理中记录网络请求、网络回复以及网络延迟;所述网络代理位于应用内部或存在于应用外部;
记录方法2:对于不确定性源2,给HTML标准定义的每种文档对象模型事件注册一个新增的事件监听器,该事件监听器在对应事件发生时被调用,并记录这个事件的类型和详细属性;
记录方法3:对于不确定性源3,通过修改注册的回调函数,使这个回调函数在执行原始代码之前会首先记录这次回调函数的调用;所述修改发生在回调函数被首次调用之前,通过包装和覆盖回调函数的原注册函数,在注册时修改回调函数,或在回调函数注册后至被调用前的某个必经阶段修改回调函数;
记录方法4:对于不确定性源4,通过包装和覆盖原不确定性函数,实现记录函数调用及其返回值;
在重放阶段,针对不同的不确定性源,重放方法分别为:
重放方法1:对于不确定性源1,记录方法1中所述网络代理对比记录阶段的网络请求和重放阶段的网络请求,然后根据日志,在相同的网络延迟后返回相同的网络回复,用来模拟与记录阶段相同的网络;
重放方法2:对于不确定性源2,根据日志中的事件类型和属性,对于由用户交互产生的文档对象模型事件,构建相同的文档对象模型事件,并将此事件分发给相同的文档对象,用来模拟记录阶段的事件的发生;为保证重放产生的事件产生相同的影响,通过包装和模拟修复不一致情况;对于接口产生的文档对象模型事件,因为这些事件由其他不确定性源引发,所以只需观测到这些事件的产生并保证满足程序执行状态与记录阶段一致即可;
重放方法3:对于不确定性源3,回调函数不会真正被注册,根据日志在合适时刻直接调用相应的回调函数;对于有因果关系的回调函数调用,替代的注册一个新的回调函数,当替代的回调函数被调用后,日志记录的回调函数将被正确的重放;
重放方法4:对于不确定性源4,通过包装和覆盖不确定性函数,实现根据日志返回对应的记录阶段的返回值。
7.根据权利要求6所述的用于移动Web应用的重放系统,其特征在于,
在组件1中,记录阶段接收来自组件3~组件5的日志条目,并按时间戳汇总成完整日志;重放阶段根据时间精确的策略,利用组件3~组件5重放日志中的不确定性源;所述组件1利用组件2将日志持久化储存;
在组件2中,日志以JavaScript对象表示法格式导入、导出和存储,网络资源文件以原文件格式和编码方式导入、导出和存储;
在组件3中,记录阶段将记录不确定性源1,并将日志条目发送给组件1;重放阶段将接收组件1发送来的日志条目,并重放该日志条目记录的不确定性源1;
在组件4中,记录阶段将记录不确定性源2和不确定性源3,并将日志条目发送给组件1;重放阶段将接收组件1发送来的日志条目,并重放该日志条目记录的不确定性源2或不确定性源3;
在组件5中,记录阶段将记录不确定性源4,并将日志条目发送给组件1;重放阶段接收组件1发送来的日志条目,并重放该日志条目记录的不确定性源4。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710346413.9A CN107193734B (zh) | 2017-05-17 | 2017-05-17 | 用于移动Web应用的重放方法及重放系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710346413.9A CN107193734B (zh) | 2017-05-17 | 2017-05-17 | 用于移动Web应用的重放方法及重放系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107193734A CN107193734A (zh) | 2017-09-22 |
CN107193734B true CN107193734B (zh) | 2021-01-01 |
Family
ID=59873948
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710346413.9A Active CN107193734B (zh) | 2017-05-17 | 2017-05-17 | 用于移动Web应用的重放方法及重放系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107193734B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220269586A1 (en) * | 2021-02-24 | 2022-08-25 | Applause App Quality, Inc. | Systems and methods for automating test and validity |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110017323A1 (en) * | 2009-07-22 | 2011-01-27 | Ewa Herbst | Method and apparatus for inline testing |
JP5292258B2 (ja) * | 2009-10-23 | 2013-09-18 | 日立コンシューマエレクトロニクス株式会社 | データ記録方法、データ記録装置、およびデータ記録媒体 |
CN103810089B (zh) * | 2012-11-12 | 2021-12-03 | Sap欧洲公司 | 自动测试基于姿态的应用 |
CN103428297A (zh) * | 2013-08-30 | 2013-12-04 | 上海交通大学 | 基于桌面虚拟化的远程交互系统架构 |
US10901810B2 (en) * | 2014-05-14 | 2021-01-26 | Intel Corporation | Event-based record and replay for advanced applications |
-
2017
- 2017-05-17 CN CN201710346413.9A patent/CN107193734B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN107193734A (zh) | 2017-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7992127B2 (en) | Method and system of encapsulating web site transactions for computer-aided generation of web services | |
US8001532B1 (en) | System and method for generating source code-based test cases | |
Paganelli et al. | Intelligent analysis of user interactions with web applications | |
US8166347B2 (en) | Automatic testing for dynamic applications | |
US7739697B2 (en) | System and method for creating web services from an existing web site | |
US20140372985A1 (en) | API Rules Verification Platform | |
US8898643B2 (en) | Application trace replay and simulation systems and methods | |
US20130298110A1 (en) | Software Visualization Using Code Coverage Information | |
US20200133829A1 (en) | Methods and systems for performance testing | |
CN109800135B (zh) | 一种信息处理方法及终端 | |
CN101676919A (zh) | 用于合并覆盖数据的eda覆盖日志的方法和装置 | |
CN103927253A (zh) | 多浏览器兼容性测试方法及系统 | |
US20170255445A1 (en) | Translation of natural language into user interface actions | |
Kessin | Programming HTML5 applications: building powerful cross-platform environments in JavaScript | |
CN115658529A (zh) | 用户页面的自动化测试方法以及相关设备 | |
US11836510B2 (en) | Snapshot capture of computing device user interfaces | |
CN107193734B (zh) | 用于移动Web应用的重放方法及重放系统 | |
CN113485909A (zh) | 测试方法、装置、计算设备以及介质 | |
CN115454400A (zh) | 接口参数的处理方法、装置、设备、介质及程序产品 | |
US20090094583A1 (en) | System and method for testing computer programs | |
CN116360931A (zh) | 一种链路追踪方法、装置、系统及存储介质 | |
CN111459547B (zh) | 一种函数调用链路的展示方法和装置 | |
Horemans et al. | Elmsvuur: A multi-tier version of elm and its time-traveling debugger | |
Lukavsky | Building Big Data Pipelines with Apache Beam: Use a single programming model for both batch and stream data processing | |
US11550705B2 (en) | System and method for performing end-to-end simulation and testing of an IOT application |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |