CN110008113A - 一种测试方法、装置、电子设备 - Google Patents

一种测试方法、装置、电子设备 Download PDF

Info

Publication number
CN110008113A
CN110008113A CN201910127612.XA CN201910127612A CN110008113A CN 110008113 A CN110008113 A CN 110008113A CN 201910127612 A CN201910127612 A CN 201910127612A CN 110008113 A CN110008113 A CN 110008113A
Authority
CN
China
Prior art keywords
test
bytecode
tested
compiling file
application
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.)
Granted
Application number
CN201910127612.XA
Other languages
English (en)
Other versions
CN110008113B (zh
Inventor
胡朝旭
张裕文
林辉
梁士兴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Kuxun Technology Co Ltd
Beijing Sankuai Online Technology Co Ltd
Original Assignee
Beijing Sankuai Online Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Sankuai Online Technology Co Ltd filed Critical Beijing Sankuai Online Technology Co Ltd
Priority to CN201910127612.XA priority Critical patent/CN110008113B/zh
Publication of CN110008113A publication Critical patent/CN110008113A/zh
Application granted granted Critical
Publication of CN110008113B publication Critical patent/CN110008113B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

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

Description

一种测试方法、装置、电子设备
技术领域
本申请涉及计算机技术领域,特别是涉及一种测试方法、装置、电子设备及存储介质。
背景技术
在进行自动化测试时,为了能够最大可能的覆盖业务逻辑,拓展可测试场景,需要仿造被测试场景的上下文:例如当前时间、地理位置、用户登录态;以及在执行过程中与应用层的数据交换等。现有技术中,安卓平台下自动化测试场景下的解决方案主要包括在JVM(JAVA虚拟机)平台进行测试和真机测试。在JVM(JAVA虚拟机)平台上完成安卓代码的自动化测试的场景下,在测试前需要Mock(模拟)所有涉及到的Android(安卓)系统的类,以及测试过程中需要测试的对象的上下文。需要返回的上下文和应用数据均在测试案例中定义。在Android真机环境进行测试的场景下,通常使用独立的Mock Server(模拟服务器)来模拟与应用层的数据交换,在运行时通过adb(Android Debug Bridge,安卓调试桥梁)指令修改系统环境参数或使用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)的方式获取所述编译文件中包括的类、方法和对象的信息,或者,获取所述编译文件中包括的需要模拟的对象的信息。需要模拟的对象主要包括需要插入指定字节码的包名和类名,即需要插桩的包名和类名,和需要修改的类名和方法等对象的名称。
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,从而获取安卓工程的配置。通过Gradle插件的形式获取所述编译文件中包括的类、方法和对象的信息的具体方案参见现有技术,本申请实施例中不再赘述。
在本申请的一些实施例中,所述获取所述编译文件的测试配置信息的步骤,包括:按照预设协议对所述编译文件进行格式解析,确定所述编译文件中包括的类、方法和对象的信息;确定需要模仿的所述类、方法和对象的信息,构成测试配置信息。每种格式的编译文件都有特定的格式协议,通过根据相应的格式协议对所述编译文件进行解析,在所述编译文件中,可以确定类或方法等对象名称和类型等信息的字节码。进一步的,选择需要模拟的对象的名称等信息构建测试配置信息。
本申请实施例中,需要模拟的对象可以包括:final类,final方法,私有方法,静态方法,构造函数(方法的一种)等。
步骤130,编辑所述编译文件中所述模拟对象的字节码。
在本申请的一些实施例中,所述模拟对象包括通过final关键字标识的类或方法,所述编辑所述编译文件中所述模拟对象的字节码的步骤,包括:移除所述编译文件中的第一目标字节码,其中,第一目标字节码为标识所述类或方法的final关键字的字节码。移除所述编译文件中的第一目标字节码,可以使得Mockito可以对静态对象和final对象进行模仿。具体实施时,可以通过对编译文件中的字节码进行解析,确定以final标识的对象的字节码,并进一步确定final关键字对应的字节码,然后,直接对所述编译文件的字节码进行编辑,删除final关键字对应的字节码。通过移除final关键字的字节码,使得原来通过final关键字修饰的方法或类可以通过子类型进行重写,进而是实现Mockito架构下的测试。
在本申请的一些实施例中,所述编辑所述编译文件中所述模拟对象的字节码的步骤,包括:当所述模拟对象为方法时,在所述编译文件中的第二目标字节码所在位置插入指定字节码,其中,所述第二目标字节码为所述模拟对象的入口,所述指定字节码用于在被运行时返回预先配置的返回值。本申请实施例中所述的方法可以为移除了final关键字修饰的方法,也可以为其他方法。所述插入的字节码为用于判断是否对当前方法进行Mock的判断代码的字节码。例如,插入的字节码被执行时用于判断当前方法是否需要Mock,如果需要,则执行Mock对象,从而获得预设的返回值;如果不需要,则执行原来的程序逻辑,获得相应的返回值。具体实施时,可以通过直接对所述编译文件的字节码进行编辑,插入指定的字节码。
在本申请的一些优选实施例中,可以通过字节码编辑工具对需要模拟的方法类对象进行编辑,或移除final关键字的字节码。例如,通过ASM或javassist字节码编辑工具对需要模拟的方法类对象进行编辑,或移除final关键字的字节码。
步骤140,通过运行编辑后的所述编译文件对所述待测试应用进行测试。
对所述编译文件基于字节码进行编辑之后,移除了一些类和方法的final限定,在通过Mockito架构运行编辑后的所述编译文件的过程中,如图2所示,待测试应用启动后,则可以通过预先制作的Mock对象替换移除了final修饰的类和方法等对象,从而获取测试用例预先配置的返回值,对后续代码进行测试。
在本申请的一些实施例中,所述通过运行编辑后的所述编译文件对所述待测试应用进行测试的步骤,包括:通过运行编辑后的所述编译文件,执行插入的所述指定字节码,所述指定字节码被执行时,若确定当前方法匹配模拟条件,则通过预设的模拟测试字典获取预先配置的返回值;基于所述返回值继续运行所述编译文件。对于插入了指定字节码的对象,即进行了插桩的方法,在通过Mockito架构运行编辑后的所述编译文件的过程中,执行到进行了插桩的方法时,首先,该方法入口处插入的指定字节码将首先被执行。所述指定字节码在执行过程中判断当前方法是否匹配模拟条件(如:是否需要Mock),当确定当前方法需要Mock之后,通过执行插入的字节码调用预设的测试Mock类,读取预先设置的模拟测试字典中获取当前方法的返回值。然后,后续代码基于执行插入的字节码得到的返回值,继续执行,已输出测试结果。
在本申请的一些实施例中,所述指定字节码被执行时,若确定当前方法匹配模拟条件,则通过预设的模拟测试字典获取预先配置的返回值的步骤,包括:所述指定字节码在执行过程中,确定当前方法是否需要模拟;若需要模拟,则根据当前方法的方法名遍历预设的模拟测试字典,确定所述模拟测试字典中与所述当前方法匹配的返回值。例如,本申请具体实施时,如果当前方法没有参数,则可以直接根据方法名判断所述当前方法是否需要模拟。在确定当前方法需要模拟之后,通过执行插入的字节码进一步调用预先构建的测试模拟类,并通过该测试模拟类获取预设的模拟测试字典中与所述当前方法名匹配的返回值,从而使得后续代码基于该返回值继续执行,并输出测试结果。
如果当前方法包括参数,则需要确定方法名和参数均与预先设置的模拟条件匹配,采执行对象模拟。例如,在本申请的一些实施例中,所述指定字节码被执行时,若确定当前方法匹配模拟条件,则通过预设的模拟测试字典获取预先配置的返回值的步骤,包括:所述指定字节码在执行过程中,根据当前方法的方法名和参数值确定当前方法是否需要模拟;若需要模拟,则根据当前方法的方法名和参数值遍历预设的模拟测试字典,确定所述模拟测试字典中与所述当前方法匹配的返回值。例如,首先根据方法名和参数类型、参数值判断所述当前方法是否需要模拟(如判断参数类型和参数值是否与该当前方法预先注册的参数匹配,若完全匹配,则确定当前方法匹配模拟条件,需要模拟)。在确定当前方法需要模拟之后,通过执行插入的字节码进一步调用预先构建的测试模拟类,并通过该测试模拟类获取预设的模拟测试字典中与所述当前方法名匹配的返回值,从而使得后续代码基于该返回值继续执行,并输出测试结果。其中,所述返回值为测试用例中配置的上下文数值。
本申请实施例中所述的模拟测试字典为预先根据测试需求构建的测试用例数据,可以为模拟对象和返回值的键值对应关系形式的字典。其中,模拟对象的方法名,或者,模拟对象的方法名和参数组合,作为索引键;表示测试用例数据,即相应方法或方法与参数值的组合对应的返回值作为索引值。具体实施时,所述模拟测试字典为线程安全的数据表,便于多个测试任务或测试Mock对象同时访问。
本申请实施例公开的测试方法,通过获取待测试应用的编译文件;获取所述编译文件的测试配置信息,所述测试配置信息包括模拟对象的信息;编辑所述编译文件中所述模拟对象的字节码;通过运行编辑后的所述编译文件对所述待测试应用进行测试,解决了真机测试过程中无法对待测试应用进行全面测试的问题。本申请实施例公开的测试方法通过修改编译期字节码并注入与测试用例相关的字节码或修改静态方法或final类等对象的编译期字节码,可以实现对待测试应用启动过程中无法直接通过Mockito框架进行测试的对象进行测试,也可以对依赖静态方法或final类的对象进行测试,从而可以更全面的对待测试应用中的类、方法、方法等进行测试。
以测试基于地理位置的客户端应用为例,现有技术中基于Mockito架构进行客户端应用测试时,测试流程如图2所示,首先需要制作Mock对象,在启动待测试应用之后,通过预先制作的Mock对象替换待测试应用持有的类、方法或方法等对象;之后,启动待测试页面,通过Mock对象替换待测试页面内的对象,并执行Mock对象获取当前客户端的地理位置,根据Mock对象的返回的地理位置执行后续代码,完成测试。可见,现有技术中基于Mockito架构进行测试时,Mock的上下文对象只能是应用启动后执行的对象,如果上下文对象(如获取地理位置的对象)在应用启动过程中,或是仅存在于系统执行过程中,测试环境中没有时机获取这些临时对象,因此无法通过修改其返回值进行Mock。
而本申请通过编辑待测试应用的字节码,对编译文件进行插桩,在需要Mock的对象中插入指定字节码,以进行判断、跳转,从而导入测试用例数据。本申请的测试流程如图3所示,首先需要制作Mock对象,然后,在测试执行的过程中,通过插入的字节码获取预先设置的需要Mock的方法、方法、类等对象的返回值,之后,在启动待测试应用的待测试页面之后,基于设置的返回值执行后续代码,完成测试。
现有技术中的测试方法通过在待测试应用的执行期,通过为Mock的对象原属的类,基于字节码编辑在运行时生成一个临时的子类,而基于此子类生成一个Mock对象。因此当原有对象、方法是final的时候,或者方法是静态方法时无法Mock原有对象的。本申请中公开的测试方法是通过在编译生成类后对类的字节码进行编辑。修改的是原有类的字节码,不需要生成子类。因此,规避了final和static等关键词对一些对象的限制,同时,不需要在待测试应用启动后执行Mock,丰富了Mock对象的时机,有助于对待测试应用进行全面测试。
实施例二
本实施例公开的一种测试装置,如图4所示,所述装置包括:
编译文件获取模块410,用于获取待测试应用的编译文件;
测试配置信息获取模块420,用于获取所述编译文件的测试配置信息,所述测试配置信息包括模拟对象的信息;
字节码编辑模块430,用于编辑所述编译文件中所述模拟对象的字节码;
测试用例执行模块440,用于通过运行编辑后的所述编译文件对所述待测试应用进行测试。
在本申请的一些实施例中,所述模拟对象包括通过final关键字标识的类或方法,所述字节码编辑模块430,进一步用于:
移除所述编译文件中的第一目标字节码,其中,第一目标字节码为标识所述类或方法的final关键字的字节码。
在本申请的一些实施例中,所述字节码编辑模块430,进一步用于:
当所述模拟对象为方法时,在所述编译文件中的第二目标字节码所在位置插入指定字节码,其中,所述第二目标字节码为所述模拟对象的入口,所述指定字节码用于在被运行时返回预先配置的返回值。
在本申请的一些实施例中,所述测试用例执行模块440,进一步用于:
通过运行编辑后的所述编译文件,执行插入的所述指定字节码,所述指定字节码被执行时,若确定当前方法匹配模拟条件,则通过预设的模拟测试字典获取预先配置的返回值;
基于所述返回值继续运行所述编译文件。
可选的,所述指定字节码被执行时,若确定当前方法匹配模拟条件,则通过预设的模拟测试字典获取预先配置的返回值的步骤,包括:
所述指定字节码在执行过程中,确定当前方法是否需要模拟;
若需要模拟,则根据当前方法的方法名遍历预设的模拟测试字典,确定所述模拟测试字典中与所述当前方法匹配的返回值。
可选的,所述指定字节码被执行时,若确定当前方法匹配模拟条件,则通过预设的模拟测试字典获取预先配置的返回值的步骤,包括:
所述指定字节码在执行过程中,根据当前方法的方法名和参数值确定当前方法是否需要模拟;
若需要模拟,则根据当前方法的方法名和参数值遍历预设的模拟测试字典,确定所述模拟测试字典中与所述当前方法匹配的返回值。
本实施例公开的测试装置,用于实现本申请实施例一中所述的测试方法的各步骤,装置的各模块的具体实施方式参见相应步骤,此处不再赘述。
本申请实施例公开的测试装置,通过获取待测试应用的编译文件;获取所述编译文件的测试配置信息,所述测试配置信息包括模拟对象的信息;编辑所述编译文件中所述模拟对象的字节码;通过运行编辑后的所述编译文件对所述待测试应用进行测试,解决了真机测试过程中无法对待测试应用进行全面测试的问题。本申请实施例公开的测试方法通过修改编译期字节码并注入与测试用例相关的字节码或修改静态方法或final类等对象的编译期字节码,可以实现对待测试应用启动过程中无法直接通过Mockito框架进行测试的对象进行测试,也可以对依赖静态方法或final类的对象进行测试,从而可以更全面的对待测试应用中的类、方法、方法等进行测试。
相应的,本申请还公开了一种电子设备,包括存储器、处理器及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本申请实施例一所述的测试方法。所述电子设备可以为PC机、移动终端、个人数字助理、平板电脑等。
本申请还公开了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请实施例一所述的测试方法的步骤。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本申请提供的一种测试方法及装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

