测试用例的选取方法及装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种测试用例的选取方法及装置。
背景技术
传统技术中,在开发代码发生变更时,只能通过人工的方法从与开发代码对应的测试用例集合中选取待变更的测试用例或者已经过期的测试用例,以便维护人员对其进行维护,这影响了选取结果的准确性和效率,且极大的耗费了人力资源。
发明内容
本申请实施例提供了一种测试用例的选取方法及装置,可以提高选取结果的准确性和效率,且节省了人力资源。
第一方面,提供了一种测试用例的选取方法,该方法包括:
获取测试用例集合,所述测试用例集合中包括多个测试用例;
对所述测试用例集合中的每个测试用例,读取所述测试用例的最新版本的版本号,确定与所述测试用例对应的开发代码;
读取所述开发代码的最新版本的版本号;
若所述开发代码的最新版本的版本号高于所述测试用例的最新版本的版本号,则将所述测试用例选取为目标测试用例。
第二方面,提供了一种测试用例的选取装置,该装置包括:获取单元、读取单元和选取单元;
所述获取单元,用于获取测试用例集合,所述测试用例集合中包括多个测试用例;
所述读取单元,用于对所述获取单元获取的所述测试用例集合中的每个测试用例,读取所述测试用例的最新版本的版本号,确定与所述测试用例对应的开发代码;
所述读取单元,还用于读取所述开发代码的最新版本的版本号;
所述选取单元,用于若读取单元读取的所述开发代码的最新版本的版本号高于所述测试用例的最新版本的版本号,则将所述测试用例选取为目标测试用例。
本申请提供的测试用例的选取方法及装置,通过自动地将测试用例的最新版本的版本号与相应的开发代码的最新版本的版本号进行比较,来选取目标测试用例,从而可以提高选取结果的准确性和效率,且节省了人力资源。
附图说明
图1为本申请一种实施例提供的测试用例的选取方法流程图;
图2为开发代码覆盖的链路类集合的示意图;
图3为本申请另一种实施例提供的测试用例的选取方法流程图;
图4为本申请再一种实施例提供的测试用例的选取装置示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为便于对本申请实施例的理解,下面将结合附图以具体实施例做进一步的解释说明,实施例并不构成对本申请实施例的限定。
本申请实施例提供的测试用例的选取方法及装置,适用于在开发代码发生变更时,从与开发代码对应的测试用例集合中选取目标测试用例(待变更的测试用例或者已经过期的测试用例)的场景,尤其适用于在开发代码发生变更时,自动地从与开发代码对应的测试用例集合中选取目标测试用例的场景。
其中,开发代码的变更包括如下几种情况:
1)方法签名变更,如参数个数、类型等发生变更;
2)实现的逻辑代码发生变更;
3)参数的可取值范围发生变更;
4)实现代码所依赖的其他模块的代码发生变更;
5)被测方法参数类发生变更导致的代码变更等。
综上,如果要保持测试用例与开发代码同步更新,需要保证:当被测类及其依赖的类发生代码变更时,对应的测试用例也需要进行变更。
图1为本申请一种实施例提供的测试用例的选取方法流程图。所述方法的执行主体可以为具有处理能力的设备:服务器或者系统或者装置,如图1所示,所述方法具体可以包括:
步骤110,获取测试用例集合,所述测试用例集合中包括多个测试用例。
在项目的开发过程中,通常会选择代码版本管理工具(Subversion,SVN)来对开发过程中的代码的版本进行管理,此处,代码可以包括开发代码和测试代码,其中,开发代码也称为被测代码,是程序员编写的用于实现一个或者多个功能的计算机语言;开发代码可以覆盖多个被测类,每个被测类以类文件的形式记录在SVN中;测试代码也可以称为测试用例集合,该测试用例集合中可以包括多个测试用例,其用于模拟真实场景下对开发代码的调用,通过将调用结果与预先设置好的期望值的比较,可以判定测试结果是通过还是失败;上述测试用例也以文件的形式记录在SVN中。
上述SVN包括SVN客户端和SVN服务端,程序员在本地完成代码(包括开发代码以及测试代码)的编写之后,可以通过在SVN客户端中输入SVN服务端的地址、用户名以及密码登录到SVN服务端,然后将编写好的代码提交到SVN服务端,由SVN服务端为其分配版本号并记录该分配的版本号,此外,SVN服务端还可以记录上述代码的提交时间以及注释信息等。
当然,程序员也可以通过上述方式登录到SVN服务端后,可以通过点击按钮的方式从SVN服务端下载上述提交的代码,如,下载测试用例集合,该测试用例集合中可以包括多个测试用例。此外,可以通过编写代码的方式周期性地从SVN服务端下载上述提交的代码。
步骤120,对所述测试用例集合中的每个测试用例,读取所述测试用例的最新版本的版本号,确定与所述测试用例对应的开发代码。
举例来说,假设获取的测试用例集合S={测试用例1,测试用例2},且假设记录在SVN中的测试用例1和测试用例2的文件如表1所示:
表1
如表1所示,其中,每一行记录可以为一个提交记录信息,前三行记录为测试用例1包括的三个记录信息,后两行记录为测试用例2包括的两个记录信息。对测试用例集合S中的测试用例1,其最新版本为:版本3,而该最新版本的版本号为:6,因此,读取到的测试用例1的最新版本的版本号为:6;而对测试用例集合S中的测试用例2,其最新版本为:版本2,而该最新版本的版本号为:13,因此,读取到的测试用例2的最新版本的版本号为:13。在其他实施方式中,上述版本号可以采用多种方式进行定义,例如,可以采用日期+时间的形式,以唯一的标识一个版本,本申请对此也不作特别限定。
在此说明,与测试用例集合中每个测试用例对应的开发代码是预先设定好的,且在服务器中存储测试用例与开发代码的对应关系。在一种实施方式中,可以将上述对应关系存储在测试用例与开发代码的关系表中。
即根据测试用例与开发代码的关系表,确定与所述测试用例对应的开发代码。当然,也可以采用其它的方式确定与所述测试用例对应的开发代码。
步骤130,读取所述开发代码的最新版本的版本号。
可选地,在所述读取所述开发代码的最新版本的版本号之前,所述方法还包括:
对所述开发代码进行处理,得到所述开发代码中覆盖的多个被测类。
此处,可以通过静态分析工具对开发代码进行分析,来得到开发代码中覆盖的多个被测类,多个被测类组成链路类集合,其中,链路类集合中的被测类可以包括如下几种类型:
1)测试用例中直接调用的属于开发代码库中的类;
2)被测方法参数列表中包括的开发代码库中的类;
3)被测类中依赖的其他开发代码库中的类;
参见图2所示的开发代码覆盖的链路类集合的示意图,图2中的链路类集合包括:直接被测类、参数列表中的类P、直接被测类依赖的类A、类B,类A依赖的类D,以及类P依赖的类C。对于类F和类E,虽然被依赖,但不属于当前分析的开发代码,因此不属于链路集合类。
进一步地,所述步骤130可以包括:
读取所述多个被测类中每个被测类对应的类文件的最新版本的版本号。
如前述例子,假设步骤120中确定的与测试用例1对应的开发代码为:开发代码A,而确定的与测试用例2对应的开发代码为:开发代码B,且假设开发代码A覆盖的多个被测类为:类Q和类P,而开发代码B覆盖的多个被测类为:类E和类F。而记录在SVN中的类Q、类P、类E以及类F对应的文件如表2所示:
表2
如表2所示的内容,其中,每一行记录可以为一个提交记录信息,前三行记录为开发代码A包括的三个记录信息,后三行记录为开发代码B包括的三个记录信息。对开发代码A的被测类:类Q,其最新版本为:版本2,而该最新版本的版本号为:4,因此,读取到的类Q对应的类文件的最新版本的版本号为:4;同理,读取到的类P对应的类文件的最新版本的版本号为:5;读取到的类E对应的类文件的最新版本的版本号为:14,读取到的类F对应的类文件的最新版本的版本号为:10。
步骤140,若所述开发代码的最新版本的版本号高于所述测试用例的最新版本的版本号,则将所述测试用例选取为目标测试用例。
可选地,若所述多个被测类中任一被测类对应的类文件的最新版本的版本号高于所述测试用例的最新版本的版本号,则判定所述开发代码的最新版本的版本号高于所述测试用例的最新版本的版本号。
如前述例子,对测试用例1,其最新版本的版本号为:6,而与测试用例1对应的开发代码A中类Q的最新版本的版本号为:4,类P的最新版本的版本号为:5,即类Q和类P的最新版本的版本号均低于测试用例1的最新版本的版本号,也即开发代码A的最新版本的版本号低于测试用例1的版本号;而对测试用例2,其最新版本的版本号为:13,而与测试用例2对应的开发代码B中类E的最新版本的版本号为:14,类F的最新版本的版本号为:10,即类E的最新版本的版本号高于测试用例2的最新版本的版本号,因此,开发代码B的最新版本的版本号高于测试用例2的最新版本的版本号,所以将测试用例2选取为目标测试用例。此处的目标测试用例为待变更的测试用例或者已经过期的测试用例。
可选地,当所述多个被测类中任一被测类对应的类文件的最新版本的版本号高于所述测试用例的最新版本的版本号时,所述方法还包括:
记录所述任一被测类的类名以及所述任一被测类对应的类文件的提交记录信息,其中,所述提交记录信息包括所述类文件的版本的版本号、记录时间以及注释信息。
优选地,所述类文件的版本的记录时间晚于所述测试用例的最新版本的记录时间。
如前述例子,提交记录信息可以如表3所示:
表3
表1中记录的版本的版本号和记录时间可以用来分析测试用例2过期的程度,注释信息可以用来帮助分析开发代码的变动是哪种类型的;此外,这些注释信息也可以用来帮助判断测试用例的过期是严重的必须修改的,还是可以接受的但建议修改的,也可以用来决定报警的等级。
当然,在实际应用中,在开发代码的最新版本的版本号高于与其对应的测试用例的最新版本的版本号的情况下,当上述两个版本之间间隔的版本的个数小于阈值时,该测试用例称为待变更的测试用例,这样的测试用例通常是可以接受的,因此,可以不将其选取为目标测试用例。所以,步骤140也可以进一步包括:
若所述开发代码的最新版本的版本号高于所述测试用例的最新版本的版本号,且所述测试用例最后一次更新后,所述开发代码包括多个提交记录信息,则将所述测试用例选取为目标测试用例。
此处,所述测试用例的最后一次更新后即为提交所述测试用例的最新版本后,如表1中,测试用例1的最后一个更新即为提交测试用例1的版本3。所述测试用例最后一次更新后,所述开发代码包括多个提交记录信息时,所述测试用例通常称为已过期的测试用例,这些测试用例的执行结果已经无法正确反映开发代码的质量,因此,当选取出已过期的测试用例时,通常需要输出预警信息。
本申请实施例提供的测试用例的选取方法,通过自动地将测试用例的最新版本的版本号与相应的开发代码的最新版本的版本号进行比较,来选取目标测试用例,从而可以提高选取结果的准确性和效率,且节省了人力资源。
图3为本申请另一种实施例提供的测试用例的选取方法流程图,所述方法的执行主体可以为具有处理能力的设备:服务器或者系统或者装置,如图3所示,所述方法具体可以包括:
步骤310,获取测试用例集合。
步骤320,判断是否可以从测试用例集合中获取下一个测试用例,若否,则执行步骤330,若是,则执行步骤340。
当然,在第一次执行该步骤时,获取的下一个测试用例为测试用例集合中的第一个测试用例。
步骤330,输出预警信息。
步骤340,读取从步骤320中获取的测试用例的最新版本的版本号。
步骤350,确定与该测试用例对应的开发代码。
步骤360,对所述开发代码进行处理,得到所述开发代码中覆盖的多个被测类,多个被测类组成链路类集合。
步骤370,判断是否可以从链路类集合中获取下一个被测类,若否,则执行步骤320,若是,则执行步骤380。
步骤380,读取从步骤370中获取的被测类对应的类文件的最新版本的版本号。
步骤390,判断类文件的最新版本的版本号是否高于测试用例的最新版本的版本号,若否,则执行步骤370,若是,则执行步骤3100。
步骤3100,记录该被测类的类名以及该被测类对应的类文件的提交记录信息。
其中,所述提交记录信息包括所述类文件的版本的版本号、记录时间以及注释信息。
本申请实施例提供的测试用例的选取方法,通过自动地将测试用例的最新版本的版本号与相应的开发代码的最新版本的版本号进行比较,来选取目标测试用例,从而可以提高选取结果的准确性和效率,且节省了人力资源。
与上述测试用例的选取方法对应地,本申请实施例还提供的一种测试用例的选取装置,如图4所示,该装置包括:获取单元401、读取单元402和选取单元403。
获取单元401,用于获取测试用例集合,所述测试用例集合中包括多个测试用例。
读取单元402,用于对获取单元401获取的所述测试用例集合中的每个测试用例,读取所述测试用例的最新版本的版本号,确定与所述测试用例对应的开发代码。
读取单元402,还用于读取所述开发代码的最新版本的版本号。
选取单元403,用于若读取单元402读取的所述开发代码的最新版本的版本号高于所述测试用例的最新版本的版本号,则将所述测试用例选取为目标测试用例。
选取单元403具体用于:若所述开发代码的最新版本的版本号高于所述测试用例的最新版本的版本号,且所述测试用例最后一次更新后,所述开发代码包括多个提交记录信息,则将所述测试用例选取为目标测试用例。
可选地,所述装置还包括:处理单元404,用于对所述开发代码进行处理,得到所述开发代码中覆盖的多个被测类;
读取单元402具体用于:读取所述多个被测类中每个被测类对应的类文件的最新版本的版本号。
可选地,所述装置还包括:判定单元405,用于若所述多个被测类中任一被测类对应的类文件的最新版本的版本号高于所述测试用例的最新版本的版本号,则判定所述开发代码的最新版本的版本号高于所述测试用例的最新版本的版本号。
可选地,所述装置还包括:记录单元406,用于记录所述任一被测类的类名以及所述任一被测类对应的类文件的提交记录信息,其中,所述提交记录信息包括所述类文件的版本的版本号、记录时间以及注释信息。
其中,所述类文件的版本的记录时间晚于所述测试用例的最新版本的记录时间。
本申请实施例装置的各功能模块的功能,可以通过上述方法实施例的各步骤来实现,因此,本申请提供的装置的具体工作过程,在此不复赘述。
本申请提供的测试用例的选取装置,获取单元401获取测试用例集合,所述测试用例集合中包括多个测试用例;读取单元402对所述测试用例集合中的每个测试用例,读取所述测试用例的最新版本的版本号,确定与所述测试用例对应的开发代码;读取单元402读取所述开发代码的最新版本的版本号;选取单元403若所述开发代码的最新版本的版本号高于所述测试用例的最新版本的版本号,则将所述测试用例选取为目标测试用例。由此,可以提高选取结果的准确性和效率,且节省了人力资源。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的对象及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。