一种基于Android应用的覆盖率测试方法与流程

专利2023-06-01  111


一种基于android应用的覆盖率测试方法
技术领域
1.本发明涉及软件测试技术领域,尤其涉及一种基于android应用的覆盖率测试方法。


背景技术:

2.随着公司业务的不断扩大,产品迭代频繁,仅基于需求和经验的测试难以有效保证测试的有效性,甚至会影响产品发布质量和用户体验。为了更有效的提高产品质量,完善测试用例,废弃历史冗余无用代码,需要引入了代码覆盖率测试技术。
3.所谓代码覆盖率(code coverage)是软件测试中的一种度量,描述程序中源代码与被测试的比例和程度,所得比例称为代码覆盖率。在移动应用测试中,用到的是android代码覆盖率测试,它是利用jacoco(jacoco是一个开源的代码覆盖率工具,可以嵌入到ant、maven中,并提供了eclemma eclipse插件,也可以使用java agent技术监控java程序。很多第三方的工具提供了对jacoco的集成,如sonar、jenkins等)对class文件以offline方式进行代码插桩(插桩技术指在保证原有程序逻辑完整性的基础上,在程序中插入探针,通过探针采集代码中的信息(方法本身、方法参数值、返回值等)在特定的位置插入代码段,从而收集程序运行时的动态上下文信息。),生成最终的目标文件,执行目标文件以后得到覆盖执行结果,最终生成覆盖率报告。jacoco从行覆盖、类覆盖、方法覆盖、分支覆盖、指令覆盖、圈复杂度六个方面进行对代码覆盖率进行统计。
4.现有的代码覆盖率测试大多数是通过测试人员手动拉取代码后,在编译工具idea(全称intellij idea,是java编程语言开发的集成环境)中进行手动插桩,编译,执行测试完成后,再手动生成覆盖率测试报告,无法达到自动化,这样增加了无开发经验的测试人员增加了学习成本,不易上手。
5.申请号cn202011406234.8安卓软件集成测试中的覆盖率测试方法、装置,涉及一种安卓软件集成测试中的覆盖率测试方法、装置、计算机设备和存储介质。该方法包括:获取待测软件在当前版本的所有版本分支的分测覆盖率数据;获取待测软件在当前版本的发布分支的差异日志,根据差异日志合并所有版本分支的分测覆盖率数据得到合并后的分测覆盖率数据;根据差异日志检测出发布分支的所有diff方法和所有非diff方法,对发布分支代码中与该所有diff方法对应的代码进行集成覆盖率测试,获得初始集测覆盖率数据;合并初始集测覆盖率数据与合并后的分测覆盖率数据得到最终的集测覆盖率数据,根据其生成覆盖率报告。该发明对发布分支代码做覆盖率测试时能够复用其中已单独测试过的代码的覆盖率数据,提高对发布分支代码的测试效率。该发明主要是对集成测试中各个分支的代码覆盖率数据进行测试并整合在一个最终的集测覆盖率数据,并不适合于测试人员在日常系统测试中进行的覆盖率数据收集方法,且对于测试人员来说操作复杂,不易上手。


技术实现要素:

