一种测试方法、装置、电子设备制造方法及图纸

技术编号:21605218 阅读:25 留言:0更新日期:2019-07-13 18:07
本申请公开了一种测试方法,属于计算机技术领域,用于解决现有技术中真机测试过程中无法对待测试应用进行全面测试的问题。申请公开的测试方法包括:获取待测试应用的编译文件;获取所述编译文件的测试配置信息,所述测试配置信息包括模拟对象的信息;编辑所述编译文件中所述模拟对象的字节码;通过运行编辑后的所述编译文件对所述待测试应用进行测试。本申请实施例公开的测试方法通过修改编译期字节码并注入与测试用例相关的字节码或修改静态方法或final类等对象的编译期字节码,可以实现对待测试应用启动过程中无法直接通过Mockito框架进行测试的对象进行测试,也可以对依赖静态方法或final类的对象进行测试,从而可以更全面的对待测试应用进行测试。

A Test Method, Device and Electronic Equipment

【技术实现步骤摘要】
一种测试方法、装置、电子设备
本申请涉及计算机
,特别是涉及一种测试方法、装置、电子设备及存储介质。
技术介绍
在进行自动化测试时,为了能够最大可能的覆盖业务逻辑,拓展可测试场景,需要仿造被测试场景的上下文:例如当前时间、地理位置、用户登录态;以及在执行过程中与应用层的数据交换等。现有技术中,安卓平台下自动化测试场景下的解决方案主要包括在JVM(JAVA虚拟机)平台进行测试和真机测试。在JVM(JAVA虚拟机)平台上完成安卓代码的自动化测试的场景下,在测试前需要Mock(模拟)所有涉及到的Android(安卓)系统的类,以及测试过程中需要测试的对象的上下文。需要返回的上下文和应用数据均在测试案例中定义。在Android真机环境进行测试的场景下,通常使用独立的MockServer(模拟服务器)来模拟与应用层的数据交换,在运行时通过adb(AndroidDebugBridge,安卓调试桥梁)指令修改系统环境参数或使用Mockito(模拟测试框架)制作Mock对象替换原有对象的方式来Mock测试对象的当前时间、地理位置、用户登录态等测试场景等上下文。然而,在使用Mockito制作Mock对象替换原有对象的方式来Mock测试对象时,需在待测试应用启动后,通过Mock对象替换待测试应用中相应对象,因此,受测试代码执行时机的限制,通过替换对象或adb修改参数的方式均无法对待测试应用的启动页面过程中的方法返回值进行及时修改。并且,基于Mockito制作替换对象的方式对静态方法和final(JAVA中的一个关键字)类无效,也会导致上下文为静态方法和final类的代码无法进行测试。可见,现有技术中的测试方法至少存在无法对待测试应用进行全面测试的缺陷。
技术实现思路
本申请提供一种测试方法,用于解决真机测试过程中无法对待测试应用进行全面测试的问题。为了解决上述问题,第一方面,本申请实施例提供了一种测试方法,包括:获取待测试应用的编译文件;获取所述编译文件的测试配置信息,所述测试配置信息包括模拟对象的信息;编辑所述编译文件中所述模拟对象的字节码;通过运行编辑后的所述编译文件对所述待测试应用进行测试。第二方面,本申请实施例提供了一种测试装置,包括:编译文件获取模块,用于获取待测试应用的编译文件;测试配置信息获取模块,用于获取所述编译文件的测试配置信息,所述测试配置信息包括模拟对象的信息;字节码编辑模块,用于编辑所述编译文件中所述模拟对象的字节码;测试用例执行模块,用于通过运行编辑后的所述编译文件对所述待测试应用进行测试。第三方面,本申请实施例还公开了一种电子设备,包括存储器、处理器及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本申请实施例所述的测试方法。第四方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时本申请实施例公开的测试方法的步骤。本申请实施例公开的测试方法,通过获取待测试应用的编译文件;获取所述编译文件的测试配置信息,所述测试配置信息包括模拟对象的信息;编辑所述编译文件中所述模拟对象的字节码;通过运行编辑后的所述编译文件对所述待测试应用进行测试,解决了真机测试过程中无法对待测试应用进行全面测试的问题。本申请实施例公开的测试方法通过编辑编译期字节码并注入与测试用例相关的字节码或修改静态方法或final类等对象的字节码,可以更全面的对待测试应用中的类或方法等进行测试。附图说明为了更清楚地说明本申请实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1是本申请实施例一的测试方法流程图;图2是现有技术中基于Mockito框架的测试方法流程图示意图;图3是本申请基于Mockito框架的测试方法流程图示意图;图4是本申请实施例二的测试装置的结构示意图。具体实施方式下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。实施例一本实施例公开的一种测试方法,如图1所示,该方法包括:步骤110至步骤140。步骤110,获取待测试应用的编译文件。在安卓开发过程中,对应用进行测试是保证应用稳定性的必要手段。测试的过程实际上是通过运行编译后的代码,并根据代码运行结果判断应用运行状态的过程,因此,在进行测试之前,首先要对待测试应用进行编译,获取待测试应用的编译文件。以待测试应用通过JAVA语言编写代码为例,首先对待测试应用的代码进行编译。JAVA常用的设计模式有单例模式和工厂模式,本申请具体实施时,可以采用单例模式和工厂模式对待测试应用使用的所有类进行封装,或者,采用单例模式和工厂模式对待测试应用中需要测试的类及其上下文进行封装。mock是在测试过程中,对于一些不容易构造/获取的对象,在测试过程中,通常通过创建一个mock对象来模拟对象的行为,以实现修改上下文,进行测试。本申请实施例中,将待测试对象的上下文对象定义为需要mock的对象,即需要模拟的对象。具体实施时,还可以通过对需要模拟的对象进行单例模式封装得到编译文件。具体实施时,也可以直接获取编译完成的待测试应用的编译文件。步骤120,获取所述编译文件的测试配置信息,所述测试配置信息包括模拟对象的信息。对于客户端应用,真机测试可以更准确的模拟应用的实际运行环境,从而提升测试的准确性和有效性。现有技术中,通常采用Mockito框架进行真机测试。在采用Mockito框架进行真机测试之前,首先需要根据测试需求确定需要Mock的类。本申请实施例中所述的需要Mock的对象包括待测试对象的上下文对象,即本申请实施例中所述的模拟对象包括待测试对象的上下文对象。Mockito是通过创建匿名子类来进行Mock(模拟)的,所以任何子类对父类无法突破的方面它都存在。例如final类,final方法,私有方法,静态方法,构造函数(方法的一种)等对象都是无法通过子类型进行重写的。因此,当需要模拟上述类型的对象时,需要通过本申请实施例中所述的测试方案。本申请实施例中所述的测试配置信息包括需要模拟的对象的名称、参数、确定是否进行模拟的匹配条件等信息。在本申请的一些实施例中,所述测试配置信息至少包括所述待测试应用中需要模仿的类、对象、方法的名称。所述获取所述编译文件的测试配置信息的步骤,包括:通过对所述待测试应用进行编译以得到所述编译文件的编译工程的配置文件,获取所述编译文件中包括的类、方法和对象的信息;确定需要模仿的所述类、方法和对象的信息,构成测试配置信息。例如,通过Gradle插件的形式,为编译工程增加一个task。task的目的在于在transform接口执行前,让使用者通过特定领域语言(DSL)的方式获取所述编译文件中包括的类、方法和对象的信息,或者,获取所述编译文件中包括的需要模拟的对象的信息。需要模拟的对象主要包括需要插入指定字节码的包名和类名本文档来自技高网
...

