首页> 中国专利> 安卓软件集成测试中的覆盖率测试方法、装置

安卓软件集成测试中的覆盖率测试方法、装置

摘要

本申请涉及一种安卓软件集成测试中的覆盖率测试方法、装置、计算机设备和存储介质。该方法包括:获取待测软件在当前版本的所有版本分支的分测覆盖率数据;获取待测软件在当前版本的发布分支的差异日志,根据差异日志合并所有版本分支的分测覆盖率数据得到合并后的分测覆盖率数据;根据差异日志检测出发布分支的所有diff方法和所有非diff方法,对发布分支代码中与该所有diff方法对应的代码进行集成覆盖率测试,获得初始集测覆盖率数据;合并初始集测覆盖率数据与合并后的分测覆盖率数据得到最终的集测覆盖率数据,根据其生成覆盖率报告。本申请对发布分支代码做覆盖率测试时能够复用其中已单独测试过的代码的覆盖率数据,提高对发布分支代码的测试效率。

著录项

  • 公开/公告号CN112463620A

    专利类型发明专利

  • 公开/公告日2021-03-09

    原文格式PDF

  • 申请/专利权人 广州品唯软件有限公司;

    申请/专利号CN202011406234.8

  • 发明设计人 陈策;

    申请日2020-12-03

  • 分类号G06F11/36(20060101);

  • 代理机构11111 北京市万慧达律师事务所;

  • 代理人刘艳丽

  • 地址 510220 广东省广州市海珠区鼎新路128号唯品会总部大厦

  • 入库时间 2023-06-19 10:08:35

说明书

技术领域

本申请涉及软件测试技术领域,特别是涉及一种安卓软件集成测试中的覆盖率测试方法、装置、计算机设备和存储介质。

背景技术

在软件测试中,通常需要对软件测试过程进行代码覆盖率的统计。代码覆盖率表示代码在测试中能够被覆盖的程度。一般地,软件测试人员通过代码覆盖率的高低决定是否需要重复执行软件测试。

应用程序的一个版本可能有多个需求(比如几十个需求),在开发时会为每个需求建立一个分支来进行开发,开发好的每个分支的代码需要一一经过覆盖率测试,如果每个分支的代码在测试中都没有发现bug以及代码覆盖率能够达标,则需要将每个分支的代码合并到发布分支中,然后再对发布分支的代码(即合并所有分支的代码得到的代码)进行覆盖率测试。

然而,各分支的代码中只有部分代码在合并到发布分支后会有所改动,然而各分支代码中合并到发布分支后没有改动的那部分代码在合并之后也需要再进行测试,这使得测试效率不高。

发明内容

本发明针对现有技术的缺点,提供了一种安卓软件集成测试中的覆盖率测试方法、装置、计算机设备和存储介质,本发明实施例能够提高对发布分支代码的测试效率。

本发明根据第一方面提供了一种安卓软件集成测试中的覆盖率测试方法,在一个实施例中,该方法包括:

获取待测软件在当前版本的所有版本分支对应的分测覆盖率数据;

获取待测软件在当前版本的发布分支对应的差异日志,差异日志是将发布分支的发布分支代码与所有版本分支的原始版本分支代码进行diff对比而生成的;

根据差异日志将所有版本分支对应的分测覆盖率数据进行合并处理,得到合并后的分测覆盖率数据;

根据差异日志检测出发布分支对应的所有diff方法和所有非diff方法,对发布分支代码中与所有diff方法对应的代码进行集成覆盖率测试,获得发布分支的初始集测覆盖率数据;

将发布分支的初始集测覆盖率数据与合并后的分测覆盖率数据进行合并处理,得到最终的集测覆盖率数据;

根据最终的集测覆盖率数据生成发布分支在集成覆盖率测试中对应的覆盖率报告。

在一个实施例中,获取待测软件在当前版本的所有版本分支对应的分测覆盖率数据的步骤,包括:

获取测试设备上传的多份分支覆盖率文件,测试设备的数量为若干个,每份分支覆盖率文件是一个测试设备对一个版本分支的版本分支代码进行分支覆盖率测试而生成的;

分别根据每个版本对应的分支覆盖率文件生成每个版本分支的分测覆盖率数据,得到所有版本分支代码的分测覆盖率数据。