6.本发明的目的就在于为了解决上述问题而提供一种基于android应用的覆盖率测
试方法,本发明基于jenkins(jenkins是一个开源软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成)的自动化的代码覆盖率测试的方法,可实现自动下载代码,代码插桩,提交代码,版本构建和自动生成覆盖率报告,提高了方便性和测试效率,节约学习成本,更易上手。
7.本发明再执行android应用覆盖率测试前,先搭建测试jenkins持续集成平台,编写shell插桩脚本,在覆盖率服务器的jenkins平台上配置监听编译版本库更新任务,配置代码下载,自动插桩和代码提交的任务,配置版本构建任务,配置监听覆盖率数据更新任务,配置覆盖率报告生成和邮件发送的任务;当开发人员提交代码到版本服务器,scm拉取最新代码,在编译服务器上进行构建,构建编译版本后,通过jenkins平台进行版本库构建监听是否构建成功且需要进行覆盖率测试,从而判断是否触发jenkins下载代码,自动插桩,提交代码的任务;jenkins平台设置监听版本库构建状态,监听到版本库的更新是成功的且需要进行覆盖率测试时,自动触发事先配置好的jenkins下载最新的代码,自动插桩,提交代码到覆盖率服务器上;当把插桩后的代码提交到覆盖率服务器后,自动触发android版本构建的任务,从而把构建后的apk存储在覆盖率服务器的app_package的目录下,并邮件告知测试人员apk的存储位置;测试人员从覆盖率服务器上下载对应的apk并进行安装进行覆盖率测试,测试完成后,点击app中的“一键生成覆盖率”按钮,自动调用api接口,把覆盖率数据文件传到覆盖率服务器的指定存储位置exec_files;配置jenkins监听任务,每天下午17:30进行一次轮询,监听覆盖率服务器上exec_files目录下是否有新的覆盖率数据文件coverage_time.exec,如果有,就执行覆盖率报告生成和邮件发送的jenkins任务,若没有,就不执行该任务。
8.本发明通过以下技术方案来实现上述目的:
9.一种基于android应用的覆盖率测试方法,包括以下步骤:
10.步骤1:搭建测试jenkins持续集成平台;
11.步骤2:在测试jenkins中配置监听构建完成的android版本是否需要执行覆盖率测试的任务;
12.步骤3:配置android应用代码下载的jenkins任务;
13.步骤4:编写shell(shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序)自动插桩脚本,并在步骤3中配置所述shell自动插桩脚本;
14.步骤5:在步骤3中配置插桩后的代码并提交到git(是一个开源的分布式版本控制系统)覆盖率服务器(用于存储覆盖率代码,数据,报告的服务器);
15.步骤6:配置构建android版本的jenkins任务;
16.步骤7:测试人员安装插桩后的android版本并执行覆盖率测试;
17.步骤8:测试完成后,生成覆盖率数据文件并自动上传到覆盖率服务器的指定存储位置;
18.步骤9:配置jenkins任务监听存储位置处是否有新的覆盖率数据文件,从而判断是否执行覆盖率报告和邮件发送的jenkins任务;
19.步骤10:执行覆盖率报告和邮件发送的jenkins任务,得到可视化的覆盖率报告。
20.进一步方案为,所述步骤1中搭建测试jenkins持续集成平台,用于建立和部署
jenkins任务、监控外部调用执行的工作。
21.进一步方案为,所述步骤2中测试jenkins平台预先部署监听编译版本库更新任务,监听android构建版本库的状态,若需进行覆盖率测试,则自动触发android代码下载的jenkins任务,若不需要进行覆盖率测试,则不执行任何操作。
22.进一步方案为,所述步骤3中,根据步骤2的监听结果,若需进行覆盖率测试,则自动触发此任务:从git代码库中下载最新的android代码,为后续进行自动插桩做准备。
23.进一步方案为,所述步骤4中,自动判断代码结构,编写shell插桩脚本,android应用以offline的插桩模式,且为多模块插桩;编写完成后,作为步骤3的构建步骤。
24.进一步方案为,所述步骤5中,在步骤4完成后,把插桩后代码提交到覆盖率服务器上。
25.进一步方案为,所述步骤6中,从覆盖率服务器上下载插桩后的代码并进行集成生成apk(android application package,android应用程序包)包到覆盖率服务器指定存储位置app_package目录下,并自动发送邮件告知测试人员存储地址。
26.进一步方案为,所述步骤7中,测试人员根据邮件中的存储地址,访问并获取到apk包,安装到安卓测试设备上,进行覆盖率测试。
27.进一步方案为,所述步骤8中,测试人员完成测试后,自动触发生成覆盖率数据文件coverage_time.exec,并调用文件传输接口,把覆盖率数据文件传到覆盖率服务器的指定存储位置exec_files。
28.进一步方案为,其特征在于,所述步骤9中,每天进行一次轮询,监听覆盖率服务器上exec_files文件下是否有新的覆盖率数据文件coverage_time.exec,如果有,则执行覆盖率报告生成和邮件发送的jenkins任务,若没有,则不执行该任务。
29.进一步方案为,所述步骤10中,获取到coverage_time.exec文件后,执行jacoco生成报告的方法自动生成覆盖率报告,并邮件发送相关人员进行分析。
30.本发明的有益效果在于:
31.本发明的一种基于android应用的覆盖率测试方法,通过利用监听技术,自动触发jenkins任务执行,自动上传覆盖率数据文件,且可以自动生成覆盖率报告并发送给相关人员,达到android应用覆盖率测试的自动化,可以有效节约测试人员学习成本,使测试人员操作起来简单,一次配置,可以多次使用,脚本能最大化进行复用代替,提高测试效率,实现了代码覆盖率的自动化操作。
附图说明
32.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要实用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
33.图1为现有技术的覆盖率测试流程示意图;
34.图2为本发明android应用覆盖率测试流程图;
35.图3为本发明jenkins平台监听构建状态触发自动下载代码,插桩脚本方法。
具体实施方式
36.为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。
37.如图1所示,图1为现有技术的覆盖率测试流程示意图:开发人员提交代码到版本服务器,开发人员在提交代码之前会邮件或口头告知该版本是否需要进行覆盖率测试,如果不需要,测试人员不进行插桩的操作,等待scm(软件配置管理员)集成完成后,按照正常流程进行系统测试;如果需要进行覆盖率测试,测试人员手动拉取版本库中的当前版本的最新代码到本地计算机上,把代码导入到idea中,进行代码结构分析和确定要插桩的文件,进行手动插桩,插桩完成后,在idea中进行手动构建apk版本,构建成功后,测试人员安装插桩后的版本进行系统测试,测试完成后,生成覆盖率数据,并手动copy到覆盖率服务器上,然后手动调用jacoco生成报告的方法进行覆盖率报告的生成,最后把生成的覆盖率报告邮件发送给项目组相关人员,并进行报告的分析,得出当前覆盖率是否满足质量标准;
38.图1为测试人员手动的进行覆盖率测试的过程,整个过程步骤繁琐,不易操作,对于有开发基础的测试人员可以进行一定的覆盖率测试,但是对于无分析代码和开发代码能力的测试人员,增加了一定的使用难度,不能很好的利用该流程进行覆盖率的有效测试。
39.在任一实施例中,如图2-3所示,本发明的一种基于android应用的覆盖率测试方法,包括以下步骤:
40.步骤1:搭建测试jenkins持续集成平台;搭建测试jenkins持续集成平台,用于建立和部署jenkins任务、监控外部调用执行的工作。
41.步骤2:在测试jenkins中配置监听构建完成的android版本是否需要执行覆盖率测试的任务;测试jenkins平台预先部署监听编译版本库更新任务,监听android构建版本库的状态,若需进行覆盖率测试,则自动触发android代码下载的jenkins任务,若不需要进行覆盖率测试,则不执行任何操作。
42.步骤3:配置android应用代码下载的jenkins任务;根据步骤2的监听结果,若需进行覆盖率测试,则自动触发此任务:从git代码库中下载最新的android代码,为后续进行自动插桩做准备。
43.步骤4:编写shell(shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序)自动插桩脚本,并在步骤3中配置所述shell自动插桩脚本;自动判断代码结构,编写shell插桩脚本,android应用以offline的插桩模式,且为多模块插桩;编写完成后,作为步骤3的构建步骤。
44.步骤5:在步骤3中配置插桩后的代码并提交到git(是一个开源的分布式版本控制系统)覆盖率服务器(用于存储覆盖率代码,数据,报告的服务器);在步骤4完成后,把插桩后代码提交到覆盖率服务器上。
45.步骤6:配置构建android版本的jenkins任务;从覆盖率服务器上下载插桩后的代码并进行集成生成apk(android application package,android应用程序包)包到覆盖率服务器指定存储位置app_package目录下,并自动发送邮件告知测试人员存储地址。
46.步骤7:测试人员安装插桩后的android版本并执行覆盖率测试;测试人员根据邮
件中的存储地址,访问并获取到apk包,安装到安卓测试设备上,进行覆盖率测试。
47.步骤8:测试完成后,生成覆盖率数据文件并自动上传到覆盖率服务器的指定存储位置;测试人员完成测试后,自动触发生成覆盖率数据文件coverage_time.exec,并调用文件传输接口,把覆盖率数据文件传到覆盖率服务器的指定存储位置exec_files。
48.步骤9:配置jenkins任务监听存储位置处是否有新的覆盖率数据文件,从而判断是否执行覆盖率报告和邮件发送的jenkins任务;每天进行一次轮询(具体时间可以根据需要自行设定),监听覆盖率服务器上exec_files文件下是否有新的覆盖率数据文件coverage_time.exec,如果有,则执行覆盖率报告生成和邮件发送的jenkins任务,若没有,则不执行该任务。
49.步骤10:执行覆盖率报告和邮件发送的jenkins任务,得到可视化的覆盖率报告。获取到coverage_time.exec文件后,执行jacoco生成报告的方法自动生成覆盖率报告,并邮件发送相关人员进行分析。
50.在一个具体实施例中,如图2所示,图2为本发明所述的android应用覆盖率测试流程图,包括:
51.开发人员提交代码到版本服务器,scm拉取最新代码,在编译服务器上进行构建,构建编译版本后,通过jenkins平台进行版本库构建监听是否构建成功且需要进行覆盖率测试,从而判断是否触发jenkins下载代码,自动插桩,提交代码的任务。其中的监听方法是获取版本构建时传入参数和更新的构建的结果进行判断的;版本构建时传入的参数主要包括:git下载地址,是否需要覆盖率测试。jenkins平台监听到的结果为构建成功,且需要覆盖率测试,则去获取git的下载地址,并把该地址传给代码下载的jenkins任务,从而触发该任务的执行。
52.jenkins平台设置监听版本库构建状态,监听到版本库的更新是成功的且需要进行覆盖率测试时,自动触发事先配置好的jenkins下载最新的代码,自动插桩,提交代码到覆盖率服务器上。
53.当把插桩后的代码提交到覆盖率服务器后,自动触发android版本构建的任务,从而把构建后的apk存储在覆盖率服务器的app_package的目录下,并自动发送邮件告知测试人员apk的存储位置。
54.测试人员从覆盖率服务器上下载对应的apk并进行安装进行覆盖率测试,测试完成后,点击app中的“一键生成覆盖率”按钮,自动调用api接口,把覆盖率数据文件传到覆盖率服务器的指定存储位置exec_files。
55.配置jenkins监听任务,每天下午17:30进行一次轮询,监听覆盖率服务器上exec_files目录下是否有新的覆盖率数据文件coverage_time.exec,如果有,就执行覆盖率报告生成和邮件发送的jenkins任务,若没有,就不执行该任务。其中的监听方法获取覆盖率服务器上的exec_files目录下是否有新的覆盖率数据文件进行判断的;测试人员完成覆盖率测试后,会自动把覆盖率数据文件传输到exec_files目录下,每天下午17:30进行一次轮询,监听覆盖率服务器上exec_files目录下是否有新的覆盖率数据文件coverage_time.exec,如果有,就执行覆盖率报告生成和邮件发送的jenkins任务,若没有,就不执行该任务。
56.相对于图1中的现有技术,本发明图2中结合jenkins工具,利用监听技术,自动触
发jenkins任务执行,自动上传覆盖率数据文件,且可以自动生成覆盖率报告并发送给相关人员,达到android应用覆盖率测试的自动化,使测试人员操作起来简单,方便,无需代码能力,直接可以上手使用,提高了测试效率。
57.在一个具体实施例中,如图3所示,图3为本发明jenkins平台监听构建状态触发自动下载代码,插桩脚本方法,为图2技术方案jenkins平台监听android版本库构建的更加详细的实施方法:
58.版本库在构建时,需要传入代码的git下载地址,是否需要覆盖率测试;
59.jenkins监听平台每隔五分钟去监听一次构建版本库的更新,不断轮询,如果监听到构建版本库构建结果为成功,且需要进行覆盖率测试,则jenkins监听平台根据结果和入参去获取该版本的git下载地址并传入到自动下载代码的任务中,然后触发该任务的执行;如果监听到的构建版本库成功,但不需要进行覆盖率测试,则jenkins监听平台不去触发自动下载代码的任务执行;如果监听到构建版本库没有更新的构建,则也不去触发自动下载代码的任务执行。
60.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本发明对各种可能的组合方式不再另行说明。此外,本发明的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明的思想,其同样应当视为本发明所公开的内容。