Claims (10)

1.一种测试方法,其特征在于,包括:
获取待测试应用的编译文件;
获取所述编译文件的测试配置信息,所述测试配置信息包括模拟对象的信息;
编辑所述编译文件中所述模拟对象的字节码;
通过运行编辑后的所述编译文件对所述待测试应用进行测试。
2.根据权利要求1所述的方法,其特征在于,所述模拟对象包括通过final关键字标识的类或方法,所述编辑所述编译文件中所述模拟对象的字节码的步骤,包括:
移除所述编译文件中的第一目标字节码,其中,第一目标字节码为标识所述类或方法的final关键字的字节码。
3.根据权利要求1或2所述的方法,其特征在于,所述编辑所述编译文件中所述模拟对象的字节码的步骤,包括:
当所述模拟对象为方法时,在所述编译文件中的第二目标字节码所在位置插入指定字节码,其中,所述第二目标字节码为所述模拟对象的入口,所述指定字节码用于在被运行时返回预先配置的返回值。
4.根据权利要求3所述的方法,其特征在于,所述通过运行编辑后的所述编译文件对所述待测试应用进行测试的步骤,包括:
通过运行编辑后的所述编译文件,执行插入的所述指定字节码,所述指定字节码被执行时,若确定当前方法匹配模拟条件,则通过预设的模拟测试字典获取预先配置的返回值;
基于所述返回值继续运行所述编译文件。
5.根据权利要求4所述的方法,其特征在于,所述指定字节码被执行时,若确定当前方法匹配模拟条件,则通过预设的模拟测试字典获取预先配置的返回值的步骤,包括:
所述指定字节码在执行过程中,确定当前方法是否需要模拟;
若需要模拟,则根据当前方法的方法名遍历预设的模拟测试字典,确定所述模拟测试字典中与所述当前方法匹配的返回值。
6.根据权利要求4所述的方法,其特征在于,所述指定字节码被执行时,若确定当前方法匹配模拟条件,则通过预设的模拟测试字典获取预先配置的返回值的步骤,包括:
所述指定字节码在执行过程中,根据当前方法的方法名和参数值确定当前方法是否需要模拟;
若需要模拟,则根据当前方法的方法名和参数值遍历预设的模拟测试字典,确定所述模拟测试字典中与所述当前方法匹配的返回值。
7.一种测试装置,其特征在于,包括:
编译文件获取模块,用于获取待测试应用的编译文件;
测试配置信息获取模块,用于获取所述编译文件的测试配置信息,所述测试配置信息包括模拟对象的信息;
字节码编辑模块,用于编辑所述编译文件中所述模拟对象的字节码;
测试用例执行模块,用于通过运行编辑后的所述编译文件对所述待测试应用进行测试。
8.根据权利要求7所述的装置,其特征在于,所述模拟对象包括通过final关键字标识的类或方法,所述字节码编辑模块,进一步用于:
移除所述编译文件中的第一目标字节码,其中,第一目标字节码为标识所述类或方法的final关键字的字节码。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6任意一项所述的测试方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1至6任意一项所述的测试方法的步骤。
CN201910127612.XA 2019-02-20 2019-02-20 一种测试方法、装置、电子设备 Active CN110008113B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910127612.XA CN110008113B (zh) 2019-02-20 2019-02-20 一种测试方法、装置、电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910127612.XA CN110008113B (zh) 2019-02-20 2019-02-20 一种测试方法、装置、电子设备