在一个实施例中,发布版本代码是对所有版本分支的原始版本分支代码进行合并操作得到的,发布版本代码包括每个版本分支的合并后版本分支代码,每个版本分支的合并后版本分支代码包括多个类的类代码,每个类的类代码包括多个方法的方法代码。

在一个实施例中,该方法还包括:

将发布分支代码包括的每个版本分支的合并后版本分支代码与该版本分支的原始版本分支代码进行diff对比,确定出每个版本分支的合并后版本分支代码相对于该版本分支的原始版本分支代码所存在的所有的差异代码行;

获取每个版本分支的合并后版本分支代码中存在的所有差异代码行在其中对应的位置信息,根据位置信息生成该版本分支对应的键值对信息;

根据生成的每个版本分支对应的键值对信息生成发布分支对应的差异日志。

在一个实施例中,每个版本分支对应的键值对信息包括键名信息和键值信息;

根据差异日志将所有版本分支对应的分测覆盖率数据进行合并处理,得到合并后的分测覆盖率数据的步骤,包括:

将每个版本分支对应的分测覆盖率数据与差异日志中与该版本分支对应的键值对信息中的键值信息进行合并,得到合并后的分测覆盖率数据。

在一个实施例中,根据差异日志检测出发布分支对应的所有diff方法和所有非diff方法的步骤,包括:

遍历发布分支的每个方法,在遍历到一个方法时,查询差异日志,若从差异日志中查询得到与该方法对应的diff行信息,将该方法确定为diff方法;若从差异日志中查询不到与该方法对应的diff行信息,将该方法确定为非diff方法。

在一个实施例中,将发布分支的初始集测覆盖率数据与合并后的分测覆盖率数据进行合并,得到最终的集测覆盖率数据的步骤,包括:

将发布分支的初始集测覆盖率数据中与每个diff方法对应的集测覆盖率数据,替换合并后的分测覆盖率数据中与该diff方法对应的diff行信息,得到最终的集测覆盖率数据。

在一个实施例中,根据最终的集测覆盖率数据生成发布分支在集成覆盖率测试中对应的覆盖率报告的步骤,包括:

为最终的集测覆盖率数据中与每个非diff方法对应的集测覆盖率数据设置与该非diff方法对应的版本分支相应的预设标识,得到标记后的集测覆盖率数据;

根据标记后的集测覆盖率数据生成html格式的覆盖率报告,在生成覆盖率报告时,为设置有预设标识的集测覆盖率数据添加用于区别显示的标记。

本发明根据第二方面提供了一种安卓软件集成测试中的覆盖率测试装置,在一个实施例中,该装置包括:

分测数据获取模块,用于获取待测软件在当前版本的所有版本分支对应的分测覆盖率数据;

差异日志获取模块,用于获取待测软件在当前版本的发布分支对应的差异日志,差异日志是将发布分支的发布分支代码与所有版本分支的原始版本分支代码进行diff对比而生成的;

第一数据合并模块,用于根据差异日志将所有版本分支对应的分测覆盖率数据进行合并处理,得到合并后的分测覆盖率数据;

集成覆盖率测试模块,用于根据差异日志检测出发布分支对应的所有diff方法和所有非diff方法,对发布分支代码中与所有diff方法对应的代码进行集成覆盖率测试,获得发布分支的初始集测覆盖率数据;

第二数据合并模块,用于将发布分支的初始集测覆盖率数据与合并后的分测覆盖率数据进行合并处理,得到最终的集测覆盖率数据;

覆盖率报告生成模块,用于根据最终的集测覆盖率数据生成发布分支在集成覆盖率测试中对应的覆盖率报告。

本发明根据第三方面提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任一方法的实施例的步骤。

本发明根据第四方面提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述任一方法的实施例的步骤。

在本发明实施例中,获取待测软件在当前版本的所有版本分支对应的分测覆盖率数据以及获取待测软件在当前版本的发布分支对应的差异日志,然后根据差异日志将所有版本分支对应的分测覆盖率数据进行合并处理以得到合并后的分测覆盖率数据,再根据差异日志检测出发布分支对应的所有diff方法和所有非diff方法,并对发布分支代码中与该所有diff方法对应的代码进行集成覆盖率测试从而获得发布分支的初始集测覆盖率数据,接着将发布分支的初始集测覆盖率数据与合并后的分测覆盖率数据进行合并处理以得到最终的集测覆盖率数据,最后根据最终的集测覆盖率数据生成发布分支在集成覆盖率测试中对应的覆盖率报告,本实施例在对发布分支的发布分支代码进行覆盖率测试时对其中已经单独测试过的代码的覆盖率数据进行复用,因而不需要对已经单独测试过的代码再次进行测试,从而提高了对发布分支代码进行代码覆盖率测试的测试效率。