【技术保护点】
1.一种测试方法,其特征在于,包括:获取待测试应用的编译文件;获取所述编译文件的测试配置信息,所述测试配置信息包括模拟对象的信息;编辑所述编译文件中所述模拟对象的字节码;通过运行编辑后的所述编译文件对所述待测试应用进行测试。

【技术特征摘要】
1.一种测试方法,其特征在于,包括:获取待测试应用的编译文件;获取所述编译文件的测试配置信息,所述测试配置信息包括模拟对象的信息;编辑所述编译文件中所述模拟对象的字节码;通过运行编辑后的所述编译文件对所述待测试应用进行测试。2.根据权利要求1所述的方法,其特征在于,所述模拟对象包括通过final关键字标识的类或方法,所述编辑所述编译文件中所述模拟对象的字节码的步骤,包括:移除所述编译文件中的第一目标字节码,其中,第一目标字节码为标识所述类或方法的final关键字的字节码。3.根据权利要求1或2所述的方法,其特征在于,所述编辑所述编译文件中所述模拟对象的字节码的步骤,包括:当所述模拟对象为方法时,在所述编译文件中的第二目标字节码所在位置插入指定字节码,其中,所述第二目标字节码为所述模拟对象的入口,所述指定字节码用于在被运行时返回预先配置的返回值。4.根据权利要求3所述的方法,其特征在于,所述通过运行编辑后的所述编译文件对所述待测试应用进行测试的步骤,包括:通过运行编辑后的所述编译文件,执行插入的所述指定字节码,所述指定字节码被执行时,若确定当前方法匹配模拟条件,则通过预设的模拟测试字典获取预先配置的返回值;基于所述返回值继续运行所述编译文件。5.根据权利要求4所述的方法,其特征在于,所述指定字节码被执行时,若确定当前方法匹配模拟条件,则通过预设的模拟测试字典获取预先配置的返回值的步骤,包括:所述指定字节码在执行过程中,确定当前方法是否需要模拟;若需要模拟,则根据当...

【专利技术属性】
技术研发人员:胡朝旭张裕文林辉梁士兴
申请(专利权)人:北京三快在线科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1