Publications (2)

Publication Number Publication Date
CN110008113A true CN110008113A (zh) 2019-07-12
CN110008113B CN110008113B (zh) 2023-08-29

Family

ID=67165756

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910127612.XA Active CN110008113B (zh) 2019-02-20 2019-02-20 一种测试方法、装置、电子设备

Country Status (1)

Country Link
CN (1) CN110008113B (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111078631A (zh) * 2019-12-20 2020-04-28 广州品唯软件有限公司 文件的处理方法、终端设备及存储介质
CN111181805A (zh) * 2019-12-25 2020-05-19 航天信息股份有限公司 一种基于测试用例的微服务测试挡板生成方法及系统
CN111738543A (zh) * 2020-05-13 2020-10-02 浙江口碑网络技术有限公司 一种对象制作系统及用于对象制作的信息处理方法
CN111797015A (zh) * 2020-06-30 2020-10-20 中国工商银行股份有限公司 一种基于动态字节码的测试方法及装置
CN111797016A (zh) * 2020-06-30 2020-10-20 苏州三六零智能安全科技有限公司 应用程序的测试方法、设备、存储介质及装置
CN112559344A (zh) * 2020-12-10 2021-03-26 平安养老保险股份有限公司 远程mock测试方法及系统
CN113094257A (zh) * 2021-03-08 2021-07-09 上海硬通网络科技有限公司 应用测试方法、装置及电子设备
CN113127331A (zh) * 2019-12-31 2021-07-16 航天信息股份有限公司 一种基于故障注入的测试方法、装置及计算机设备
CN113326184A (zh) * 2021-05-11 2021-08-31 前海飞算云智软件科技(深圳)有限公司 接口测试方法、装置、存储介质及电子设备
CN114553929A (zh) * 2022-01-10 2022-05-27 多点生活(成都)科技有限公司 录制调用动态Mock的录制回放增强方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080256517A1 (en) * 2006-10-18 2008-10-16 International Business Machines Corporation Method and System for Automatically Generating Unit Test Cases Which Can Reproduce Runtime Problems
CN103870383A (zh) * 2012-12-11 2014-06-18 航天信息股份有限公司 基于jvm的测试覆盖率统计方法及系统
CN106354624A (zh) * 2015-07-17 2017-01-25 北京奇虎科技有限公司 一种自动化测试方法和装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080256517A1 (en) * 2006-10-18 2008-10-16 International Business Machines Corporation Method and System for Automatically Generating Unit Test Cases Which Can Reproduce Runtime Problems
CN103870383A (zh) * 2012-12-11 2014-06-18 航天信息股份有限公司 基于jvm的测试覆盖率统计方法及系统
CN106354624A (zh) * 2015-07-17 2017-01-25 北京奇虎科技有限公司 一种自动化测试方法和装置

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111078631B (zh) * 2019-12-20 2024-01-30 广州品唯软件有限公司 文件的处理方法、终端设备及存储介质
CN111078631A (zh) * 2019-12-20 2020-04-28 广州品唯软件有限公司 文件的处理方法、终端设备及存储介质
CN111181805A (zh) * 2019-12-25 2020-05-19 航天信息股份有限公司 一种基于测试用例的微服务测试挡板生成方法及系统
CN111181805B (zh) * 2019-12-25 2022-04-29 航天信息股份有限公司 一种基于测试用例的微服务测试挡板生成方法及系统
CN113127331A (zh) * 2019-12-31 2021-07-16 航天信息股份有限公司 一种基于故障注入的测试方法、装置及计算机设备
CN113127331B (zh) * 2019-12-31 2024-01-05 航天信息股份有限公司 一种基于故障注入的测试方法、装置及计算机设备
CN111738543A (zh) * 2020-05-13 2020-10-02 浙江口碑网络技术有限公司 一种对象制作系统及用于对象制作的信息处理方法
CN111797016B (zh) * 2020-06-30 2022-11-04 苏州三六零智能安全科技有限公司 应用程序的测试方法、设备、存储介质及装置
CN111797016A (zh) * 2020-06-30 2020-10-20 苏州三六零智能安全科技有限公司 应用程序的测试方法、设备、存储介质及装置
CN111797015A (zh) * 2020-06-30 2020-10-20 中国工商银行股份有限公司 一种基于动态字节码的测试方法及装置
CN111797015B (zh) * 2020-06-30 2024-02-09 中国工商银行股份有限公司 一种基于动态字节码的测试方法及装置
CN112559344A (zh) * 2020-12-10 2021-03-26 平安养老保险股份有限公司 远程mock测试方法及系统
CN113094257A (zh) * 2021-03-08 2021-07-09 上海硬通网络科技有限公司 应用测试方法、装置及电子设备
CN113094257B (zh) * 2021-03-08 2024-04-05 上海硬通网络科技有限公司 应用测试方法、装置及电子设备
CN113326184A (zh) * 2021-05-11 2021-08-31 前海飞算云智软件科技(深圳)有限公司 接口测试方法、装置、存储介质及电子设备
CN113326184B (zh) * 2021-05-11 2022-05-17 前海飞算云智软件科技(深圳)有限公司 接口测试方法、装置、存储介质及电子设备
CN114553929A (zh) * 2022-01-10 2022-05-27 多点生活(成都)科技有限公司 录制调用动态Mock的录制回放增强方法和装置
CN114553929B (zh) * 2022-01-10 2024-04-12 多点生活(成都)科技有限公司 录制调用动态Mock的录制回放增强方法和装置

Also Published As

Publication number Publication date
CN110008113B (zh) 2023-08-29

Similar Documents

Publication Publication Date Title
CN110008113A (zh) 一种测试方法、装置、电子设备
Jensen et al. Colored Petri nets: a graphical language for formal modeling and validation of concurrent systems
Marelly et al. Multiple instances and symbolic variables in executable sequence charts
US9465718B2 (en) Filter generation for load testing managed environments
Windmüller et al. Active continuous quality control
JP2007012003A (ja) フィーチャ指向ソフトウェア製品ラインの開発環境を提供するシステム
US7895575B2 (en) Apparatus and method for generating test driver
Hartman Model based test generation tools
Jasper et al. RERS 2019: combining synthesis with real-world models
Bonfiglio et al. Executable models to support automated software FMEA
Said et al. Towards Interactive Mining of Understandable State Machine Models from Embedded Software.
CN111752841A (zh) 单测模拟方法、装置、设备与计算机可读存储介质
Meinke Learning-based testing: recent progress and future prospects
US7606694B1 (en) Framework for cycle accurate simulation
CN110928536A (zh) 一种图形化编程作品在线评测装置、系统及方法
Nguyen et al. Program representations for testing wireless sensor network applications
CN113515452A (zh) 应用的自动测试方法、系统、电子设备及存储介质
Shi et al. Cross-browser compatibility testing based on model comparison
Orjala Unit testing methods for Internet of Things Mbed OS operating system
Guo et al. Model-based test generation using extended symbolic grammars
Zafar et al. Early validation and verification of a distributed role-based access control model
Lavi et al. Systems modeling & requirements specification using ECSAM: a method for embedded computer-based systems analysis
JP2882876B2 (ja) プログラム試験方法
Heine et al. D. 4.3-METHODS AND TOOLS FOR SIMULATION AND TESTING II
Mislove et al. Non-well-founded sets obtained from ideal fixed points

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
TR01 Transfer of patent right

Effective date of registration: 20230928

Address after: 22-01, 18th Floor, Building 38 Haidian Street, Haidian District, Beijing, 100089

Patentee after: BEIJING KUXUN TECHNOLOGY Co.,Ltd.

Patentee after: BEIJING SANKUAI ONLINE TECHNOLOGY Co.,Ltd.

Address before: 100083 2106-030, 9 North Fourth Ring Road, Haidian District, Beijing.

Patentee before: BEIJING SANKUAI ONLINE TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right