附图说明

图1为一个实施例中一种安卓软件集成测试中的覆盖率测试方法的应用环境图;

图2为一个实施例中一种安卓软件集成测试中的覆盖率测试方法的流程示意图;

图3为一个实施例中一种安卓软件集成测试中的覆盖率测试装置的结构框图;

图4为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本申请,并不用于限定本申请。

如图1所示为本发明一个实施例中安卓软件集成测试中的覆盖率测试方法的应用环境。

其中,测试服务器10与多个测试设备(如图1所示的21/22/23),通过网络进行通信。在一个实施方式中,测试服务器10可以向各个测试设备下发待测软件的某个或多个版本分支的开发包,从而测试设备可以对其接收到的开发包进行软件测试,并在完成测试之后,将测试得到的数据(如ec文件)上传给测试服务器10,测试服务器10会将测试设备返回的数据存储到数据库中备用,从而测试服务器10可以基于测试设备返回的数据来进行后续的集成测试。需要说明的是,每个测试设备可以用来对一个或多个版本分支的apk包进行测试,测试设备可以是但不限于是各种智能手机、平板电脑等,测试服务器10可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

本发明提供了一种安卓软件集成测试中的覆盖率测试方法,下面以该方法应用于图1中的测试服务器为例进行说明。在一个实施例中,如图2所示,该方法包括以下步骤:

S110:获取待测软件在当前版本的所有版本分支对应的分测覆盖率数据。

在本实施例中,应用程序的一个版本可能有多个需求(比如几十个需求),在开发时会为每个需求建立一个分支分别进行开发,开发好的每个分支的代码需要一一经过测试(为了方便区分,将对分支的代码的覆盖率测试称为分支覆盖率测试),如果每个分支的代码都通过测试,即在测试中都没有发现bug以及代码覆盖率能够达标,则需要将每个分支的代码合并到发布分支中,然后再对发布分支的代码(即合并所有分支的代码得到的代码)进行集成测试(为了方便区分,将集成测试中对发布分支的代码的覆盖率测试称为集成覆盖率测试)。在对待测软件当前版本的发布分支代码(即发布分支的代码)进行集成覆盖率测试时,获取待测软件在当前版本的所有版本分支对应的分测覆盖率数据,版本分支对应的分测覆盖率数据是对版本分支的代码(即版本分支代码)进行分支覆盖率测试而得到的。

在一个实施方式中,获取待测软件在当前版本的所有版本分支对应的分测覆盖率数据的步骤,包括:获取测试设备上传的多份分支覆盖率文件,测试设备的数量为若干个,每份分支覆盖率文件是一个测试设备对一个版本分支的版本分支代码进行分支覆盖率测试而生成的;分别根据每个版本对应的分支覆盖率文件生成每个版本分支的分测覆盖率数据,得到所有版本分支代码的分测覆盖率数据。

在本实施方式中,对于每个版本分支(不同版本分支可以通过分配不同的commitid来进行区分)的原始版本分支代码(原始版本分支代码是指在合并到发布分支之前版本分支的代码),测试服务器使用静态插桩的方式将该原始版本分支代码打包成apk包(其中插桩时为每行代码插上标记位,比如标记位默认设置为false以表示代码没有执行过),并将编译过程文件classes文件进行备份,之后将apk包发送给测试设备,测试设备接收到apk包之后运行apk包并执行测试用例,测试设备会将apk包的代码中被执行过的代码所对应的标记位进行修改,比如将false修改为true(表示代码执行过),执行测试用例后测试设备将apk包的所有代码的标记位信息保存为一份ec文件并上传到测试服务器,测试设备会对apk包进行多次测试,每次测试后就将生成的ec文件上传到测试服务器,因此测试服务器会收到与一个apk相关的多个ec文件,在测试设备完成对一个apk包的所有测试后,测试服务器会将与apk包相关的多份ec文件进行合并从而得到合并后的ec文件,再使用jacoco命令行工具(一款开源的覆盖率测试工具)加载之前备份的classes文件以及该合并后的ec文件来生成覆盖率报告,即原始版本分支代码的分测覆盖率数据(指原始版本分支代码在分支覆盖率测试中测到的覆盖率数据),其可以包括该原始版本分支代码中哪些代码行在分支测试时被执行过,哪些没有执行过,以及被执行过的代码在该部分代码中所占的比例等数据。

