CN112783759B - 白盒测试任务执行方法、装置、存储介质和计算机设备 - Google Patents
白盒测试任务执行方法、装置、存储介质和计算机设备 Download PDFInfo
- Publication number
- CN112783759B CN112783759B CN201911096426.0A CN201911096426A CN112783759B CN 112783759 B CN112783759 B CN 112783759B CN 201911096426 A CN201911096426 A CN 201911096426A CN 112783759 B CN112783759 B CN 112783759B
- Authority
- CN
- China
- Prior art keywords
- tested
- class
- dynamic loading
- white
- test
- 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
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/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
Abstract
本申请涉及一种白盒测试任务执行方法、装置、计算机可读存储介质和计算机设备,方法包括:获取待测试动态加载组件以及与待测试动态加载组件对应的白盒测试任务,基于预设的模拟测试框架,确定待测试动态加载组件中的待测试类,生成与待测试类对应的模拟对象,基于模拟测试框架中的反射机制,根据模拟对象,从待测试动态加载组件中,查找与待测试类对应的方法,方法与白盒测试任务匹配,通过调用方法,执行白盒测试任务。本申请提供的方案可以确保在符合实际运行条件的情况下对组件内逻辑代码的测试,提高对动态加载组件的测试结果准确性。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种白盒测试任务执行方法、装置、计算机可读存储介质和计算机设备。
背景技术
随着计算机技术的发展,为了保证程序的质量,需要对待测程序进行白盒测试,白盒测试是指通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试。在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。
一般的安卓平台的应用程序的全部代码对测试框架可见,可以执行条件构造和结果检测等白盒测试过程,但如果应用程序中包含了动态加载的组件,则在动态加载时,无法直接调用和检验组件中的逻辑。为解决上述问题,传统的解决方法是直接对组件进行静态加载,使其代码对测试框架可见,但这种测试方式绕开了动态加载的逻辑,使得组件的运行环境与实际场景不符合,从而导致测试结果不够准确。
发明内容
基于此,有必要针对动态加载组件的测试结果准确性低的技术问题,提供一种提高测试准确性的白盒测试任务执行方法、装置、计算机可读存储介质和计算机设备。
一种白盒测试任务执行方法,包括:
获取待测试动态加载组件以及与所述待测试动态加载组件对应的白盒测试任务;
基于预设的模拟测试框架,确定所述待测试动态加载组件中的待测试类,生成与所述待测试类对应的模拟对象;
基于所述模拟测试框架中的反射机制,根据所述模拟对象,从所述待测试动态加载组件中,查找与所述待测试类对应的方法,所述方法与所述白盒测试任务匹配;
通过调用所述方法,执行所述白盒测试任务。
一种白盒测试任务执行装置,所述装置包括:
获取模块,用于获取待测试动态加载组件以及与所述待测试动态加载组件对应的白盒测试任务;
模拟对象生成模块,用于基于预设的模拟测试框架,确定所述待测试动态加载组件中的待测试类,生成与所述待测试类对应的模拟对象;
方法查找模块,用于基于所述模拟测试框架中的反射机制,根据所述模拟对象,从所述待测试动态加载组件中,查找与所述待测试类对应的方法,所述方法与所述白盒测试任务匹配;
方法调用模块,用于通过调用所述方法,执行所述白盒测试任务。
一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行以下步骤:
获取待测试动态加载组件以及与所述待测试动态加载组件对应的白盒测试任务;
基于预设的模拟测试框架,确定所述待测试动态加载组件中的待测试类,生成与所述待测试类对应的模拟对象;
基于所述模拟测试框架中的反射机制,根据所述模拟对象,从所述待测试动态加载组件中,查找与所述待测试类对应的方法,所述方法与所述白盒测试任务匹配;
通过调用所述方法,执行所述白盒测试任务。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行以下步骤。
获取待测试动态加载组件以及与所述待测试动态加载组件对应的白盒测试任务;
基于预设的模拟测试框架,确定所述待测试动态加载组件中的待测试类,生成与所述待测试类对应的模拟对象;
基于所述模拟测试框架中的反射机制,根据所述模拟对象,从所述待测试动态加载组件中,查找与所述待测试类对应的方法,所述方法与所述白盒测试任务匹配;
通过调用所述方法,执行所述白盒测试任务。
上述白盒测试任务执行方法、装置、计算机可读存储介质和计算机设备,在预设模拟测试框架的测试条件下,通过读取待测试动态加载组件的待测试类,生成与待测试类对应的模拟对象,以便通过模拟对象对动态加载组件的代码逻辑进行测试,利用反射机制从动态加载组件中读取出模拟对象对应的待测试类的方法,基于对该方法的调用,实现白盒测试任务。确保了在符合实际运行条件的情况下对组件内逻辑代码的测试,提高了对动态加载组件的测试结果准确性。
附图说明
图1为一个实施例中白盒测试任务执行方法的应用环境图;
图2为一个实施例中白盒测试任务执行方法的流程示意图;
图3为另一个实施例中白盒测试任务执行方法的流程示意图;
图4为又一个实施例中白盒测试任务执行方法的流程示意图;
图5为再一个实施例中白盒测试任务执行方法的流程示意图;
图6为一个实施例中白盒测试任务执行装置的结构框图;
图7为一个实施例中计算机设备的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
白盒测试可以通过Mockito技术来实现,Mockito是java单元测试工具,可以应用于android(安卓)平台,提供测试时必须的模拟和检验能力。白盒测试任务包括条件构造(Mockito.mock)和结果检测(Mockito.verify)。其中,白盒测试条件构造是指通过一定的技术手段,在测试用例执行时构造条件,例如指定某些方法返回值等,使得测试能覆盖预期场景。白盒测试结果检验是指在测试代码执行过程中,记录某些函数的调用情况,例如调用次数,顺序,参数等信息,用于检查执行过程是否符合设计预期。在Instrumentation Test框架下,一般的android App(应用程序)工程全部代码对测试框架可见,可以方便的执行白盒测试。
如果App中包含了动态加载的组件,则组件中的类对测试框架不可见,无法直接调用和检验组件中的逻辑。可以考虑的第一种处理方式,是直接静态加载组件,这样便可以达到与一般App类似的效果,使其代码对测试框架可见,但这种测试方式绕开了动态加载的逻辑,脱离了组件的实际执行场景,使得组件的运行环境与实际场景不符合。可以考虑的第二种处理方式是通过PowerMockito技术来实现,PowerMockito可以支持使用字符串形式进行模拟和检验,不需要代码直接可见,可以在动态加载的组件上使用。这样即使方法对测试框架不可见,也能够进行模拟和检验。但PowerMockito在实现上基于JVM虚拟机,无法应用在android平台。
为了各种需要动态加载的android组件,能够实现白盒测试,提供了一种白盒测试任务执行方法。图1为一个实施例中白盒测试任务执行方法的应用环境图。参照图1,该白盒测试任务执行方法应用于安卓平台的白盒测试系统。该白盒测试系统包括终端110和服务器120。终端110和服务器120通过网络连接。当测试人员需要对动态加载组件进行测试时,通过终端110通过发送测试指令给服务器120,服务器120获取待测试动态加载组件以及与待测试动态加载组件对应的白盒测试任务;基于预设的模拟测试框架,确定待测试动态加载组件中的待测试类,生成与待测试类对应的模拟对象,基于模拟测试框架中的反射机制,根据模拟对象,从待测试动态加载组件中,查找与待测试类对应的方法,方法与白盒测试任务匹配,通过调用方法,执行白盒测试任务,最后反馈执行结果至终端110。终端110具体可以是台式终端或移动终端,移动终端具体可以是手机、平板电脑、笔记本电脑等中的至少一种。服务器120可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
如图2所示,在一个实施例中,提供了一种白盒测试任务执行方法。本实施例主要以该方法应用于上述图1中的服务器120来举例说明。参照图2,该白盒测试任务执行方法具体包括步骤S210至S240。
S210,获取待测试动态加载组件以及与待测试动态加载组件对应的白盒测试任务。
动态加载组件与静态加载组件是一组相对概念,编译时加载的组件是静态加载组件,运行时加载的组件是动态加载组件。例如VirtualApk,VirtualApp,Atlas等插件化框架,均能实现动态加载技术,被用来加载的组件即为待测试动态加载组件。
当组件被静态加载时,其组件内部代码逻辑对测试框架是可见的,可以通过Mockito创建模拟对象,对组件中的类进行调用,检验组件中的逻辑。当组件被动态加载时,组件中的类对测试框架不可见,无法直接调用也无法直接进行逻辑检验。
白盒测试任务包括白盒测试条件构造、白盒测试执行和白盒测试结果检验。白盒测试执行可以基于构建的测试条件,以模拟对象为测试对象,对组件中的逻辑进行测试。一般来说,静态加载组件和动态加载组件的测试执行过程是相同的,都是在成功调用到组件中的方法之后,通过执行方法对应的逻辑代码,得到返回结果,完成测试。其区别在于,动态加载组件的白盒测试条件构造与白盒测试结果检验过程,无法通过静态加载组件测试过程的相同方法来实现。
S220,基于预设的模拟测试框架,确定待测试动态加载组件中的待测试类,生成与待测试类对应的模拟对象。
预设的模拟测试框架是指Android平台的Instrumentation Test框架。在此条件下,由于Android没有使用JVM(Java Virtual Machine,Java虚拟机)虚拟机,无法利用PowerMockito可以使用字符串形式进行模拟和检验的功能,直接对动态组件进行白盒测试。由于动态加载组件中的类对测试框架是不可见的,首先需要将动态加载组件中的类读取出来,这可以通过两种方式来实现:第一种是使用ClassLoader(类加载器)获取指定名称的类。第二种是获取组件中的对象,然后基于对象来得到对应的类。
使用mockito,可以基于组件中的类的信息,模拟出组件中的mock对象,即为模拟对象。Mock对象可以用于实现mock测试,mock测试是指在测试过程中,对于某些不容易构造或者或不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。虚拟的对象就是mock对象。mock对象是动态加载组件中的真实对象在测试期间的代替品。
S230,基于模拟测试框架中的反射机制,根据模拟对象,从待测试动态加载组件中,查找与待测试类对应的方法,方法与白盒测试任务匹配。
反射机制也可以称为JAVA反射机制,JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,这种动态获取信息以及动态调用对象方法的功能称为JAVA语言的反射机制。在一个实施例中,反射机制终于从动态加载组件中查找到模拟对象所对应的类的共有方法,该共有方法的类别可以基于白盒测试任务来进行确定。例如在条件构造任务中,可以设置该方法为size(获取元素数量)方法。再例如,在结果检测过程中,可以设置该方法为add(新增元素)方法。
S240,通过调用方法,执行白盒测试任务。
白盒测试任务包括白盒测试条件构造任务和白盒测试结果检验任务。根据查找到的与白盒测试任务对应的方法,通过调用该方法来执行白盒测试任务。例如,通过构造中间结果来查找size方法,构造出测试条件,再通过调用size方法来执行条件构造任务。再例如,通过调用add方法再基于传入add方法的中间参数进行参数捕获,来确定该方法的调用次数,从而实现结果检测。
上述白盒测试任务执行方法,在预设模拟测试框架的测试条件下,通过读取待测试动态加载组件的待测试类,生成与待测试类对应的模拟对象,以便通过模拟对象对动态加载组件的代码逻辑进行测试,利用反射机制从动态加载组件中读取出模拟对象对应的待测试类的方法,基于对该方法的调用,实现白盒测试任务。无需对动态组件进行静态加载来执行白盒测试任务,确保了在符合实际运行条件的情况下对组件内逻辑代码的测试,提高了对动态加载组件的测试结果准确性。
当白盒测试任务为白盒测试条件构造任务时,相较于静态加载组件中可以根据可视代码直接调用mock对象的方法的方式,动态加载组件需要基于中间结果与反射机制,来获取得到与白盒测试条件构造任务对应的方法。
具体来说,对于静态加载组件,在进行测试条件构造时,可以通过mockito创建一个模拟对象,直接设置调用方法时的返回值,从而得到白盒测试的测试条件,在测试执行过程中,根据返回值,可以确定该方法在测试过程中是否被调用,判断测试是否覆盖预期场景。例如:
List mockedList=mock(List.class);
when(mockedList.size()).thenReturn(5);
List是java标准库中的类,这里mock/when/thenReturn均为mockito中的静态方法,通过mockito创建了一个模拟对象,可以直接设置其size方法返回值为5,构建白盒测试的测试条件。
对于动态加载组件,如图3所示,在一个实施例中,基于模拟测试框架中的反射机制,根据模拟对象,从待测试动态加载组件中,查找与待测试类对应的方法包括步骤S310至S330。
S310,根据白盒测试条件构造任务,确定用于构造测试条件的方法名称、以及方法名称对应方法被调用时的返回值。
S320,获取以模拟对象和返回值为参数的中间结果,将中间结果缓存至预设对象。
S330,基于模拟测试框架中的反射机制,根据预设对象和方法名称,从待测试动态加载组件中,查找与方法名称对应的方法,构造包含方法和返回值的测试条件。
例如,为构建与上述静态加载组件相同的测试条件,首先,需要确定用于构造测试条件的方法名称为size方法,以及该方法被调用时的返回值为5。然而,在测试条件的构建过程中,由于动态加载组件的类不可见,when()方法无法直接传入待测试类的size方法,则不能按上述语法进行调用。
假设MList是动态加载组件中的自定义类型,也有size方法,在创建得到MList类的mock对象以后,将mock对象作为when()方法的参数,通过调用when()方法,将when()方法返回的中间结果保存至预设对象,然后通过反射机制从待测试的动态加载组件中获取该预设对象的size方法。
在其中一个实施例中,基于模拟测试框架中的反射机制,根据预设对象和方法名称,从待测试动态加载组件中,查找与方法名称对应的方法包括:基于模拟测试框架中的反射机制,根据预设对象,从待测试动态加载组件中,查找与预设对象对应的类;确定类中与方法名称对应的方法。
在查找用于构造测试条件的方法的过程中,由于不能直接将size方法作为when()方法的参数进行查找实现调用。通过借助预设对象这一中间结果,来从待测试的动态加载组件中查找到用于构造测试条件的方法。在查找的过程中,通过反射机制,首先需要获取预设对象在待测试的动态加载组件中的类,然后基于预先确定的用于构造测试条件的方法的名称,从待测试的动态加载组件中该类中查找得到具有该名称的方法。
在一个实施例中,假设listObj是从动态加载组件MList中获取的MList类型对象,通过以下示意代码,简单描述执行白盒测试条件构造任务的处理过程。
Class mListClass=mListObj.getClass();
Object mockedMList=mock(mListClass);
Object whenSize=doReturn(5).when(mockedMList);
Method sizeMethod=whenSize.getClass().getMethod(“size”);
sizeMethod.invoke();
首先,根据获取到的对象名称mListObj,从动态加载组件中获取到该对象对应的类,将其定义为mListClass的类对象,然后基于mListClass这一类对象,使用功能mockito构建一个模拟对象mockedMList。将mockedMList作为when()方法的参数,并缓存中间结果至Object对象,然后基于Object对象从动态加载组件中查找到size方法。其中,类一般对应多个方法,需要通过定义要查找的方法名称,该方法可以基于白盒测试条件构造任务来确定,从而实现方法的针对性查找。例如,上述size方法的是基于白盒测试条件构造任务来确定的,在其他实施例中,也可以是其他方法,在此不作限定。通过将中间结果作为方法的查找基础,解决了无法直接根据方法名称来查找该方法的弊端,解决了动态加载组件中的方法查找问题。
如图4所示,在一个实施例中,白盒测试任务包括白盒测试结果检验任务,方法包括函数调用记录方法。在通过调用方法,执行白盒测试任务之前,还包括步骤S410。
S410,执行对模拟对象进行测试的预设测试代码。
通过调用方法,执行白盒测试任务包括步骤S420至S430。
S420,调用函数调用记录方法,捕获在执行预设测试代码的过程中传入所述函数调用记录方法的参数。
S430,根据捕获的参数,检验函数调用记录方法对应函数的调用结果。
函数调用记录方法用于记录函数的调用次数、调用顺序以及调用参数等,以add方法是一种调用次数检测方法,以其作为函数调用记录方法为例。在静态加载组件测试结果检验过程中,可以根据组件中对测试框架可见的类,基于该类的信息生成模拟对象,在测试代码对模拟对象进行测试的代码执行过程中,通过捕获代码执行时调用某个验证对象如某函数时,传入add方法的参数,验证该函数的调用次数。例如:
List mockedList=mock(List.class);
mockedList.add("one");
verify(mockedList).add("one");
上面的代码片段展示了mockito进行验证的操作,确认mockedList的add方法是否有被调用。
在动态加载组件中待验证的函数,不能直接获取到传入add方法中的参数,为解决这一问题,实现与静态组件加载时,检验List.add类似的效果。通过构造中间参数,将中间参数和验证对象一起作为参数传入add方法,通过对中间参数进行捕获,确定验证对象在对模拟对象执行测试代码过程中,该验证对象的被调用次数。利用中间参数作为参数捕获对象,解决了动态加载组件无法直接捕获到验证对象被调用是传入至add方法的数据的问题。
在其中一个实施例中,在需要进行调用次数检测时,调用所述函数调用记录方法,捕获在执行预设测试代码的过程中传入函数调用记录方法的参数包括:根据函数调用记录方法对应函数,确定参数捕获对象;将参数捕获对象作为参数传入调用次数检测方法,调用该调用次数检测方法,捕获在执行预设测试代码的过程中传入的参数。
在一个实施例中,通过以下示意代码,简单描述执行白盒测试结果检验任务的处理过程。
Class mListClass=mListObj.getClass();
Object mockedMList=mock(mListClass);
//这里对mockedMList对象执行测试代码,省略。
Class mockedMlistClass=mockedMList.getClass();
Method method=mockedMlistClass.getMethod(“add”,new Class[]{String.class});
ArgumentCaptor<String>captor=ArgumentCaptor.forClass(String.class);
Method.invoke(verify(mockedMList),atMost(Integer.MAX_VALUE),newObject[]{captor.capture()});
List<String>paramList=captor.getAllValues();
for(String param:paramList){
Assert.assertEqual(“one”,param);
}
在执行测试代码之前,与条件构造过程类似,需要构建模拟对象。再具体的实施例中,如上述代码所示,根据获取到的对象名称mListObj,从动态加载组件中获取到该对象对应的类,将其定义为mListClass的类对象,然后基于mListClass这一类对象,使用功能mockito构建一个模拟对象mockedMList。模拟对象与动态加载组件中的对象属于相同的类,其区别在于,动态加载组件中的对象是基于实际情况得到的,模拟对象是基于该类的信息通过模拟条件得到的。在完成条件构造以后,对mockedMList对象即模拟对象执行测试代码,在代码执行过程中,需要验证代码中的函数有没有被正确调用,例如,调用次数、调用顺序、调用参数等。不同的验证可以用到不同的函数调用记录方法,例如,记录函数调用次数可以通过add方法来进行检测。
通过获取模拟对象在动态加载组件中的类的信息,基于反射机制,根据类的信息,从该类的共有方法中查找add方法,由于在动态加载组件中,无法直接获取到传入add方法的验证对象,通过新增一个中间参数,将该中间参数作为参数捕获对象,将验证对象和该参数捕获对象一起作为参数传入反射得到的add方法,然后通过mockito中的ArgumentCaptor(参数捕获器)对参数捕获对象进行捕获,最后通过参数捕获对象的捕获结果对方法的调用情况进行检验。
由于动态加载组件中的类对测试框架不可见,对于测试人员来说,无法直接确定待测试的类。
在一个实施例中,基于预设的模拟测试框架,确定待测试动态加载组件中的待测试类包括:获取预设的类名称;基于预设的模拟测试框架中的类加载器,从待测试动态加载组件中获取与类名称对应的待测试类。
动态加载组件中的类名称不可见,但测试人员可以通过定义类名称,用模拟测试框架中的类加载器从动态加载组件中的加载该类。ClassLoader即类加载器,ClassLoader对象都是一个java.lang.ClassLoader的实例。每个Class对象都被这些ClassLoader对象所加载,通过继承java.lang.ClassLoader可以扩展出自定义ClassLoader,并使用这些自定义的ClassLoader对类进行加载。
在另一个实施例中,基于预设的模拟测试框架,确定待测试动态加载组件中的待测试类包括:基于预设的模拟测试框架,获取待测试动态加载组件中的对象;根据对象对应的类型,确定待测试类。
动态加载组件中的类和方法对测试框架不可见,但可以通过现有的数据处理方式,从动态加载组件中直接获取到对象名称,然后根据对象名称和getClass()方法,确定出该对象在动态加载组件中的类,将该类最为待测试类。
图5为一个实施例中白盒测试任务执行方法的流程示意图。应该理解的是,虽然图5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
如图5所示,在一个实施例中,提供了一种白盒测试任务执行方法,方法包括步骤S502至S528。
S502,获取待测试动态加载组件以及与待测试动态加载组件对应的白盒测试任务。
S504,基于预设的模拟测试框架,获取待测试动态加载组件中的对象,根据对象对应的类型,确定待测试类。
S506,生成与待测试类对应的模拟对象,当白盒测试任务为白盒测试条件构造任务时,跳转至步骤S508,当白盒测试任务为白盒测试结果检验任务时,跳转至步骤S520。
S508,根据白盒测试条件构造任务,确定用于构造测试条件的方法名称、以及方法名称对应方法被调用时的返回值。
S510,获取以模拟对象和返回值为参数的中间结果,将中间结果缓存至预设对象。
S512,基于模拟测试框架中的反射机制,根据预设对象,从待测试动态加载组件中,查找与预设对象对应的类。
S514,确定类中与方法名称对应的方法。
S516,构造包含方法和返回值的测试条件。
S518,通过调用方法,执行白盒测试条件构造任务。
S520,执行对模拟对象进行测试的预设测试代码。
S522,当方法为函数调用记录方法时,基于反射机制,根据模拟对象,从待测试动态加载组件中,查找与待测试类对应的函数调用记录方法。
S524,根据函数调用记录方法对应函数,确定参数捕获对象。
S526,将参数捕获对象作为参数传入调用次数检测方法,调用该调用次数检测方法,捕获在执行预设测试代码的过程中传入的参数。
S528,根据捕获的参数,检验函数调用记录方法对应函数的调用结果。
在预设模拟测试框架的测试条件下,获取待测试动态加载组件中的对象,根据对象对应的类型,确定待测试类,解决了无法直接从动态加载组件中获取到待测试类的问题,使用mockito,生成与待测试类对应的模拟对象,以便通过模拟对象对动态加载组件的代码逻辑进行测试,利用反射机制和中间结果从动态加载组件中读取出模拟对象对应的待测试类的方法,基于对该方法的调用,实现白盒测试任务。采用反射和中间结果来实现方法的调用或方法中的参数的捕获,确保了在符合实际运行条件的情况下对组件内逻辑代码的测试,提高了对动态加载组件的测试结果准确性。
如图6所示,提供了一种白盒测试任务执行装置600,装置包括获取模块610、模拟对象生成模块620、方法查找模块630以及方法调用模块640。
获取模块610,用于获取待测试动态加载组件以及与待测试动态加载组件对应的白盒测试任务。
模拟对象生成模块620,用于基于预设的模拟测试框架,确定待测试动态加载组件中的待测试类,生成与待测试类对应的模拟对象。
方法查找模块630,用于基于模拟测试框架中的反射机制,根据模拟对象,从待测试动态加载组件中,查找与待测试类对应的方法,方法与白盒测试任务匹配。
方法调用模块640,用于通过调用方法,执行白盒测试任务。
上述白盒测试任务执行装置在预设模拟测试框架的测试条件下,通过读取待测试动态加载组件的待测试类,生成与待测试类对应的模拟对象,以便通过模拟对象对动态加载组件的代码逻辑进行测试,利用反射机制从动态加载组件中读取出模拟对象对应的待测试类的方法,基于对该方法的调用,实现白盒测试任务。确保了在符合实际运行条件的情况下对组件内逻辑代码的测试,提高了对动态加载组件的测试结果准确性。
在一个实施例中,白盒测试任务包括白盒测试条件构造任务;方法查找模块包括:信息确定单元、中间结果处理单元以及查找单元。
确定单元,用于根据白盒测试条件构造任务,确定用于构造测试条件的方法名称、以及方法名称对应方法被调用时的返回值。
中间结果处理单元,用于获取以模拟对象和返回值为参数的中间结果,将中间结果缓存至预设对象。
查找单元,用于基于模拟测试框架中的反射机制,根据预设对象和方法名称,从待测试动态加载组件中,查找与方法名称对应的方法,构造包含方法和返回值的测试条件。
在一个实施例中,查找单元还用于基于模拟测试框架中的反射机制,根据预设对象,从待测试动态加载组件中,查找与预设对象对应的类;确定类中与方法名称对应的方法。
在一个实施例中,白盒测试任务包括白盒测试结果检验任务,方法包括函数调用记录方法。白盒测试任务执行装置还包括测试代码执行模块,测试代码执行模块用于执行对模拟对象进行测试的预设测试代码。
方法调用模块包括:参数捕获单元和结果检测单元。
参数捕获单元,用于调用函数调用记录方法,捕获在执行预设测试代码的过程中传入函数调用记录方法的参数。
结果检测单元,用于根据捕获的参数,检验函数调用记录方法对应函数的调用结果。
在一个实施例中,参数捕获单元用于根据函数调用记录方法对应函数,确定参数捕获对象;将参数捕获对象作为参数传入调用次数检测方法,调用所述函数调用记录方法,捕获在执行预设测试代码的过程中传入的参数。
在一个实施例中,模拟对象生成模块包括待测试确定单元,待测试确定单元用于获取预设的类名称;基于预设的模拟测试框架中的类加载器,从待测试动态加载组件中获取与类名称对应的待测试类。
在一个实施例中,待测试确定单元还用于基于预设的模拟测试框架,获取待测试动态加载组件中的对象;根据对象对应的类型,确定待测试类。
图7示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的服务器120。如图7所示,该计算机设备包括该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现白盒测试任务执行方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行白盒测试任务执行方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,本申请提供的白盒测试任务执行装置可以实现为一种计算机程序的形式,计算机程序可在如图7所示的计算机设备上运行。计算机设备的存储器中可存储组成该白盒测试任务执行装置的各个程序模块,比如,图6所示的获取模块610、模拟对象生成模块620、方法查找模块630以及方法调用模块640。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的白盒测试任务执行方法中的步骤。
例如,图7所示的计算机设备可以通过如图6所示的白盒测试任务执行装置中的获取模块610执行获取待测试动态加载组件以及与待测试动态加载组件对应的白盒测试任务。计算机设备可通过模拟对象生成模块620执行基于预设的模拟测试框架,确定待测试动态加载组件中的待测试类,生成与待测试类对应的模拟对象。计算机设备可通过方法查找模块630执行基于模拟测试框架中的反射机制,根据模拟对象,从待测试动态加载组件中,查找与待测试类对应的方法,方法与白盒测试任务匹配。计算机设备可通过方法调用模块640执行通过调用方法,执行白盒测试任务。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述白盒测试任务执行方法的步骤。此处白盒测试任务执行方法的步骤可以是上述各个实施例的白盒测试任务执行方法中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述白盒测试任务执行方法的步骤。此处白盒测试任务执行方法的步骤可以是上述各个实施例的白盒测试任务执行方法中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种白盒测试任务执行方法,包括:
获取待测试动态加载组件以及与所述待测试动态加载组件对应的白盒测试任务;
基于预设的模拟测试框架,确定所述待测试动态加载组件中的待测试类,生成与所述待测试类对应的模拟对象;
基于所述模拟测试框架中的反射机制,根据所述模拟对象,从所述待测试动态加载组件中,查找与所述待测试类对应的方法,所述方法与所述白盒测试任务匹配;
通过调用所述方法,执行所述白盒测试任务。
2.根据权利要求1所述的方法,其特征在于,所述白盒测试任务包括白盒测试条件构造任务;
所述基于所述模拟测试框架中的反射机制,根据所述模拟对象,从所述待测试动态加载组件中,查找与所述待测试类对应的方法包括:
根据所述白盒测试条件构造任务,确定用于构造测试条件的方法名称、以及所述方法名称对应方法被调用时的返回值;
获取以所述模拟对象和所述返回值为参数的中间结果,将所述中间结果缓存至预设对象;
基于所述模拟测试框架中的反射机制,根据所述预设对象和所述方法名称,从所述待测试动态加载组件中,查找与所述方法名称对应的方法,构造包含所述方法和所述返回值的测试条件。
3.根据权利要求2所述的方法,其特征在于,所述基于所述模拟测试框架中的反射机制,根据所述预设对象和所述方法名称,从所述待测试动态加载组件中,查找与所述方法名称对应的方法包括:
基于所述模拟测试框架中的反射机制,根据所述预设对象,从所述待测试动态加载组件中,查找与所述预设对象对应的类;
确定所述类中与所述方法名称对应的方法。
4.根据权利要求1所述的方法,其特征在于,所述白盒测试任务包括白盒测试结果检验任务,所述方法包括函数调用记录方法;
在所述通过调用所述方法,执行所述白盒测试任务之前,还包括:
执行对所述模拟对象进行测试的预设测试代码;
所述通过调用所述方法,执行所述白盒测试任务包括:
调用所述函数调用记录方法,捕获在执行预设测试代码的过程中传入所述函数调用记录方法的参数;
根据捕获的所述参数,检验所述函数调用记录方法对应函数的调用结果。
5.根据权利要求4所述的方法,其特征在于,所述调用所述函数调用记录方法,捕获在执行预设测试代码的过程中传入所述函数调用记录方法的参数包括:
根据所述函数调用记录方法对应函数,确定参数捕获对象;
将所述参数捕获对象作为参数传入调用次数检测方法,调用所述调用次数检测方法,捕获在执行预设测试代码的过程中传入的参数。
6.根据权利要求1所述的方法,其特征在于,所述基于预设的模拟测试框架,确定所述待测试动态加载组件中的待测试类包括:
获取预设的类名称;
基于所述预设的模拟测试框架中的类加载器,从待测试动态加载组件中获取与所述类名称对应的待测试类。
7.根据权利要求1所述的方法,其特征在于,所述基于预设的模拟测试框架,确定所述待测试动态加载组件中的待测试类包括:
基于预设的模拟测试框架,获取待测试动态加载组件中的对象;
根据所述对象对应的类型,确定待测试类。
8.一种白盒测试任务执行装置,其特征在于,所述装置包括:
获取模块,用于获取待测试动态加载组件以及与所述待测试动态加载组件对应的白盒测试任务;
模拟对象生成模块,用于基于预设的模拟测试框架,确定所述待测试动态加载组件中的待测试类,生成与所述待测试类对应的模拟对象;
方法查找模块,用于基于所述模拟测试框架中的反射机制,根据所述模拟对象,从所述待测试动态加载组件中,查找与所述待测试类对应的方法,所述方法与所述白盒测试任务匹配;
方法调用模块,用于通过调用所述方法,执行所述白盒测试任务。
9.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如权利要求1至7中任一项所述方法的步骤。
10.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1至7中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911096426.0A CN112783759B (zh) | 2019-11-11 | 2019-11-11 | 白盒测试任务执行方法、装置、存储介质和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911096426.0A CN112783759B (zh) | 2019-11-11 | 2019-11-11 | 白盒测试任务执行方法、装置、存储介质和计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112783759A CN112783759A (zh) | 2021-05-11 |
CN112783759B true CN112783759B (zh) | 2023-10-03 |
Family
ID=75749282
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911096426.0A Active CN112783759B (zh) | 2019-11-11 | 2019-11-11 | 白盒测试任务执行方法、装置、存储介质和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112783759B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102855177A (zh) * | 2011-06-30 | 2013-01-02 | 阿里巴巴集团控股有限公司 | 一种单元测试的方法和装置 |
WO2016201995A1 (zh) * | 2015-06-16 | 2016-12-22 | 中兴通讯股份有限公司 | 实现构建测试对象的方法、装置及业务配置测试的装置 |
CN108563579A (zh) * | 2018-04-23 | 2018-09-21 | 苏州科达科技股份有限公司 | 白盒测试方法、装置、系统及存储介质 |
-
2019
- 2019-11-11 CN CN201911096426.0A patent/CN112783759B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102855177A (zh) * | 2011-06-30 | 2013-01-02 | 阿里巴巴集团控股有限公司 | 一种单元测试的方法和装置 |
WO2016201995A1 (zh) * | 2015-06-16 | 2016-12-22 | 中兴通讯股份有限公司 | 实现构建测试对象的方法、装置及业务配置测试的装置 |
CN108563579A (zh) * | 2018-04-23 | 2018-09-21 | 苏州科达科技股份有限公司 | 白盒测试方法、装置、系统及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112783759A (zh) | 2021-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8627296B1 (en) | Unified unit and integration test with automatic mock creation | |
US9213625B1 (en) | Method and apparatus for performing automated user-interface layout testing | |
CN107729246B (zh) | 针对目标应用的辅助测试方法、装置、设备及存储介质 | |
US10353809B2 (en) | System and method for executing integration tests in multiuser environment | |
CN106326120B (zh) | 一种应用软件的回归测试方法及装置、电子设备 | |
CN110879781B (zh) | 程序调试方法、装置、电子设备及计算机可读存储介质 | |
US10209984B2 (en) | Identifying a defect density | |
US9405906B1 (en) | System and method for enhancing static analysis of software applications | |
CN110032505B (zh) | 软件质量确定装置和方法以及非暂态计算机可读介质 | |
US10229273B2 (en) | Identifying components for static analysis of software applications | |
CN103186463B (zh) | 确定软件的测试范围的方法和系统 | |
JP2018156294A (ja) | ソフトウェア検証装置およびソフトウェア検証プログラム | |
CN108399125B (zh) | 自动化测试方法、装置、计算机设备和存储介质 | |
JPH10320234A (ja) | ソフトウェアの自動テスト方法 | |
CN110232018A (zh) | 接口测试方法、装置、计算机设备 | |
US20160239407A1 (en) | Small scale integration test generation | |
CN112783759B (zh) | 白盒测试任务执行方法、装置、存储介质和计算机设备 | |
CN110908882A (zh) | 一种应用程序的性能分析方法、装置、终端设备及介质 | |
US9436587B2 (en) | Test context generation | |
CN115391230A (zh) | 一种测试脚本生成、渗透测试方法、装置、设备及介质 | |
CN112511497A (zh) | 模拟攻击场景记录方法、装置和电子设备 | |
CN115982018B (zh) | 一种基于ocr的ui测试方法、系统、计算机设备和存储介质 | |
CN112527265A (zh) | 一种日志自动注入的方法和计算机设备 | |
CN112580282B (zh) | 用于集成电路设计验证的方法、装置、设备以及存储介质 | |
CN111367787B (zh) | 应用中的页面脚本对象泄漏的检查方法及装置 |
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 |