CN114691496A - 单元测试方法、装置、计算设备及介质 - Google Patents

单元测试方法、装置、计算设备及介质 Download PDF

Info

Publication number
CN114691496A
CN114691496A CN202210206441.1A CN202210206441A CN114691496A CN 114691496 A CN114691496 A CN 114691496A CN 202210206441 A CN202210206441 A CN 202210206441A CN 114691496 A CN114691496 A CN 114691496A
Authority
CN
China
Prior art keywords
unit
test
unit test
test case
module
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.)
Pending
Application number
CN202210206441.1A
Other languages
English (en)
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.)
Alibaba China Co Ltd
Original Assignee
Alibaba China 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 Alibaba China Co Ltd filed Critical Alibaba China Co Ltd
Priority to CN202210206441.1A priority Critical patent/CN114691496A/zh
Publication of CN114691496A publication Critical patent/CN114691496A/zh
Pending legal-status Critical Current

Links

Images

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

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

单元测试方法、装置、计算设备及介质
技术领域
本说明书一个或多个实施例涉及计算机技术领域,尤其涉及一种单元测试方法、装置、计算设备及介质。
背景技术
在计算机编程中,单元测试是指针对程序单元(软件设计的最小单位)来进行正确性检验的测试工作。通过单元测试,可以隔离程序部件以证明每个程序部件都是正确的,以达到在软件开发过程的早期发现软件问题的目的。
在Linux操作***的单元测试过程中,主要是使用knuit作为内核代码单元测试框架,来在内核模块中编写单元测试用例,从而使得在将内核模块加载到内核空间后,Linux内核会运行内核模块中的各个单元测试用例,以判断各个程序部件的正确性。
但是,在knuit中,单元测试用例是以函数的形式存放在内核模块中的,加载内核模块后,Linux内核会一次性运行内核模块中所包括的所有函数,如果使用者只想单独运行某一个单元测试用例,则必须重新编写只包含单个单元测试用例的内核模块,再通过运行这个只包含单个单元测试用例的内核模块,才能实现对某一个单元测试用例的单独运行,从而导致单元测试过程的效率较低。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种单元测试方法、装置、计算设备及介质。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种单元测试方法,该方法包括:
在操作***的内核空间中的测试代码加载完成的情况下,在操作***的用户空间为测试代码生成至少一个测试模块,每个测试模块用于管理至少一个单元测试用例,每个单元测试用例设置有对应的运行标识,运行标识用于指示是否允许执行单元测试用例对应的测试代码;
基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码;
获取所执行的测试代码的运行日志和运行结果。
在一些实施例中,运行标识包括第一运行标识和第二运行标识,第一运行标识指示单元测试用例对应的测试代码被允许执行,第二运行标识指示单元测试用例对应的测试代码被禁止执行;
基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码,包括下述任一项:
对于任一单元测试用例,在单元测试用例的运行标识为第一运行标识的情况下,在内核空间中执行单元测试用例;
在单元测试用例的运行标识为第二运行标识的情况下,无需在内核空间中执行单元测试用例。
在一些实施例中,基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码,包括:
在接收到单元测试指令的情况下,基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码。
在一些实施例中,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码包括:
在内核空间中为每个运行标识满足目标条件的单元测试用例创建对应的线程;
通过所创建的线程,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码。
在一些实施例中,测试代码还包括日志获取函数和结果获取函数;
获取所执行的测试代码的运行日志和运行结果,包括:
通过日志获取函数获取测试代码的运行日志,并通过结果获取函数获取测试代码的运行结果。
在一些实施例中,每个测试模块至少包括至少一个单元测试用例所对应的运行文件,运行文件用于存储运行标识。
在一些实施例中,每个测试模块还包括至少一个单元测试用例所对应的日志文件和结果文件;
获取所执行的测试代码的运行日志和运行结果之后,该方法还包括下述至少一项:
将运行日志存储至测试代码所对应的日志文件中;
将运行结果存储至测试代码所对应的结果文件中。
在一些实施例中,对于任一测试模块,测试模块包括至少一个单元测试用例,或,测试模块包括至少一个子模块,至少一个子模块包括至少一个单元测试用例。
根据本说明书一个或多个实施例的第二方面,提出了一种单元测试装置,该装置包括:
生成单元,用于在操作***的内核空间中的测试代码加载完成的情况下,在操作***的用户空间为测试代码生成至少一个测试模块,每个测试模块用于管理至少一个单元测试用例,每个单元测试用例设置有对应的运行标识,运行标识用于指示是否允许执行单元测试用例对应的测试代码;
执行单元,用于基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码;
获取单元,用获取所执行的测试代码的运行日志和运行结果。
在一些实施例中,运行标识包括第一运行标识和第二运行标识,第一运行标识指示单元测试用例对应的测试代码被允许执行,第二运行标识指示单元测试用例对应的测试代码被禁止执行;
执行单元,在基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码时,用于下述任一项:
对于任一单元测试用例,在单元测试用例的运行标识为第一运行标识的情况下,在内核空间中执行单元测试用例;
在单元测试用例的运行标识为第二运行标识的情况下,无需在内核空间中执行单元测试用例。
在一些实施例中,执行单元,在用于基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码时,用于:
在接收到单元测试指令的情况下,基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码。
在一些实施例中,执行单元,在用于在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码时,用于:
在内核空间中为每个运行标识满足目标条件的单元测试用例创建对应的线程;
通过所创建的线程,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码。
在一些实施例中,测试代码包括日志获取函数和结果获取函数;
获取单元,在用于获取所执行的测试代码的运行日志和运行结果时,用于:
通过日志获取函数获取测试代码的运行日志,并通过结果获取函数获取测试代码的运行结果。
在一些实施例中,每个测试模块至少包括至少一个单元测试用例所对应的运行文件,运行文件用于存储运行标识。
在一些实施例中,每个测试模块还包括至少一个单元测试用例所对应的日志文件和结果文件;
该装置还包括:
存储单元,用于下述至少一项:
将运行日志存储至测试代码所对应的日志文件中;
将运行结果存储至测试代码所对应的结果文件中。
在一些实施例中,对于任一测试模块,测试模块包括至少一个单元测试用例,或,测试模块包括至少一个子模块,至少一个子模块包括至少一个单元测试用例。
根据本说明书一个或多个实施例的第三方面,提出了一种计算设备,该计算设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,处理器通过运行可执行指令以实现上述第一方面以及第一方面中任一实施例所提供的单元测试方法所执行的操作。
根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,指令被处理器执行时实现上述第一方面以及第一方面中任一实施例所提供的单元测试方法所执行的操作。
根据本说明书一个或多个实施例的第五方面,提出了一种计算机程序产品,包括计算机程序,程序被处理器执行时实现上述第一方面以及第一方面中任一实施例所提供的单元测试方法所执行的操作。
本申请提供一种更细粒度的单元测试用例管理框架,在操作***的内核空间中的测试代码加载完成的情况下,在操作***的用户空间为测试代码生成至少一个测试模块,用各个测试模块来分别管理至少一个单元测试用例,每个单元测试用例都设置有对应的运行标识,从而可以基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码,以获取所执行的测试代码的运行日志和运行结果,实现对某一个或某几个单元测试用例的单独运行,而无需重新编写仅包含这个单元测试用例的内核模块,从而可以提高单元测试过程的效率。
附图说明
图1是一示例性实施例提供的一种单元测试方法的流程图。
图2是一示例性实施例提供的一种单元测试用例的管理框架示意图。
图3是一示例性实施例提供的一种用户空间和内核空间的交互过程示意图。
图4是一示例性实施例提供的一种接口模块的功能示意图。
图5是一示例性实施例提供的一种单元测试方法的整体架构图。
图6是一示例性实施例提供的一种单元测试装置的框图。
图7是一示例性实施例提供的一种计算设备的示意结构图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
本申请提供了一种单元测试方法,用于对要在Linux操作***的内核空间运行的程序模块的正确性进行检验,从而可以在软件开发过程初期发现程序代码所存在的问题。
上述单元测试方法可以由搭载Linux操作***的计算设备执行,计算设备可以为服务器,如一台服务器、多台服务器、服务器集群、云计算平台等,可选地,计算设备还可以为终端设备,如台式计算机、便携式计算机、掌上电脑、平板电脑等,本申请对计算设备的设备类型和设备数量不加以限定。
上述为有关本申请的应用环境的介绍,下面对本申请所提供的单元测试方法的实现过程进行说明。
参见图1,图1是一示例性实施例提供的一种单元测试方法的流程图,该方法包括:
步骤101、在操作***的内核空间中的测试代码加载完成的情况下,在操作***的用户空间为测试代码生成至少一个测试模块,每个测试模块用于管理至少一个单元测试用例,每个单元测试用例设置有对应的运行标识,运行标识用于指示是否允许执行单元测试用例对应的测试代码。
步骤102、基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码。
步骤103、获取所执行的测试代码的运行日志和运行结果。
本申请提供一种更细粒度的单元测试用例管理框架,在操作***的内核空间中的测试代码加载完成的情况下,在操作***的用户空间为测试代码生成至少一个测试模块,用各个测试模块来分别管理至少一个单元测试用例,每个单元测试用例都设置有对应的运行标识,从而可以基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码,以获取所执行的测试代码的运行日志和运行结果,实现对某一个或某几个单元测试用例的单独运行,而无需重新编写仅包含这个单元测试用例的内核模块,从而可以提高单元测试过程的效率。
在介绍了本申请的基本实现过程之后,下面结合本申请的多个可选实施例,对本申请所提供的单元测试方法进行进一步说明。
在一些实施例中,在操作***的内核空间中的测试代码加载完成的情况下,计算设备即可在操作***的用户空间自动为测试代码生成至少一个测试模块。
在一种可能的实现方式中,内核空间可以包括接口模块,通过内核空间的接口模块,即可实现内核空间和用户空间的连接。而接口模块中可以包括注册(Register)组件,因而,对于步骤101,在操作***的内核空间中的测试代码加载完成的情况下,在操作***的用户空间为测试代码生成至少一个测试模块时,可以通过注册组件,基于内核空间中的测试代码,按照预先设置好的框架结构,在用户空间中生成至少一个测试模块,以通过这至少一个测试模块来实现单元测试用例的管理。
本申请所提供的更细粒度的单元测试用例管理框架(记为Munit,或称异步内核单元测试框架),可以应用在用于内核调试的虚拟文件***(Debugs),用于通过测试模块来直接或间接地管理单元测试用例。例如,对于任一测试模块,该测试模块可以包括至少一个单元测试用例,或者,测试模块可以包括至少一个子模块,这至少一个子模块可以包括至少一个单元测试用例。
也即是,对于在用户空间中生成至少一个测试模块,这至少一个测试模块可以均直接包括至少一个单元测试用例,或者,这至少一个测试模块可以均包括至少一个子模块,而这至少一个子模块中包括至少一个单元测试用例,或者,这至少一个测试模块中一部分测试模块直接包括至少一个单元测试用例,另一部分测试模块包括至少一个子模块,这至少一个子模块中包括至少一个单元测试用例,从而可以通过上述三种方式中的至少一种,实现至少一个测试模块对至少一个单元测试用例的管理。
例如,参见图2,图2是一示例性实施例提供的一种单元测试用例的管理框架示意图,如图2所示,异步内核单元测试框架可以包括3个测试模块,记为测试模块201(Module201)、测试模块202(Module202)以及测试模块203(Module203),测试模块201、测试模块202和测试模块203所包括的结构各不相同。其中,测试模块201中包括子模块210(Submod210),子模块210中包括子模块220(Submod220),而子模块220中包括单元测试用例231(Case231)和单元测试用例232(Case232),从而使得测试模块201可以通过子模块210来对子模块220进行管理,而子模块210可以通过子模块220来对单元测试用例231和单元测试用例232进行管理,从而使得测试模块201可以实现对单元测试用例231和单元测试用例232的管理;测试模块202可以包括子模块211(Submod211)和子模块212(Submod212),子模块211中包括单元测试用例233(Case233),子模块212中包括单元测试用例234(Case234),以便测试模块202可以通过子模块211实现对单元测试用例233的管理,通过子模块212实现对单元测试用例234的管理;而测试模块203中直接包括单元测试用例235(Case235)和单元测试用例236(Case236),从而使得测试模块203可以直接对单元测试用例235和单元测试用例236进行管理。
上述图2所示仅为一种示例性的单元测试用例的管理框架,用以示意性地展示出单元测试用例的三种可能管理方式,也即是,测试模块中可以直接包括单元测试用例,或者,测试模块中可以包括一层子模块,从而通过这层子模块来实现对单元测试用例的管理,又或者,测试模块中可以包括多层子模块,从而通过这多层子模块来实现对单元测试用例的管理。可选地,还可以仅采用图2中的一种或两种管理方式,来实现单元测试用例的管理框架的构建。
需要说明的是,对于上述单元测试用例的管理框架,单元测试用例的管理框架中所包括的测试模块的数量、测试模块中是否包括子模块、在测试模块中包括子模块的情况下其所包括的子模块的层数以及子模块中所包括的单元测试用例的数量均可以根据实际需求进行配置,例如,可以根据单元测试用例所要实现的验证功能的类型(如功能性验证、性能验证、压力测试、特定工作负载验证等)、计算设备的硬件构造、操作***中的软件架构方式等,来配置单元测试用例的管理框架,在配置完成后,即可按照所配置好的架构方式,来实现至少一个测试模块的生成,从而使得至少一个测试模块可以按照配置好的架构方式,来管理至少一个单元测试用例。
另外,需要说明的是,无论采取何种方式来实现测试模块对单元测试用例的管理,均需保证在单元测试用例的管理框架的最后一层存放各个单元测试用例,以保证单元测试用例的管理框架可以实现对各个单元测试用例的管理。
通过如上所示的单元测试用例的管理框架,可以根据实际使用需求,在测试模块中使用上述至少一种管理方式,以实现对各个单元测试用例的管理。而且,通过测试模块或多层级的子模块,可以更加方便的实现对单元测试用例的分类,对于属于同一类别的单元测试用例,可以使用相同的测试模块或子模块来进行管理,而不同类别的单元测试用例,可以使用不同的测试模块或不同的子模块来进行管理,从而可以提高单元测试用例的管理效率。
在一些实施例中,用户空间的测试模块中的每个单元测试用例均可以包括对应的文件,如运行(Run)文件、日志(Log)文件和结果(Res)文件,可选地,各个单元测试用例还可以包括其他类型的文件,本申请对单元测试用例所包括的文件的具体类型不加以限定。
仍以图2所示的单元测试用例的管理框架为例来进行说明,在如图2所示的异步内核单元测试框架中,Case231、Case232、Case233、Case234、Case235和Case236中均可以包括各自对应的Run文件、Log文件和Res文件。
其中,Run文件可以用于存储对应单元测试用例的运行标识,从而通过运行标识来控制单元测试用例的执行,Log文件可以用于存放单元测试用例在执行过程中产生的日志,Res文件可以用于存放单元测试用例的执行结果。
其中,运行文件中所存储的运行标识可以包括第一运行标识和第二运行标识,第一运行标识指示单元测试用例对应的测试代码被允许执行,第二运行标识指示单元测试用例对应的测试代码被禁止执行,从而可以通过运行标识来控制各个单元测试用例的执行。
在一些实施例中,对于步骤102,在基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码时,可以执行运行标识为第一运行标识的单元测试用例对应的测试代码。
也即是,对于任一单元测试用例,在单元测试用例的运行标识为第一运行标识的情况下,在内核空间中执行单元测试用例;而在单元测试用例的运行标识为第二运行标识的情况下,则无需在内核空间中执行单元测试用例。
可选地,可以用1来表示第一运行标识,用0来表示第二运行标识,在更多可能的实现方式中,第一运行标识和第二运行标识还可以有其他表现形式,本申请对此不加以限定。
在一些实施例中,用户空间的每个测试模块至少包括至少一个单元测试用例所对应的运行文件,运行标识可以存储在运行文件中。则在基于运行标识执行任一单元测试用例的测试代码时,可以从运行文件中获取所存储的运行标识,从而根据所获取到的运行标识是第一运行标识还是第二运行标识,来确定是否执行该单元测试用例对应的测试代码。
仍以如图2所示的单元测试用例的管理框架为例,在如图2所示的异步内核单元测试框架中,若Case231、Case233和Case234的运行文件中所存储的运行标识为第一运行标识(如1),则可以在内核空间执行Case231、Case233和Case234所对应的测试代码,而Case232、Case235和Case236的运行文件中所存储的运行标识为第二运行标识(如0),则无需执行Case232、Case235和Case236所对应的测试代码。
在一种可能的实现方式中,对于步骤102,基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码时,可以由相关技术人员触发单元测试指令,以便计算设备在接收到单元测试指令的情况下,再基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码。
通过提供一种控制单元测试用例的执行时机的方式,以便相关技术人员可以根据实际需求,通过触发单元测试指令来控制单元测试用例的执行,而无需在代码加载到内核空间后立即执行单元测试用例,从而可以提高单元测试过程的灵活性。
在一些实施例中,对于步骤102,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码,可以包括如下步骤:
步骤1021、在内核空间中为每个运行标识满足目标条件的单元测试用例创建对应的线程。
在一种可能的实现方式中,接口模块中可以包括单元测试用例所包括的不同类型的文件所对应的接口,各个接口在内核空间中还对应都有相应的组件,以便在实现上述步骤1021时,可以通过接口模块中的接口,来调用相应的接口,从而实现在内核空间中为每个单元测试用例创建对应的线程。
在单元测试用例所对应的文件包括Run文件、Log文件和Res文件的情况下,接口模块中可以包括Run接口、Log接口和Res接口,则在执行运行标识满足目标条件的单元测试用例对应的测试代码时,可以通过Run接口调用位于内核空间的Run组件,从而通过Run组件,为每个待执行的单元测试用例创建一个线程,以通过所创建的各个线程,来执行对应单元测试用例的测试代码。
参见图3,图3是一示例性实施例提供的一种用户空间和内核空间的交互过程示意图,如图3所示,位于用户空间的用于内核调试的虚拟文件***(也即是Debugfs)的单元测试用例可以包括Run文件、Log文件和Res文件,位于内核空间的接口模块可以包括Run接口、Log接口和Res接口,则在为单元测试用例创建线程时,可以通过Run文件来控制Run接口,进而通过Run接口来实现线程的创建。
需要说明的是,内核空间的接口模块中可以包括服务(Service)组件,可以通过Service组件接收相关技术人员触发的单元测试指令,从而响应于该单元测试指令,通过Service组件在内核模块中找到单元测试用例对应的测试代码(也即是运行函数),进而将获取到的测试代码交给Run接口,通过Run接口来进行线程的创建,以便通过Run接口来进行测试代码的执行。
参见图4,图4是一示例性实施例提供的一种接口模块的功能示意图,如图4所示,接口模块可以调用Register组件,将用户空间所包括的测试模块的所有单元测试用例注册到内核空间,同时在Debugfs中按照预先制定的管理框架创建相应的目录和文件。当通过接口模块接收到单元测试命令后,接口模块的Service组件可以在已注册到内核空间的单元测试用例中找到待执行的单元测试用例,即内核模块中的函数(如运行函数411、运行函数412和运行函数413),然后将内核模块中的函数交给接口模块中的Run接口,以便Run接口创建对应的线程,来实现测试代码的执行。
其中,内核模块中的一个运行函数对应于一个单元测试用例,继续参见图4,图4中的运行函数411对应于单元测试用例401,运行函数412对应于单元测试用例402,运行函数413对应于单元测试用例403。
步骤1022、通过所创建的线程,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码。
通过上述过程,可以为每个待执行的单元测试用例创建相应的线程,通过所执行的线程,可以并行执行多个单元测试用例,从而可以实现单元测试用例的异步执行,而无需按照顺序串行执行多个待执行的单元测试用例,进而可以提高单元测试用例的执行效率。
在一些实施例中,在单元测试用例的执行过程中,可以通过步骤103,来获取所执行的测试代码的运行日志和运行结果。
在一种可能的实现方式中,测试代码包括日志获取函数和结果获取函数,基于此,对于步骤103,在获取所执行的测试代码的运行日志和运行结果时,可以通过如下方式实现:
通过日志获取函数获取测试代码的运行日志,并通过结果获取函数获取测试代码的运行结果。
在一些实施例中,在获取到所执行的测试代码的运行日志和运行结果之后,可以将运行日志存储至测试代码所对应的日志文件中,和/或,将运行结果存储至测试代码所对应的结果文件中。
在一种可能的实现方式中,可以通过内核空间的接口模块所包括的接口,来将运行日志存储至位于用户空间的日志文件中,和/或,将运行结果存储至位于用户空间的结果文件中。
仍参见图3,如图3所示,接口模块包括Log接口和Res接口,则在获取到测试代码的运行日志和运行结果后,可以通过Log接口,将运行日志存储至位于用户空间的Debugfs的日志文件中,将运行结果存储至位于用户空间的Debugfs的结果文件中。
需要说明的是,在用户空间的Debugfs中,每个单元测试用例均有各自对应的日志文件和结果文件,则在对运行日志和运行结果进行存储时,对应任一单元测试用例,可以将该单元测试用例对应的运行日志,存储至该单元测试用例的日志文件中,将该单元测试用例对应的运行结果,存储至该单元测试用例的结果文件中。
通过上述过程,不仅可以实现各个单元测试用例的运行数据(包括运行日志和运行结果)的分别存储,使得不同单元测试用例的运行数据可以存储在各自对应的位置处,而且,在对各个单元测试用例的运行数据进行存储时,还可以将每个单元测试用例的运行日志和运行结果分别存储,从而使得后续要获取运行日志和运行结果时,可以从对应的文件中获取到相应的内容,而无需在大量文件中进行查找,也无需编写复杂的处理脚本来进行运行日志或运行结果的提取,从而提高运行日志和运行结果的获取效率。此外,还可以更加方便地对各个单元测试用例的运行日志和运行结果进行管理。
上述各个实施例分别介绍了本申请所提供的单元测试方法在用户空间和内核空间的架构,而本申请所提供的单元测试方法的整体架构可以参见图5,图5是一示例性实施例提供的一种单元测试方法的整体架构图,如图5所示,本申请所提供的异步内核单元测试框架包括用户空间的部分和内核空间的部分。用户空间通过Debugfs来控制所有单元测试用例的运行、日志和结果收集,内核空间负责将用户空间的测试模块所包括的单元测试用例注册到内核模块,以在收到来自用户空间的单元测试指令后,创建线程异步运行相应的单元测试用例,并在单元测试用例的运行过程中,将运行日志和运行结果写入用户空间。
上述仅为关于本申请的整体架构的简要介绍,关于各部分的具体介绍可以参见上述各个实施例,此处不再赘述。
本申请所提供的单元测试方法,通过以单个单元测试用例为最小管理单位,天然支持每个单元测试用例的异步执行,使得单元测试用例执行更加灵活,可以执行单个单元测试用例,而且,本申请所提供的多层级的管理框架可以方便的管理所有单元测试用例,并提供更加方便完善的日志和结果收集功能。
与前述方法的实施例相对应,本说明书还提供了装置及其所应用的计算设备的实施例。
参见图6,图6是一示例性实施例提供的一种单元测试装置的框图,该装置包括:
生成单元601,用于在操作***的内核空间中的测试代码加载完成的情况下,在操作***的用户空间为测试代码生成至少一个测试模块,每个测试模块用于管理至少一个单元测试用例,每个单元测试用例设置有对应的运行标识,运行标识用于指示是否允许执行单元测试用例对应的测试代码;
执行单元602,用于基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码;
获取单元603,用获取所执行的测试代码的运行日志和运行结果。
在一些实施例中,运行标识包括第一运行标识和第二运行标识,第一运行标识指示单元测试用例对应的测试代码被允许执行,第二运行标识指示单元测试用例对应的测试代码被禁止执行;
执行单元602,在基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码时,用于下述任一项:
对于任一单元测试用例,在单元测试用例的运行标识为第一运行标识的情况下,在内核空间中执行单元测试用例;
在单元测试用例的运行标识为第二运行标识的情况下,无需在内核空间中执行单元测试用例。
在一些实施例中,执行单元602,在用于基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码时,用于:
在接收到单元测试指令的情况下,基于各个单元测试用例所对应的运行标识,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码。
在一些实施例中,执行单元602,在用于在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码时,用于:
在内核空间中为每个运行标识满足目标条件的单元测试用例创建对应的线程;
通过所创建的线程,在内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码。
在一些实施例中,测试代码包括日志获取函数和结果获取函数;
获取单元603,在用于获取所执行的测试代码的运行日志和运行结果时,用于:
通过日志获取函数获取测试代码的运行日志,并通过结果获取函数获取测试代码的运行结果。
在一些实施例中,每个测试模块至少包括至少一个单元测试用例所对应的运行文件,运行文件用于存储运行标识。
在一些实施例中,每个测试模块还包括至少一个单元测试用例所对应的日志文件和结果文件;
该装置还包括:
存储单元,用于下述至少一项:
将运行日志存储至测试代码所对应的日志文件中;
将运行结果存储至测试代码所对应的结果文件中。
在一些实施例中,对于任一测试模块,测试模块包括至少一个单元测试用例,或,测试模块包括至少一个子模块,至少一个子模块包括至少一个单元测试用例。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本申请还提供了一种计算设备,参见图7,图7是一示例性实施例提供的一种计算设备的示意结构图。请参考图7,在硬件层面,该设备包括处理器702、内部总线704、网络接口706、内存708以及非易失性存储器710,当然还可能包括实现其他功能所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器702从非易失性存储器710中读取对应的计算机程序到内存708中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
本申请还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现本申请任一实施例所提供的单元测试方法。
上述实施例阐明的***、装置或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(Central ProcessingUnit,CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RandomAccess Memory,RAM)和/或非易失性内存等形式,如只读存储器(Read-Only Memory,ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(Phase-change Random AccessMemory,PRAM)、静态随机存取存储器(Static Random-Access Memory,SRAM)、动态随机存取存储器(Dynamic Random Access Memory,DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(Electrically Erasable ProgrammableRead Only Memory,EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CompactDisc Read Only Memory,CD-ROM)、数字多功能光盘(Digital Video Disc,DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(Transitory Media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

Claims (11)

1.一种单元测试方法,其特征在于,所述方法包括:
在操作***的内核空间中的测试代码加载完成的情况下,在所述操作***的用户空间为所述测试代码生成至少一个测试模块,每个测试模块用于管理至少一个单元测试用例,每个单元测试用例设置有对应的运行标识,所述运行标识用于指示是否允许执行单元测试用例对应的测试代码;
基于各个单元测试用例所对应的运行标识,在所述内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码;
获取所执行的测试代码的运行日志和运行结果。
2.根据权利要求1所述的方法,其特征在于,所述运行标识包括第一运行标识和第二运行标识,所述第一运行标识指示所述单元测试用例对应的测试代码被允许执行,所述第二运行标识指示所述单元测试用例对应的测试代码被禁止执行;
所述基于各个单元测试用例所对应的运行标识,在所述内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码,包括下述任一项:
对于任一单元测试用例,在所述单元测试用例的运行标识为第一运行标识的情况下,在所述内核空间中执行所述单元测试用例;
在所述单元测试用例的运行标识为第二运行标识的情况下,无需在所述内核空间中执行所述单元测试用例。
3.根据权利要求1所述的方法,其特征在于,所述基于各个单元测试用例所对应的运行标识,在所述内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码,包括:
在接收到单元测试指令的情况下,基于各个单元测试用例所对应的运行标识,在所述内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码。
4.根据权利要求1所述的方法,其特征在于,所述在所述内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码包括:
在所述内核空间中为每个运行标识满足目标条件的单元测试用例创建对应的线程;
通过所创建的线程,在所述内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码。
5.根据权利要求1所述的方法,其特征在于,所述测试代码包括日志获取函数和结果获取函数;
所述获取所执行的测试代码的运行日志和运行结果,包括:
通过所述日志获取函数获取所述测试代码的运行日志,并通过所述结果获取函数获取所述测试代码的运行结果。
6.根据权利要求1所述的方法,其特征在于,每个测试模块至少包括至少一个单元测试用例所对应的运行文件,所述运行文件用于存储所述运行标识。
7.根据权利要求6所述的方法,其特征在于,每个测试模块还包括至少一个单元测试用例所对应的日志文件和结果文件;
所述获取所执行的测试代码的运行日志和运行结果之后,所述方法还包括下述至少一项:
将所述运行日志存储至所述测试代码所对应的日志文件中;
将所述运行结果存储至所述测试代码所对应的结果文件中。
8.根据权利要求1所述的方法,其特征在于,对于任一测试模块,所述测试模块包括至少一个单元测试用例,或,所述测试模块包括至少一个子模块,所述至少一个子模块包括所述至少一个单元测试用例。
9.一种单元测试装置,其特征在于,所述装置包括:
生成单元,用于在操作***的内核空间中的测试代码加载完成的情况下,在所述操作***的用户空间为所述测试代码生成至少一个测试模块,每个测试模块用于管理至少一个单元测试用例,每个单元测试用例设置有对应的运行标识,所述运行标识用于指示是否允许执行单元测试用例对应的测试代码;
执行单元,用于基于各个单元测试用例所对应的运行标识,在所述内核空间中执行运行标识满足目标条件的单元测试用例对应的测试代码;
获取单元,用于获取所执行的测试代码的运行日志和运行结果。
10.一种计算设备,其特征在于,所述计算设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1至8中任一项所述的单元测试方法。
11.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述指令被处理器执行时实现如权利要求1至8中任一项所述的单元测试方法。
CN202210206441.1A 2022-03-02 2022-03-02 单元测试方法、装置、计算设备及介质 Pending CN114691496A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210206441.1A CN114691496A (zh) 2022-03-02 2022-03-02 单元测试方法、装置、计算设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210206441.1A CN114691496A (zh) 2022-03-02 2022-03-02 单元测试方法、装置、计算设备及介质

Publications (1)

Publication Number Publication Date
CN114691496A true CN114691496A (zh) 2022-07-01

Family

ID=82137219

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210206441.1A Pending CN114691496A (zh) 2022-03-02 2022-03-02 单元测试方法、装置、计算设备及介质

Country Status (1)

Country Link
CN (1) CN114691496A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115033497A (zh) * 2022-08-11 2022-09-09 北京登临科技有限公司 内核函数测试方法、装置、设备及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115033497A (zh) * 2022-08-11 2022-09-09 北京登临科技有限公司 内核函数测试方法、装置、设备及存储介质
CN115033497B (zh) * 2022-08-11 2022-11-25 北京登临科技有限公司 内核函数测试方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
US9727436B2 (en) Adding a profiling agent to a virtual machine to permit performance and memory consumption analysis within unit tests
US9563446B2 (en) Binary file generation
JP2005293578A (ja) 属性を介して制御されるテストケース継承
CN112765023A (zh) 测试用例生成方法、装置
CN110209520B (zh) 一种提高ssd测试效率的方法、装置、计算机设备及存储介质
CN110716845A (zh) 一种Android***的日志信息读取的方法
CN106055481B (zh) 计算机程序的测试方法及装置
CN113094252A (zh) 测试用例生成方法、装置、计算机设备及存储介质
CN114691496A (zh) 单元测试方法、装置、计算设备及介质
CN113742224A (zh) 测试***、方法、装置、计算机设备和存储介质
CN110837446A (zh) 应用于嵌入式***的设备管理方法及装置、介质以及嵌入式设备
CN110928941B (zh) 一种数据分片抽取方法及装置
CN111694580B (zh) 存储设备升级及初始化的方法、装置、电子设备
CN110471828B (zh) 一种操作***测试方法、装置及其设备
CN111625225A (zh) 一种程序指定数据输出方法和装置
US11593078B2 (en) Reload ordering for executable code modules
CN115617668A (zh) 一种兼容性测试方法、装置及设备
CN110968500A (zh) 一种测试用例的执行方法及装置
CN113849811A (zh) 一种共享虚拟资源分析方法及装置
CN109446091B (zh) 业务实体对象测试方法及装置
CN106815136B (zh) 单元测试方法及装置
CN111143229A (zh) 软件测试方法及装置、计算机设备及计算机可读存储介质
CN110888771A (zh) 对进程进行监视分析的方法、装置、电子设备及存储介质
US9672040B2 (en) Apparatus and method for determining a cumulative size of trace messages generated by a plurality of instructions
CN112817663B (zh) 一种应用程序的seccomp规则获取方法和装置

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