S120:获取待测软件在当前版本的发布分支对应的差异日志。

在本实施例中,差异日志是将发布分支的发布分支代码与所有版本分支的原始版本分支代码进行diff对比而生成的。其中,发布版本代码是对所有版本分支的原始版本分支代码进行合并操作(merge)得到的,发布版本代码包括每个版本分支的合并后版本分支代码,每个版本分支的合并后版本分支代码包括多个类的类代码,每个类的类代码包括多个方法的方法代码。

通过前述说明可知,各个版本分支的代码(即原始版本分支代码)合并到发布分支之后,各个版本分支的代码可能会有所改动,比如某个类中的某个方法发生了改动等,所以各个版本分支对应的合并前的代码(即原始版本分支代码)跟合并后的代码(即合并后版本分支代码)不完全相同。通过发布分支的差异日志可以检测出发布分支代码中各个版本分支的合并后分支代码包含的合并后没有发生的改动的部分代码和发生改动的部分代码,对于每个版本分支的合并后没有发生改动的部分代码,本实施例在集成测试中不对其进行覆盖率测试,而是对其(即该部分代码)对应的覆盖率数据(可以包括该部分代码中哪些代码行在分支测试时被执行过,哪些没有执行过,以及被执行过的代码在该部分代码中所占的比例等数据)进行复用。

待测软件在当前版本的发布分支对应的差异日志可以是预先生成并存储在数据库中,当进行集成覆盖率测试需要使用时再从数据库中获取,也可以是在集成覆盖率测试时再生成。

在一个实施方式中,测试服务器生成上述差异日志的过程可以是如下所示:将发布分支代码包括的每个版本分支的合并后版本分支代码与该版本分支的原始版本分支代码进行diff对比,确定出每个版本分支的合并后版本分支代码相对于该版本分支的原始版本分支代码所存在的所有的差异代码行;获取每个版本分支的合并后版本分支代码中存在的所有差异代码行在其中对应的位置信息,根据位置信息生成该版本分支对应的键值对信息;根据生成的每个版本分支对应的键值对信息生成发布分支对应的差异日志。

具体地,可以使用git工具的diff命令来对比出每个版本分支的合并后分支代码相对于原始版本分支代码变更了的差异代码行,差异代码行在合并后分支代码中的位置信息用于确定差异代码行属于哪个合并后分支代码、属于该代码中的哪个类、属于该类中的哪个方法以及在该方法中属于哪一行,示例性地其中可以包括文件名如版本分支的标识、类名和方法名、以及差异代码行对应的行数等信息。每个版本分支对应一个键值对信息,每个版本分支对应的键值对信息(即key-value)包括键名信息(即key)和键值信息(即value),示例性地,存储形式可以如下所示:

其中版本分支的键名信息可以是版本分支的分支标识,也可以是文件名(如上述例子中的“Filename”),键值信息可以是版本分支包括的所有类的信息,每个类的信息也以键值对的形式来存储,可以将类名(如上述例子中的“classA”)作为键值对的键名(即key),将类中所有方法的信息作为该键名对应的键值(即value),而每个方法的信息也可以以键值对的形式来存储,以方法的方法名(如上述例子中的“methodA-1”)作为键名(即key),以该方法中差异代码行,即diff行的行数(或称为行号)作为该键名对应的键值(即value),比如上述例子中的“methodA-1”对应的diff行的行数为1和2,这表示“methodA-1”这个方法中的第1行和第2行代码属于diff行。

S130:根据差异日志将所有版本分支对应的分测覆盖率数据进行合并处理,得到合并后的分测覆盖率数据。

在本实施例中,测试服务器在合并各版本分支的分测覆盖率数据时,将每个版本分支对应的分测覆盖率数据与差异日志中与该版本分支对应的键值对信息中的键值信息进行合并,得到合并后的分测覆盖率数据。

具体地,测试服务器可以按照文件-类-方法的顺序遍历每个版本分支的每个类中的每个方法,然后根据该方法在差异日志中对应的diff行信息来判断该方法是属于diff方法还是属于非diff方法,假如遍历到的方法属于非diff方法,那么将该非diff方法对应的分测覆盖率数据合并到差异日志中。比如,上述例子中的“classA”包含非diff方法“methodA-3”和“methodA-4”,这两个方法对应的分测覆盖率数据分别为全覆盖和第1/2/5行覆盖,那么合并后的“classA”的分测覆盖率数据可以是:

“classA”:{

“methodA-3”:[-1],“methodA-4”:[1,2,5]

};

其中,“-1”表示全覆盖。

在使用上述的合并覆盖率数据的方式将每个版本分支的每个非diff方法的分测覆盖率数据都合并到差异日志之后,就得到该合并后的分测覆盖率数据。

S140:根据差异日志检测出发布分支对应的所有diff方法和所有非diff方法,对发布分支代码中与该所有diff方法对应的代码进行集成覆盖率测试,获得发布分支的初始集测覆盖率数据。

在本实施例中,测试服务器在根据差异日志检测出发布分支对应的所有diff方法和所有非diff方法时,遍历发布分支的每个方法(method),具体可以按照文件-类-方法的顺序来进行遍历,在遍历到一个方法时,查询差异日志,若从差异日志中查询得到与该方法对应的diff行信息(比如,上述例子中的“methodA-1”:[1,2],diff行信息是指[1,2]),将该方法确定为diff方法,具体地,一个方法通常包含多行代码,只要有一行代码属于diff行(即属于差异代码行),则确定该方法属于diff方法,若从差异日志中查询不到与该方法对应的diff行信息,将该方法确定为非diff方法。

测试服务器通过差异日志获取发布分支对应的所有diff方法对应的代码(即所有版本分支的合并后分支代码中的diff方法对应的代码)进行集成覆盖率测试,从而获得发布分支的初始集测覆盖率数据。

S150:将发布分支的初始集测覆盖率数据与合并后的分测覆盖率数据进行合并处理,得到最终的集测覆盖率数据。

在本实施例中,测试服务器需要将获得的初始集测覆盖率数据与合并后的分测覆盖率数据进行合并处理以得到最终的集测覆盖率数据。其中,测试服务器可以将发布分支的初始集测覆盖率数据中的与每个diff方法对应的集测覆盖率数据替换掉合并后的分测覆盖率数据中的与该diff方法对应的diff行信息,从而得到最终的集测覆盖率数据。

比如,在上述例子中,由于“classA”这个类中的“methodA-1”和“methodA-2”都有对应的diff行信息,因此这两个都属于diff方法,在对其进行测试之后,从初始集测覆盖率数据中可以获得这两个diff方法对应的集测覆盖率数据为第2/4/6行覆盖和全覆盖,那么合并后的“classA”的分测覆盖率数据可以是:

在使用上述的合并集测覆盖率数据和diff行信息的方式将每个版本分支的每个diff方法的集测覆盖率数据跟其在合并后的分测覆盖率数据中对应的diff行信息后,就得到最终的集测覆盖率数据。

S160:根据最终的集测覆盖率数据生成发布分支在集成覆盖率测试中对应的覆盖率报告。

在本实施例中,测试服务器可以继续使用jacoco工具来加载该最终的集测覆盖率数据并生成覆盖率报告。

在一个实施方式中,根据最终的集测覆盖率数据生成发布分支在集成覆盖率测试中对应的覆盖率报告的步骤,包括:

为最终的集测覆盖率数据中与每个非diff方法对应的集测覆盖率数据设置与该非diff方法对应的版本分支相应的预设标识,得到标记后的集测覆盖率数据;

根据标记后的集测覆盖率数据生成html格式的覆盖率报告,在生成覆盖率报告时,为设置有预设标识的集测覆盖率数据添加用于区别显示的标记。