技术特征:
1.一种基于android应用的覆盖率测试方法,其特征在于,包括以下步骤:步骤1:搭建测试jenkins持续集成平台,用于建立和部署jenkins任务、监控外部调用执行的工作;步骤2:在测试jenkins中配置监听构建完成的android版本是否需要执行覆盖率测试的任务;步骤3:配置android应用代码下载的jenkins任务;步骤4:编写shell自动插桩脚本,并在步骤3中配置所述shell自动插桩脚本;步骤5:在步骤3中配置插桩后的代码并提交到git覆盖率服务器;步骤6:配置构建android版本的jenkins任务;步骤7:测试人员安装插桩后的android版本并执行覆盖率测试;步骤8:测试完成后,生成覆盖率数据文件并自动上传到覆盖率服务器的指定存储位置;步骤9:配置jenkins任务监听存储位置处是否有新的覆盖率数据文件,从而判断是否执行覆盖率报告和邮件发送的jenkins任务;步骤10:执行覆盖率报告和邮件发送的jenkins任务,得到可视化的覆盖率报告。2.根据权利要求书1所述的一种基于android应用的覆盖率测试方法,其特征在于,所述步骤2中测试jenkins平台预先部署监听编译版本库更新任务,监听android构建版本库的状态,若需进行覆盖率测试,则自动触发android代码下载的jenkins任务,若不需要进行覆盖率测试,则不执行任何操作。3.根据权利要求书1所述的一种基于android应用的覆盖率测试方法,其特征在于,所述步骤3中,根据步骤2的监听结果,若需进行覆盖率测试,则自动触发此任务:从git代码库中下载最新的android代码,为后续进行自动插桩做准备。4.根据权利要求书1所述的一种基于android应用的覆盖率测试方法,其特征在于,所述步骤4中,自动判断代码结构,编写shell插桩脚本,android应用以offline的插桩模式,且为多模块插桩;编写完成后,作为步骤3的构建步骤。5.根据权利要求书1所述的一种基于android应用的覆盖率测试方法,其特征在于,所述步骤5中,在步骤4完成后,把插桩后代码提交到覆盖率服务器上。6.根据权利要求书1所述的一种基于android应用的覆盖率测试方法,其特征在于,所述步骤6中,从覆盖率服务器上下载插桩后的代码并进行集成生成apk包到覆盖率服务器指定存储位置app_package目录下,并自动发送邮件告知测试人员存储地址。7.根据权利要求书1所述的一种基于android应用的覆盖率测试方法,其特征在于,所述步骤7中,测试人员根据邮件中的存储地址,访问并获取到apk包,安装到安卓测试设备上,进行覆盖率测试。8.根据权利要求书1所述的一种基于android应用的覆盖率测试方法,其特征在于,所述步骤8中,测试人员完成测试后,自动触发生成覆盖率数据文件coverage_time.exec,并调用文件传输接口,把覆盖率数据文件传到覆盖率服务器的指定存储位置exec_files。9.根据权利要求书1所述的一种基于android应用的覆盖率测试方法,其特征在于,所述步骤9中,每天进行一次轮询,监听覆盖率服务器上exec_files文件下是否有新的覆盖率数据文件coverage_time.exec,如果有,则执行覆盖率报告生成和邮件发送的jenkins任
务,若没有,则不执行该任务。10.根据权利要求书1所述的一种基于android应用的覆盖率测试方法,其特征在于,所述步骤10中,获取到coverage_time.exec文件后,执行jacoco生成报告的方法自动生成覆盖率报告,并邮件发送相关人员进行分析。

技术总结
本发明公开了一种基于Android应用的覆盖率测试方法,通过搭建测试Jenkins持续集成平台,并编写shell插桩脚本,在覆盖率服务器的Jenkins平台上配置监听编译版本库更新任务,配置代码下载,自动插桩和代码提交的任务,配置版本构建任务,配置监听覆盖率数据更新任务,配置覆盖率报告生成和邮件发送的任务;本发明利用监听技术,自动触发Jenkins任务执行,自动上传覆盖率数据文件,且可以自动生成覆盖率报告并发送给相关人员,达到Android应用覆盖率测试的自动化,可以有效节约测试人员学习成本,脚本能最大化进行复用代替,提高测试效率,实现了代码覆盖率的自动化操作。实现了代码覆盖率的自动化操作。实现了代码覆盖率的自动化操作。


技术研发人员:张迎秋 徐凯 王莉
受保护的技术使用者:四川虹美智能科技有限公司
技术研发日:2022.07.21
技术公布日:2022/11/1
转载请注明原文地址: https://tieba.8miu.com/read-2986.html

最新回复(0)