CN110532185B - 测试方法、装置、电子设备和计算机可读存储介质 - Google Patents
测试方法、装置、电子设备和计算机可读存储介质 Download PDFInfo
- Publication number
- CN110532185B CN110532185B CN201910811371.0A CN201910811371A CN110532185B CN 110532185 B CN110532185 B CN 110532185B CN 201910811371 A CN201910811371 A CN 201910811371A CN 110532185 B CN110532185 B CN 110532185B
- Authority
- CN
- China
- Prior art keywords
- test
- program
- source code
- target
- code
- 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/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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本公开提供了一种测试方法,包括:对目标被测程序的源代码进行分析,确定源代码的程序逻辑和源代码中的程序变量的属性;根据源代码的程序逻辑和源代码中的程序变量的属性生成测试代码和测试程序逻辑断言;获取用于目标被测程序的测试数据文件;以及基于测试数据文件执行测试代码和测试程序逻辑断言,以便对目标被测程序进行测试。本公开还提供了一种测试装置、一种电子设备和一种计算机可读存储介质。
Description
技术领域
本公开涉及计算机技术领域,更具体地,涉及一种测试方法、一种测试装置、一种电子设备和一种计算机可读存储介质。
背景技术
目前,单元测试生成工具一般仅支持JAVA类型,对于Web框架模型而言,通常采用手工编写测试案例的方式对Web框架模型的程序进行单元测试。然而,手工编写测试案例会增加输入错误的风险,增加开发人员单元测试的编码量。因此,在相关技术中,至少对于Web框架模型的程序而言,手工编写单元测试的测试案例的方式存在测试效率低的问题。
发明内容
有鉴于此,本公开提供了一种测试方法、一种测试装置、一种电子设备和一种计算机可读存储介质。
本公开的一个方面提供了一种测试方法,包括:对目标被测程序的源代码进行分析,确定上述源代码的程序逻辑和上述源代码中的程序变量的属性;根据上述源代码的程序逻辑和上述源代码中的程序变量的属性生成测试代码和测试程序逻辑断言;获取用于上述目标被测程序的测试数据文件;以及基于上述测试数据文件执行上述测试代码和测试程序逻辑断言,以便对上述目标被测程序进行测试。
根据本公开的实施例,根据上述源代码的程序逻辑和上述源代码中的程序变量的属性生成测试代码和测试程序逻辑断言包括:根据上述源代码的程序逻辑获取上述源代码中的正常分支流程、异常分支流程、以及程序返回值的类型和内容;根据上述源代码中的正常分支流程调用固定逻辑模板,以生成固定逻辑分支测试代码;根据上述源代码中的异常分支流程调用异常流程模板,以生成异常分支测试代码;以及根据上述源代码中的程序返回值的类型和内容生成上述测试程序逻辑断言。
根据本公开的实施例,基于上述测试数据文件执行上述测试代码和测试程序逻辑断言,以便对上述目标被测程序进行测试包括:根据上述目标被测程序的源代码的类型确定目标测试框架;以及基于上述目标测试框架和上述测试数据文件执行上述测试代码和测试程序逻辑断言。
根据本公开的实施例,基于上述目标测试框架和上述测试数据文件执行上述测试代码和测试程序逻辑断言包括:根据上述目标测试框架的类型确定是否需要调用框架接口;以及响应于需要调用上述框架接口,通过调用上述框架接口获取上述目标测试框架的内容,以便基于上述目标测试框架的内容和上述测试数据文件执行上述测试代码和测试程序逻辑断言。
根据本公开的实施例,根据上述目标测试框架的类型确定是否需要调用框架接口包括:根据上述目标测试框架的类型判断用于执行上述测试代码和测试程序逻辑断言的框架执行器是否支持上述目标测试框架,以确定是否需要调用上述框架接口。
本公开的另一方面提供了一种测试装置,包括:确定模块,用于对目标被测程序的源代码进行分析,确定上述源代码的程序逻辑和上述源代码中的程序变量的属性;生成模块,用于根据上述源代码的程序逻辑和上述源代码中的程序变量的属性生成测试代码和测试程序逻辑断言;获取模块,用于获取用于上述目标被测程序的测试数据文件;以及执行模块,用于基于上述测试数据文件执行上述测试代码和测试程序逻辑断言,以便对上述目标被测程序进行测试。
根据本公开的实施例,上述生成模块包括:获取单元,用于根据上述源代码的程序逻辑获取上述源代码中的正常分支流程、异常分支流程、以及程序返回值的类型和内容;第一生成单元,用于根据上述源代码中的正常分支流程调用固定逻辑模板,以生成固定逻辑分支测试代码;第二生成单元,用于根据上述源代码中的异常分支流程调用异常流程模板,以生成异常分支测试代码;以及第三生成单元,用于根据上述源代码中的程序返回值的类型和内容生成上述测试程序逻辑断言。
根据本公开的实施例,上述执行模块包括:确定单元,用于根据上述目标被测程序的源代码的类型确定目标测试框架;以及执行单元,用于基于上述目标测试框架和上述测试数据文件执行上述测试代码和测试程序逻辑断言。
根据本公开的实施例,上述执行单元包括:确定子单元,用于根据上述目标测试框架的类型确定是否需要调用框架接口;以及调用子单元,用于响应于需要调用上述框架接口,通过调用上述框架接口获取上述目标测试框架的内容,以便基于上述目标测试框架的内容和上述测试数据文件执行上述测试代码和测试程序逻辑断言。
根据本公开的实施例,上述确定子单元用于根据上述目标测试框架的类型判断上述测试装置是否支持上述目标测试框架,以确定是否需要调用上述框架接口。
本公开的另一方面提供了一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个指令,其中,当上述一个或多个指令被上述一个或多个处理器执行时,使得上述一个或多个处理器实现如上所述的方法。
本公开的另一方面提供了一种计算机可读存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
本公开的另一方面提供了一种计算机程序,所述计算机程序包括计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
根据本公开的实施例,通过对目标被测程序的源代码进行分析,确定源代码的程序逻辑和源代码中的程序变量的属性;根据源代码的程序逻辑和源代码中的程序变量的属性生成测试代码和测试程序逻辑断言;获取用于目标被测程序的测试数据文件;基于测试数据文件执行测试代码和测试程序逻辑断言,以便对目标被测程序进行测试。由于可以自动生成测试代码和测试程序逻辑断言,使得降低了输入错误的风险,降低了开发人员单元测试的编码量;同时,可以将测试数据与测试代码和测试程序逻辑断言分离,减少了数据的依赖性,能够在保证代码覆盖率的前提下提高测试人员的开发效率,所以至少部分地克服了相关技术中,至少对于Web框架模型的程序而言,手工编写单元测试的测试案例的方式存在测试效率低的技术问题,进而达到了测试效率的技术效果。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的可以应用测试方法及测试装置的示例性应用场景;
图2示意性示出了根据本公开实施例的测试方法的流程图;
图3示意性示出了根据本公开实施例的根据源代码的程序逻辑和源代码中的程序变量的属性生成测试代码和测试程序逻辑断言的流程图;
图4示意性示出了根据本公开实施例的基于测试数据文件执行测试代码和测试程序逻辑断言,以便对目标被测程序进行测试的流程图;
图5示意性示出了根据本公开实施例的基于目标测试框架和测试数据文件执行测试代码和测试程序逻辑断言的流程图;
图6示意性示出了根据本公开实施例的测试装置的框图;以及
图7示意性示出了根据本公开实施例的适于实现上文描述的方法的电子设备的框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
本公开的实施例提供了一种测试方法、一种测试装置、一种电子设备和一种计算机可读存储介质。该测试方法包括:对目标被测程序的源代码进行分析,确定源代码的程序逻辑和源代码中的程序变量的属性;根据源代码的程序逻辑和源代码中的程序变量的属性生成测试代码和测试程序逻辑断言;获取用于目标被测程序的测试数据文件;以及基于测试数据文件执行测试代码和测试程序逻辑断言,以便对目标被测程序进行测试。
图1示意性示出了根据本公开实施例的可以应用测试方法及测试装置的示例性应用场景。需要注意的是,图1所示仅为可以应用本公开实施例的应用场景的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
如图1所示,根据该实施例的单元测试工具100可以包括分析器110、生成器120和执行器130。
单元测试工具100可以从外部获取目标被测程序的源代码,然后通过分析器110对目标被测程序的源代码进行分析,确定源代码的程序逻辑和源代码中的程序变量的属性。
分析器110可以将分析结果传输给生成器120,生成器120可以根据分析结果生成测试代码和测试程序逻辑断言。
在需要执行测试代码和测试程序逻辑断言之前,单元测试工具100可以从外部获取用于测试目标被测程序的源代码的测试数据文件。生成器120可以将测试代码和测试程序逻辑断言,以及获取的测试数据文件传输给执行器130,由执行器130执行测试代码和测试程序逻辑断言。
根据本公开的实施例,单元测试工具100可以设置在终端设备中,终端设备可以是各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
图2示意性示出了根据本公开实施例的测试方法的流程图。
如图2所示,该方法包括操作S210~S240。
在操作S210,对目标被测程序的源代码进行分析,确定源代码的程序逻辑和源代码中的程序变量的属性。
根据本公开的实施例,确定源代码的程序逻辑可以是根据源代码的构造确定程序逻辑,源代码的程序逻辑包括源代码中的程序分支,程序的返回值类型或者返回内容等等。源代码中的程序变量的属性例如可以包括公有成员变量和私有成员变量。其中,源代码中的公有成员变量可以有不同的使用方案,可以直接修改或使用。对于源代码中的私有成员变量不能直接使用或修改,需要调用相应的Set/Get方法进行处理,在进行源代码分析时,可以将私有成员变量进行收集,单独放置在一起。
在操作S220,根据源代码的程序逻辑和源代码中的程序变量的属性生成测试代码和测试程序逻辑断言。
根据本公开的实施例,测试程序逻辑断言可以是一些布尔表达式,在程序中的某些特定点该表达式的值为真时,可以在任何时候启用或禁用断言验证,当需要在一个值为false中断当前操作时,也可以使用断言。通过使用测试程序逻辑断言,可以创建更加稳定的不易出错的代码。
在操作S230,获取用于目标被测程序的测试数据文件。
根据本公开的实施例,对于相同或不同的测试方法,不同的测试数据所产生的结果也会不同。因此,可以依据数据的类型、使用过程、程序流程等内容生成相应的测试数据。
在操作S240,基于测试数据文件执行测试代码和测试程序逻辑断言,以便对目标被测程序进行测试。
根据本公开的实施例,通过对目标被测程序的源代码进行分析,确定源代码的程序逻辑和源代码中的程序变量的属性;根据源代码的程序逻辑和源代码中的程序变量的属性生成测试代码和测试程序逻辑断言;获取用于目标被测程序的测试数据文件;基于测试数据文件执行测试代码和测试程序逻辑断言,以便对目标被测程序进行测试。由于可以自动生成测试代码和测试程序逻辑断言,使得降低了输入错误的风险,降低了开发人员单元测试的编码量;同时,可以将测试数据与测试代码和测试程序逻辑断言分离,减少了数据的依赖性,能够在保证代码覆盖率的前提下提高测试人员的开发效率,所以至少部分地克服了相关技术中,至少对于Web框架模型的程序而言,手工编写单元测试的测试案例的方式存在测试效率低的技术问题,进而达到了测试效率的技术效果。
下面参考图3~图5,结合具体实施例对图2所示的方法做进一步说明。
图3示意性示出了根据本公开实施例的根据源代码的程序逻辑和源代码中的程序变量的属性生成测试代码和测试程序逻辑断言的流程图。
如图3所示,该方法包括操作S310~S340。
在操作S310,根据源代码的程序逻辑获取源代码中的正常分支流程、异常分支流程、以及程序返回值的类型和内容。
根据本公开的实施例,对于程序正常分支中的一些特殊参数,例如,校验条件参数,在对源代码进行分析的时候,可以基于这些特殊参数将正常分支流程和正常分支流程的结果进行关联。
根据本公开的实施例,对于程序异常分支中的一些特殊参数,例如,空指针参数,在对源代码进行分析的时候,可以基于这些特殊参数将异常分支流程单独区分,并基于不同的异常分支流程的类别进行分类,并生成对应的测试代码。
根据本公开的实施例,不同的分支具有不同的返回结果,可以将程序返回值按照分支进行分类,使得在后续可以根据返回值的类型有针对性的使用程序返回值。
在操作S320,根据源代码中的正常分支流程调用固定逻辑模板,以生成固定逻辑分支测试代码。
根据本公开的实施例,源代码中的正常分支流程的内容逻辑可以是相同或类似的,但由于源代码中的正常分支流程的内容需要使用人依据不同的分支进行特性化的处理,在使用过程中,可以针对正常分支流程的内容提供模板接口,按照模板生成条件代码生成测试代码,生成对应的方法和调用关系。
根据本公开的实施例,在生成测试代码的过程中,对于每个条件分支,包括if-else,switch-case等,可以将每个条件中的结果和断言生成器配合生成测试代码,使测试覆盖所有具体分支。
在操作S330,根据源代码中的异常分支流程调用异常流程模板,以生成异常分支测试代码。
根据本公开的实施例,针对源代码中的异常分支流程,可以实现对应的模板,当遇到异常分支流程抛出某一类型的异常时,可以调用异常流程模板生成异常分支测试代码。
根据本公开的实施例,需要说明的是,异常分支流程是相对于正常分支流程而定义的,并不是代表程序执行过程中是异常的。例如,目标被测程序是一段用于实现登录应用程序的程序。正常分支流程可以是对已注册过的用户的账号和密码进行校验的分支流程,异常分支流程可以是未注册用户跳转进入注册界面进行注册分支流程,或者异常分支流程还可以是已注册用户登录失败后进行校验的分支流程。
在操作S340,根据源代码中的程序返回值的类型和内容生成测试程序逻辑断言。
根据本公开的实施例,可以利用断言生成器生成测试程序逻辑断言。通过生成合理的断言,可以保证方法流程在各种分支下的正确性。
图4示意性示出了根据本公开实施例的基于测试数据文件执行测试代码和测试程序逻辑断言,以便对目标被测程序进行测试的流程图。
如图4所示,该方法包括操作S410~S420。
在操作S410,根据目标被测程序的源代码的类型确定目标测试框架。
根据本公开的实施例,目标测试框架的类型不做限定,例如包括但不限于BTT,CTP,Spring MVC等等。
根据本公开的实施例,目标测试框架的类型是基于源代码的类型确定的,源代码的类型可以基于源代码的程序依赖确定。
在操作S420,基于目标测试框架和测试数据文件执行测试代码和测试程序逻辑断言。
根据本公开的实施例,例如,,目标测试框架为Spring MVC,可以Spring MVC和测试数据文件执行测试代码和测试程序逻辑断言。
图5示意性示出了根据本公开实施例的基于目标测试框架和测试数据文件执行测试代码和测试程序逻辑断言的流程图。
如图5所示,该方法包括操作S510~S520。
在操作S510,根据目标测试框架的类型确定是否需要调用框架接口。
根据本公开的实施例,可以根据目标测试框架的类型判断用于执行测试代码和测试程序逻辑断言的框架执行器是否支持目标测试框架,以确定是否需要调用框架接口。
根据本公开的实施例,框架接口可以支持框架接入功能,对于不常用或者是开发员编写的框架,可以提供模块的接入功能,用来将相应的功能,api等内容与测试框架进行接轨,从而可以使用个性化的内容。
在操作S520,响应于需要调用框架接口,通过调用框架接口获取目标测试框架的内容,以便基于目标测试框架的内容和测试数据文件执行测试代码和测试程序逻辑断言。
根据本公开的实施例,当使用不同的框架时,可以使用不同的接口启动方案,通过调用框架接口获取目标测试框架的内容。
根据本公开的实施例,框架执行器可以将当前的测试共同的内容生成模板内容,利用模板可以仅将变量作为生成器的数据,其他内容与模板相同。
根据本公开的实施例,还可以通过测试案例执行器执行测试代码和测试程序逻辑断言。测试案例执行器可以支持不同的单元测试执行,例如,Junit,TestNG等等。
图6示意性示出了根据本公开实施例的测试装置的框图。
如图6所示,测试装置600包括确定模块610、生成模块620、获取模块630和执行模块640。
确定模块610用于对目标被测程序的源代码进行分析,确定上述源代码的程序逻辑和上述源代码中的程序变量的属性;
生成模块620用于根据上述源代码的程序逻辑和上述源代码中的程序变量的属性生成测试代码和测试程序逻辑断言;
获取模块630用于获取用于上述目标被测程序的测试数据文件;
执行模块640用于基于上述测试数据文件执行上述测试代码和测试程序逻辑断言,以便对上述目标被测程序进行测试。
根据本公开的实施例,通过对目标被测程序的源代码进行分析,确定源代码的程序逻辑和源代码中的程序变量的属性;根据源代码的程序逻辑和源代码中的程序变量的属性生成测试代码和测试程序逻辑断言;获取用于目标被测程序的测试数据文件;基于测试数据文件执行测试代码和测试程序逻辑断言,以便对目标被测程序进行测试。由于可以自动生成测试代码和测试程序逻辑断言,使得降低了输入错误的风险,降低了开发人员单元测试的编码量;同时,可以将测试数据与测试代码和测试程序逻辑断言分离,减少了数据的依赖性,能够在保证代码覆盖率的前提下提高测试人员的开发效率,所以至少部分地克服了相关技术中,至少对于Web框架模型的程序而言,手工编写单元测试的测试案例的方式存在测试效率低的技术问题,进而达到了测试效率的技术效果。
根据本公开的实施例,生成模块620包括获取单元、第一生成单元、第二生成单元和第三生成单元。
获取单元用于根据源代码的程序逻辑获取源代码中的正常分支流程、异常分支流程、以及程序返回值的类型和内容。
第一生成单元用于根据源代码中的正常分支流程调用固定逻辑模板,以生成固定逻辑分支测试代码。
第二生成单元用于根据源代码中的异常分支流程调用异常流程模板,以生成异常分支测试代码。
第三生成单元用于根据源代码中的程序返回值的类型和内容生成测试程序逻辑断言。
根据本公开的实施例,执行模块640包括确定单元和执行单元。
确定单元用于根据目标被测程序的源代码的类型确定目标测试框架。
执行单元用于基于目标测试框架和测试数据文件执行测试代码和测试程序逻辑断言。
根据本公开的实施例,执行单元包括确定子单元和调用子单元。
确定子单元用于根据目标测试框架的类型确定是否需要调用框架接口。
调用子单元用于响应于需要调用框架接口,通过调用框架接口获取目标测试框架的内容,以便基于目标测试框架的内容和测试数据文件执行测试代码和测试程序逻辑断言。
根据本公开的实施例,确定子单元用于根据目标测试框架的类型判断测试装置是否支持目标测试框架,以确定是否需要调用框架接口。
根据本公开的实施例的模块、子模块、单元、子单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元、子单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
例如,确定模块610、生成模块620、获取模块630和执行模块640中的任意多个可以合并在一个模块/单元/子单元中实现,或者其中的任意一个模块/单元/子单元可以被拆分成多个模块/单元/子单元。或者,这些模块/单元/子单元中的一个或多个模块/单元/子单元的至少部分功能可以与其他模块/单元/子单元的至少部分功能相结合,并在一个模块/单元/子单元中实现。根据本公开的实施例,确定模块610、生成模块620、获取模块630和执行模块640中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,确定模块610、生成模块620、获取模块630和执行模块640中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
需要说明的是,本公开的实施例中测试装置部分与本公开的实施例中测试方法部分是相对应的,测试装置部分的描述具体参考测试方法部分,在此不再赘述。
图7示意性示出了根据本公开实施例的适于实现上文描述的方法的电子设备的框图。图7示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图7所示,根据本公开实施例的电子设备700包括处理器701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。处理器701例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器701还可以包括用于缓存用途的板载存储器。处理器701可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 703中,存储有电子设备700操作所需的各种程序和数据。处理器701、ROM702以及RAM 703通过总线704彼此相连。处理器701通过执行ROM 702和/或RAM 703中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 702和RAM 703以外的一个或多个存储器中。处理器701也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备700还可以包括输入/输出(I/O)接口705,输入/输出(I/O)接口705也连接至总线704。电子设备700还可以包括连接至I/O接口705的以下部件中的一项或多项:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被处理器701执行时,执行本公开实施例的电子设备中限定的上述功能。根据本公开的实施例,上文描述的电子设备、设备、装置、模块、单元等可以通过计算机程序模块来实现。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/电子设备中所包含的;也可以是单独存在,而未装配入该设备/装置/电子设备中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质。例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行电子设备、装置或者器件使用或者与其结合使用。
例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 702和/或RAM 703和/或ROM 702和RAM 703以外的一个或多个存储器。
附图中的流程图和框图,图示了按照本公开各种实施例的电子设备、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的电子设备来实现,或者可以用专用硬件与计算机指令的组合来实现。本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
Claims (10)
1.一种测试方法,包括:
对目标被测程序的源代码进行分析,确定所述源代码的程序逻辑和所述源代码中的程序变量的属性;
根据所述源代码的程序逻辑和所述源代码中的程序变量的属性生成测试代码和测试程序逻辑断言;
获取用于所述目标被测程序的测试数据文件;以及
基于所述测试数据文件执行所述测试代码和测试程序逻辑断言,以便对所述目标被测程序进行测试;
其中,根据所述源代码的程序逻辑和所述源代码中的程序变量的属性生成测试代码和测试程序逻辑断言包括:
根据所述源代码的程序逻辑获取所述源代码中的正常分支流程、异常分支流程、以及程序返回值的类型和内容;
根据所述源代码中的正常分支流程调用固定逻辑模板,以生成固定逻辑分支测试代码;
根据程序异常分支中的特殊参数对所述源代码中的异常分支流程进行分类,基于所述异常分支流程的类别调用异常流程模板,以生成所述类别对应的异常分支测试代码;以及
根据所述源代码中的程序返回值的类型和内容生成所述测试程序逻辑断言。
2.根据权利要求1所述的方法,其中,基于所述测试数据文件执行所述测试代码和测试程序逻辑断言,以便对所述目标被测程序进行测试包括:
根据所述目标被测程序的源代码的类型确定目标测试框架;以及
基于所述目标测试框架和所述测试数据文件执行所述测试代码和测试程序逻辑断言。
3.根据权利要求2所述的方法,其中,基于所述目标测试框架和所述测试数据文件执行所述测试代码和测试程序逻辑断言包括:
根据所述目标测试框架的类型确定是否需要调用框架接口;以及
响应于需要调用所述框架接口,通过调用所述框架接口获取所述目标测试框架的内容,以便基于所述目标测试框架的内容和所述测试数据文件执行所述测试代码和测试程序逻辑断言。
4.根据权利要求3所述的方法,其中,根据所述目标测试框架的类型确定是否需要调用框架接口包括:
根据所述目标测试框架的类型判断用于执行所述测试代码和测试程序逻辑断言的框架执行器是否支持所述目标测试框架,以确定是否需要调用所述框架接口。
5.一种测试装置,包括:
确定模块,用于对目标被测程序的源代码进行分析,确定所述源代码的程序逻辑和所述源代码中的程序变量的属性;
生成模块,用于根据所述源代码的程序逻辑和所述源代码中的程序变量的属性生成测试代码和测试程序逻辑断言;
获取模块,用于获取用于所述目标被测程序的测试数据文件;以及
执行模块,用于基于所述测试数据文件执行所述测试代码和测试程序逻辑断言,以便对所述目标被测程序进行测试;
其中,所述生成模块包括:
获取单元,用于根据所述源代码的程序逻辑获取所述源代码中的正常分支流程、异常分支流程、以及程序返回值的类型和内容;
第一生成单元,用于根据所述源代码中的正常分支流程调用固定逻辑模板,以生成固定逻辑分支测试代码;
第二生成单元,用于根据程序异常分支中的特殊参数对所述源代码中的异常分支流程进行分类,基于所述异常分支流程的类别调用异常流程模板,以生成所述类别对应的异常分支测试代码;以及
第三生成单元,用于根据所述源代码中的程序返回值的类型和内容生成所述测试程序逻辑断言。
6.根据权利要求5所述的装置,其中,所述执行模块包括:
确定单元,用于根据所述目标被测程序的源代码的类型确定目标测试框架;以及
执行单元,用于基于所述目标测试框架和所述测试数据文件执行所述测试代码和测试程序逻辑断言。
7.根据权利要求6所述的装置,其中,所述执行单元包括:
确定子单元,用于根据所述目标测试框架的类型确定是否需要调用框架接口;以及
调用子单元,用于响应于需要调用所述框架接口,通过调用所述框架接口获取所述目标测试框架的内容,以便基于所述目标测试框架的内容和所述测试数据文件执行所述测试代码和测试程序逻辑断言。
8.根据权利要求7所述的装置,其中,所述确定子单元用于:
根据所述目标测试框架的类型判断所述测试装置是否支持所述目标测试框架,以确定是否需要调用所述框架接口。
9.一种电子设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个指令,
其中,当所述一个或多个指令被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至4中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器实现权利要求1至4中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910811371.0A CN110532185B (zh) | 2019-08-29 | 2019-08-29 | 测试方法、装置、电子设备和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910811371.0A CN110532185B (zh) | 2019-08-29 | 2019-08-29 | 测试方法、装置、电子设备和计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110532185A CN110532185A (zh) | 2019-12-03 |
CN110532185B true CN110532185B (zh) | 2023-09-19 |
Family
ID=68665275
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910811371.0A Active CN110532185B (zh) | 2019-08-29 | 2019-08-29 | 测试方法、装置、电子设备和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110532185B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110427188B (zh) * | 2019-08-02 | 2023-06-09 | 深圳前海微众银行股份有限公司 | 单测断言程序的配置方法、装置、设备及存储介质 |
CN111008147B (zh) * | 2019-12-20 | 2023-12-26 | 广州品唯软件有限公司 | 应用程序的测试方法、终端及计算机可读存储介质 |
CN113342633B (zh) * | 2020-02-18 | 2023-09-22 | 北京京东振世信息技术有限公司 | 一种性能测试方法和装置 |
CN112181851B (zh) * | 2020-10-27 | 2023-07-28 | 北京字跳网络技术有限公司 | 软件测试方法、设备及存储介质 |
CN112988534A (zh) * | 2021-02-26 | 2021-06-18 | 北京明略昭辉科技有限公司 | 异常数据处理方法、装置、设备及存储介质 |
CN113127361B (zh) * | 2021-04-23 | 2024-02-23 | 中国工商银行股份有限公司 | 应用程序的开发方法、装置、电子设备和存储介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008276556A (ja) * | 2007-04-27 | 2008-11-13 | Toyota Motor Corp | クロス検証装置 |
CN101706753A (zh) * | 2009-12-11 | 2010-05-12 | 武汉虹信通信技术有限责任公司 | 一种基于Perl的单元测试框架及方法 |
CN102243609A (zh) * | 2011-06-15 | 2011-11-16 | 惠州运通信息技术有限公司 | 一种基于嵌入式软件的测试分析方法及系统 |
CN102495796A (zh) * | 2011-11-25 | 2012-06-13 | 中国人民解放军总参谋部第五十四研究所 | 一种基于单元测试的软件脆弱性测试方法 |
CN102591777A (zh) * | 2012-01-10 | 2012-07-18 | 深圳市同洲视讯传媒有限公司 | 一种单元测试代码生成方法及装置 |
CN103902456A (zh) * | 2014-04-09 | 2014-07-02 | 中国工商银行股份有限公司 | 测试脚本处理装置、系统及方法 |
CN108549605A (zh) * | 2018-04-13 | 2018-09-18 | 郑州云海信息技术有限公司 | 一种自动化测试方法 |
CN108763094A (zh) * | 2018-06-01 | 2018-11-06 | 百度在线网络技术(北京)有限公司 | 测试用例生成方法、装置、设备及存储介质 |
CN108804322A (zh) * | 2018-06-05 | 2018-11-13 | 中国平安人寿保险股份有限公司 | 自动化测试方法、装置、计算机设备及存储介质 |
CN108984393A (zh) * | 2018-06-12 | 2018-12-11 | 苏宁易购集团股份有限公司 | 一种单元测试代码自动生成方法及装置 |
CN109614313A (zh) * | 2018-10-25 | 2019-04-12 | 平安科技(深圳)有限公司 | 自动化测试方法、装置及计算机可读存储介质 |
CN109815107A (zh) * | 2017-11-22 | 2019-05-28 | 北京京东尚科信息技术有限公司 | 自动化测试的方法和装置 |
-
2019
- 2019-08-29 CN CN201910811371.0A patent/CN110532185B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008276556A (ja) * | 2007-04-27 | 2008-11-13 | Toyota Motor Corp | クロス検証装置 |
CN101706753A (zh) * | 2009-12-11 | 2010-05-12 | 武汉虹信通信技术有限责任公司 | 一种基于Perl的单元测试框架及方法 |
CN102243609A (zh) * | 2011-06-15 | 2011-11-16 | 惠州运通信息技术有限公司 | 一种基于嵌入式软件的测试分析方法及系统 |
CN102495796A (zh) * | 2011-11-25 | 2012-06-13 | 中国人民解放军总参谋部第五十四研究所 | 一种基于单元测试的软件脆弱性测试方法 |
CN102591777A (zh) * | 2012-01-10 | 2012-07-18 | 深圳市同洲视讯传媒有限公司 | 一种单元测试代码生成方法及装置 |
CN103902456A (zh) * | 2014-04-09 | 2014-07-02 | 中国工商银行股份有限公司 | 测试脚本处理装置、系统及方法 |
CN109815107A (zh) * | 2017-11-22 | 2019-05-28 | 北京京东尚科信息技术有限公司 | 自动化测试的方法和装置 |
CN108549605A (zh) * | 2018-04-13 | 2018-09-18 | 郑州云海信息技术有限公司 | 一种自动化测试方法 |
CN108763094A (zh) * | 2018-06-01 | 2018-11-06 | 百度在线网络技术(北京)有限公司 | 测试用例生成方法、装置、设备及存储介质 |
CN108804322A (zh) * | 2018-06-05 | 2018-11-13 | 中国平安人寿保险股份有限公司 | 自动化测试方法、装置、计算机设备及存储介质 |
CN108984393A (zh) * | 2018-06-12 | 2018-12-11 | 苏宁易购集团股份有限公司 | 一种单元测试代码自动生成方法及装置 |
CN109614313A (zh) * | 2018-10-25 | 2019-04-12 | 平安科技(深圳)有限公司 | 自动化测试方法、装置及计算机可读存储介质 |
Non-Patent Citations (2)
Title |
---|
基于模型的应用软件的静态检测方法研究;李忠慧;《电脑知识与技术》;20150715(第20期);全文 * |
符号执行和测试数据辅助生成的实验系统;高仲仪等;《北京航空航天大学学报》;19880830(第04期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110532185A (zh) | 2019-12-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110532185B (zh) | 测试方法、装置、电子设备和计算机可读存储介质 | |
US8386851B2 (en) | Functional coverage using combinatorial test design | |
US10817408B2 (en) | Generating test cases | |
US8719789B2 (en) | Measuring coupling between coverage tasks and use thereof | |
US8719799B2 (en) | Measuring coupling between coverage tasks and use thereof | |
US20210182031A1 (en) | Methods and apparatus for automatic detection of software bugs | |
US7069474B2 (en) | System and method for assessing compatibility risk | |
CN110704306B (zh) | 测试中的断言处理方法、装置、设备及存储介质 | |
CN110196809B (zh) | 接口测试方法及装置 | |
CN111290941A (zh) | 多个接口的测试方法、装置、计算设备和介质 | |
US8117499B2 (en) | Generation of a stimuli based on a test template | |
CN111831573A (zh) | 代码分支覆盖情况的确定方法、装置、计算机系统和介质 | |
US9582407B2 (en) | Security role testing using an embeddable container and properties object | |
US9779014B2 (en) | Resilient mock object creation for unit testing | |
US10275238B2 (en) | Hybrid program analysis | |
CN110399209B (zh) | 数据处理方法、系统、电子设备和存储介质 | |
US8943370B2 (en) | Trace value correlation with data field declarations | |
US9075921B2 (en) | Error simulation | |
US9442826B2 (en) | Kernel functionality checker | |
CN112988578A (zh) | 一种自动化测试方法和装置 | |
CN116483888A (zh) | 程序评估方法及装置、电子设备和计算机可读存储介质 | |
CN110609786A (zh) | 软件测试方法、装置、计算机设备和存储介质 | |
US9710360B2 (en) | Optimizing error parsing in an integrated development environment | |
CN108885574B (zh) | 用于监视和报告设计、编译和运行时的性能和正确性问题的系统 | |
EP3316171A1 (en) | Apparatus and method for dynamic binary analysis on hardware board |
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 |