具体地,测试服务器会为最终的集测覆盖率数据中经过合并的覆盖率数据(指复用的分测覆盖率数据)打上预设标记,从而在生成覆盖率报告时,可以针对标记后的集测覆盖率数据中带有预设标记的覆盖率数据在UI中加特殊标记以进行区别显示(比如在代码行的前面加上@@或##等标记),方便阅读覆盖率报告的人能够直观地看出哪些覆盖率数据是复用的。

本发明实施例通过测试服务器获取待测软件在当前版本的所有版本分支对应的分测覆盖率数据以及获取待测软件在当前版本的发布分支对应的差异日志,然后根据差异日志将所有版本分支对应的分测覆盖率数据进行合并处理以得到合并后的分测覆盖率数据,再根据差异日志检测出发布分支对应的所有diff方法和所有非diff方法,并对发布分支代码中与该所有diff方法对应的代码进行集成覆盖率测试从而获得发布分支的初始集测覆盖率数据,接着将发布分支的初始集测覆盖率数据与合并后的分测覆盖率数据进行合并处理以得到最终的集测覆盖率数据,最后根据最终的集测覆盖率数据生成发布分支在集成覆盖率测试中对应的覆盖率报告,由于测试服务器能够实现在对发布分支的发布分支代码进行覆盖率测试时对其中已经单独测试过的代码的覆盖率数据进行复用,因而不需要再对已经单独测试过的代码进行测试,从而提高了对发布分支代码进行代码覆盖率测试的测试效率。

需要说明的是,虽然图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

基于相同的发明构思,本发明还提供了一种安卓软件集成测试中的覆盖率测试装置。在一个实施例中,如图3所示,该安卓软件集成测试中的覆盖率测试装置包括以下模块:

分测数据获取模块110,用于获取待测软件在当前版本的所有版本分支对应的分测覆盖率数据;

差异日志获取模块120,用于获取待测软件在当前版本的发布分支对应的差异日志,差异日志是将发布分支的发布分支代码与所有版本分支的原始版本分支代码进行diff对比而生成的;

第一数据合并模块130,用于根据差异日志将所有版本分支对应的分测覆盖率数据进行合并处理,得到合并后的分测覆盖率数据;

集成覆盖率测试模块140,用于根据差异日志检测出发布分支对应的所有diff方法和所有非diff方法,对发布分支代码中与所有diff方法对应的代码进行集成覆盖率测试,获得发布分支的初始集测覆盖率数据;

第二数据合并模块150,用于将发布分支的初始集测覆盖率数据与合并后的分测覆盖率数据进行合并处理,得到最终的集测覆盖率数据;

覆盖率报告生成模块160,用于根据最终的集测覆盖率数据生成发布分支在集成覆盖率测试中对应的覆盖率报告。

在一个实施例中,发布版本代码是对所有版本分支的原始版本分支代码进行合并操作得到的,发布版本代码包括每个版本分支的合并后版本分支代码,每个版本分支的合并后版本分支代码包括多个类的类代码,每个类的类代码包括多个方法的方法代码。

在一个实施例中,分测数据获取模块,包括:

分支文件获取子模块,用于获取测试设备上传的多份分支覆盖率文件,测试设备的数量为若干个,每份分支覆盖率文件是一个测试设备对一个版本分支的版本分支代码进行分支覆盖率测试而生成的;

分测数据生成子模块,用于分别根据每个版本对应的分支覆盖率文件生成每个版本分支的分测覆盖率数据,得到所有版本分支代码的分测覆盖率数据。

在一个实施例中,该装置还包括:

对比模块,用于将发布分支代码包括的每个版本分支的合并后版本分支代码与该版本分支的原始版本分支代码进行diff对比,确定出每个版本分支的合并后版本分支代码相对于该版本分支的原始版本分支代码所存在的所有的差异代码行;

键值对信息生成模块,用于获取每个版本分支的合并后版本分支代码中存在的所有差异代码行在其中对应的位置信息,根据位置信息生成该版本分支对应的键值对信息;

差异日志生成模块,用于根据生成的每个版本分支对应的键值对信息生成发布分支对应的差异日志。

在一个实施例中,每个版本分支对应的键值对信息包括键名信息和键值信息。本实施例中,第一数据合并模块,还用于将每个版本分支对应的分测覆盖率数据与差异日志中与该版本分支对应的键值对信息中的键值信息进行合并,得到合并后的分测覆盖率数据。

在一个实施例中,集成覆盖率测试模块,还用于遍历发布分支的每个方法,在遍历到一个方法时,查询差异日志,若从差异日志中查询得到与该方法对应的diff行信息,将该方法确定为diff方法;若从差异日志中查询不到与该方法对应的diff行信息,将该方法确定为非diff方法。

在一个实施例中,第二数据合并模块,还用于将发布分支的初始集测覆盖率数据中与每个diff方法对应的集测覆盖率数据,替换合并后的分测覆盖率数据中与该diff方法对应的diff行信息,得到最终的集测覆盖率数据。

在一个实施例中,覆盖率报告生成模块,包括:

预设标记设置子模块,用于为最终的集测覆盖率数据中与每个非diff方法对应的集测覆盖率数据设置与该非diff方法对应的版本分支相应的预设标识,得到标记后的集测覆盖率数据;

覆盖率报告生成子模块,用于根据标记后的集测覆盖率数据生成html格式的覆盖率报告,在生成覆盖率报告时,为设置有预设标识的集测覆盖率数据添加用于区别显示的标记。

关于安卓软件集成测试中的覆盖率测试装置的具体限定可以参见上文中对于安卓软件集成测试中的覆盖率测试方法的限定,在此不再赘述。上述安卓软件集成测试中的覆盖率测试装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,其内部结构图可以如图4所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储分测覆盖率数据、分测覆盖率文件等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种安卓软件集成测试中的覆盖率测试方法。

本领域技术人员可以理解,图4中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:

获取待测软件在当前版本的所有版本分支对应的分测覆盖率数据;获取待测软件在当前版本的发布分支对应的差异日志,差异日志是将发布分支的发布分支代码与所有版本分支的原始版本分支代码进行diff对比而生成的;根据差异日志将所有版本分支对应的分测覆盖率数据进行合并处理,得到合并后的分测覆盖率数据;根据差异日志检测出发布分支对应的所有diff方法和所有非diff方法,对发布分支代码中与所有diff方法对应的代码进行集成覆盖率测试,获得发布分支的初始集测覆盖率数据;将发布分支的初始集测覆盖率数据与合并后的分测覆盖率数据进行合并处理,得到最终的集测覆盖率数据;根据最终的集测覆盖率数据生成发布分支在集成覆盖率测试中对应的覆盖率报告。

在一个实施例中,处理器执行计算机程序,实现获取待测软件在当前版本的所有版本分支对应的分测覆盖率数据时,还实现以下步骤:

获取测试设备上传的多份分支覆盖率文件,测试设备的数量为若干个,每份分支覆盖率文件是一个测试设备对一个版本分支的版本分支代码进行分支覆盖率测试而生成的;分别根据每个版本对应的分支覆盖率文件生成每个版本分支的分测覆盖率数据,得到所有版本分支代码的分测覆盖率数据。

在一个实施例中,发布版本代码是对所有版本分支的原始版本分支代码进行合并操作得到的,发布版本代码包括每个版本分支的合并后版本分支代码,每个版本分支的合并后版本分支代码包括多个类的类代码,每个类的类代码包括多个方法的方法代码。处理器执行计算机程序,还实现以下步骤:

将发布分支代码包括的每个版本分支的合并后版本分支代码与该版本分支的原始版本分支代码进行diff对比,确定出每个版本分支的合并后版本分支代码相对于该版本分支的原始版本分支代码所存在的所有的差异代码行;获取每个版本分支的合并后版本分支代码中存在的所有差异代码行在其中对应的位置信息,根据位置信息生成该版本分支对应的键值对信息;根据生成的每个版本分支对应的键值对信息生成发布分支对应的差异日志。

在一个实施例中,每个版本分支对应的键值对信息包括键名信息和键值信息;处理器执行计算机程序,实现根据差异日志将所有版本分支对应的分测覆盖率数据进行合并处理,得到合并后的分测覆盖率数据时,还实现以下步骤:

将每个版本分支对应的分测覆盖率数据与差异日志中与该版本分支对应的键值对信息中的键值信息进行合并,得到合并后的分测覆盖率数据。

在一个实施例中,处理器执行计算机程序,实现根据差异日志检测出发布分支对应的所有diff方法和所有非diff方法时,还实现以下步骤:

遍历发布分支的每个方法,在遍历到一个方法时,查询差异日志,若从差异日志中查询得到与该方法对应的diff行信息,将该方法确定为diff方法;若从差异日志中查询不到与该方法对应的diff行信息,将该方法确定为非diff方法。

在一个实施例中,处理器执行计算机程序,实现将发布分支的初始集测覆盖率数据与合并后的分测覆盖率数据进行合并,得到最终的集测覆盖率数据时,还实现以下步骤:

将发布分支的初始集测覆盖率数据中与每个diff方法对应的集测覆盖率数据,替换合并后的分测覆盖率数据中与该diff方法对应的diff行信息,得到最终的集测覆盖率数据。

在一个实施例中,处理器执行计算机程序时,实现根据最终的集测覆盖率数据生成发布分支在集成覆盖率测试中对应的覆盖率报告时,还实现以下步骤:

为最终的集测覆盖率数据中与每个非diff方法对应的集测覆盖率数据设置与该非diff方法对应的版本分支相应的预设标识,得到标记后的集测覆盖率数据;根据标记后的集测覆盖率数据生成html格式的覆盖率报告,在生成覆盖率报告时,为设置有预设标识的集测覆盖率数据添加用于区别显示的标记。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:

获取待测软件在当前版本的所有版本分支对应的分测覆盖率数据;获取待测软件在当前版本的发布分支对应的差异日志,差异日志是将发布分支的发布分支代码与所有版本分支的原始版本分支代码进行diff对比而生成的;根据差异日志将所有版本分支对应的分测覆盖率数据进行合并处理,得到合并后的分测覆盖率数据;根据差异日志检测出发布分支对应的所有diff方法和所有非diff方法,对发布分支代码中与所有diff方法对应的代码进行集成覆盖率测试,获得发布分支的初始集测覆盖率数据;将发布分支的初始集测覆盖率数据与合并后的分测覆盖率数据进行合并处理,得到最终的集测覆盖率数据;根据最终的集测覆盖率数据生成发布分支在集成覆盖率测试中对应的覆盖率报告。

在一个实施例中,计算机程序被处理器执行,获取待测软件在当前版本的所有版本分支对应的分测覆盖率数据时,还实现以下步骤:

获取测试设备上传的多份分支覆盖率文件,测试设备的数量为若干个,每份分支覆盖率文件是一个测试设备对一个版本分支的版本分支代码进行分支覆盖率测试而生成的;分别根据每个版本对应的分支覆盖率文件生成每个版本分支的分测覆盖率数据,得到所有版本分支代码的分测覆盖率数据。

在一个实施例中,发布版本代码是对所有版本分支的原始版本分支代码进行合并操作得到的,发布版本代码包括每个版本分支的合并后版本分支代码,每个版本分支的合并后版本分支代码包括多个类的类代码,每个类的类代码包括多个方法的方法代码。计算机程序被处理器执行,还实现以下步骤:

将发布分支代码包括的每个版本分支的合并后版本分支代码与该版本分支的原始版本分支代码进行diff对比,确定出每个版本分支的合并后版本分支代码相对于该版本分支的原始版本分支代码所存在的所有的差异代码行;获取每个版本分支的合并后版本分支代码中存在的所有差异代码行在其中对应的位置信息,根据位置信息生成该版本分支对应的键值对信息;根据生成的每个版本分支对应的键值对信息生成发布分支对应的差异日志。

在一个实施例中,每个版本分支对应的键值对信息包括键名信息和键值信息;计算机程序被处理器执行,根据差异日志将所有版本分支对应的分测覆盖率数据进行合并处理,得到合并后的分测覆盖率数据时,还实现以下步骤:

将每个版本分支对应的分测覆盖率数据与差异日志中与该版本分支对应的键值对信息中的键值信息进行合并,得到合并后的分测覆盖率数据。

在一个实施例中,计算机程序被处理器执行,根据差异日志检测出发布分支对应的所有diff方法和所有非diff方法时,还实现以下步骤:

遍历发布分支的每个方法,在遍历到一个方法时,查询差异日志,若从差异日志中查询得到与该方法对应的diff行信息,将该方法确定为diff方法;若从差异日志中查询不到与该方法对应的diff行信息,将该方法确定为非diff方法。

在一个实施例中,计算机程序被处理器执行,将发布分支的初始集测覆盖率数据与合并后的分测覆盖率数据进行合并,得到最终的集测覆盖率数据时,还实现以下步骤:

将发布分支的初始集测覆盖率数据中与每个diff方法对应的集测覆盖率数据,替换合并后的分测覆盖率数据中与该diff方法对应的diff行信息,得到最终的集测覆盖率数据。

在一个实施例中,计算机程序被处理器执行时,根据最终的集测覆盖率数据生成发布分支在集成覆盖率测试中对应的覆盖率报告时,还实现以下步骤:

为最终的集测覆盖率数据中与每个非diff方法对应的集测覆盖率数据设置与该非diff方法对应的版本分支相应的预设标识,得到标记后的集测覆盖率数据;根据标记后的集测覆盖率数据生成html格式的覆盖率报告,在生成覆盖率报告时,为设置有预设标识的集测覆盖率数据添加用于区别显示的标记。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号