本发明专利技术实施例提供了一种基于代码覆盖率的测试方法和装置,该方法包括:当启动待测试的应用时,启动在所述应用中注入的插件代理;当测试所述应用时,由所述插件代理生成代码覆盖率数据;由所述插件代理启动一检测线程;由所述检测线程读取所述覆盖率数据。本发明专利技术实施例避免了由应用提供接口读取代码覆盖率数据,避免了对其源代码进行修改,保证了应用的完整性,减少对测试的影响。
【技术实现步骤摘要】
本专利技术涉及测试
,特别是涉及一种基于代码覆盖率的测试方法和一种基 于代码覆盖率的测试装置。
技术介绍
在对应用进行测试时,代码覆盖度是衡量测试的重要指标之一。无论是单元测试、API (Application Programming Interface,应用程序编程接 口)测试还是功能性测试,最终都是调用了产品的代码。 测试结束后,通过代码覆盖率数据,可以知道测试得是否充分,测试的弱点在哪些 方面,进而可以指导设计能够增加覆盖率的测试用例。 其中,以Android(安卓)平台中,代码覆盖率主要使用测试工具Jacoco进行统计。 在此种方式中,需要修改应用的源代码,增加一个接口,当测试完成后,在接口中 调用通过测试工具Jacoco的getExecutionData方法,导出覆盖率数据。 如果测试过程中,被测试应用异常退出,如进程崩溃等,将无法获取到之前测试操 作的覆盖率数据,只能重新进行测试,浪费资源。 测试完成,为了导出覆盖率数据,需要修改被测试应用的源代码,对外提供触发接 口,将覆盖率数据写到本地,破坏了被测试应用的完整性,容易对测试产生影响。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上 述问题的一种基于代码覆盖率的测试方法和相应的一种基于代码覆盖率的测试装置。 依据本专利技术的一个方面,提供了一种基于代码覆盖率的测试方法,包括: 当启动待测试的应用时,启动在所述应用中注入的插件代理; 当测试所述应用时,由所述插件代理生成代码覆盖率数据; 由所述插件代理启动一检测线程; 由所述检测线程读取所述覆盖率数据。 可选地,还包括: 在待测试的应用的、由源代码编译的应用文件中,插入标识变量。 可选地,所述由所述插件代理生成代码覆盖率数据的步骤包括: 由所述插件代理统计基于被已执行代码所触发的标识变量、基于未被代码所触发 的标识变量,获得代码覆盖率数据。 可选地,所述由所述检测线程读取所述覆盖率数据的步骤包括: 每间隔一定时间,由所述检测线程读取所述覆盖率数据,直至所述应用退出。 可选地,还包括: 由所述检测线存储所述覆盖率数据。 可选地,所述由所述检测线存储所述覆盖率数据的步骤包括: 将当前读取的覆盖率数据覆盖在先存储的覆盖率数据。 可选地,还包括: 当检测到所述应用的进程崩溃时,输出最新的覆盖率数据。 根据本专利技术的另一方面,提供了一种基于代码覆盖率的测试装置,包括: 插件代理启动模块,适于在启动待测试的应用时,启动在所述应用中注入的插件 代理;代码覆盖率数据生成模块,适于在测试所述应用时,由所述插件代理生成代码覆 盖率数据;检测线程启动模块,适于由所述插件代理启动一检测线程;覆盖率数据读取模块,适于由所述检测线程读取所述覆盖率数据。 可选地,还包括: 离线插粧模块,适于在待测试的应用的、由源代码编译的应用文件中,插入标识变 量。 可选地,所述代码覆盖率数据生成模块还适于:由所述插件代理统计基于被已执行代码所触发的标识变量、基于未被代码所触发 的标识变量,获得代码覆盖率数据。 可选地,所述覆盖率数据读取模块还适于: 每间隔一定时间,由所述检测线程读取所述覆盖率数据,直至所述应用退出。 可选地,还包括: 覆盖率数据存储模块,适于由所述检测线存储所述覆盖率数据。 可选地,所述覆盖率数据存储模块还适于:将当前读取的覆盖率数据覆盖在先存储的覆盖率数据。 可选地,还包括:覆盖率数据输出模块,适于在检测到所述应用的进程崩溃时,输出最新的覆盖率 数据。本专利技术实施例通过插件代理的检测线程读取插件代理生成的代码覆盖率数据,避 免了由应用提供接口读取代码覆盖率数据,避免了对其源代码进行修改,保证了应用的完 整性,减少对测试的影响。 本专利技术实施例通过检测线程不断存储覆盖率数据,使得应用进程崩溃时,可以输 出最新的覆盖率数据,获得进程崩溃前的覆盖率数据,避免了重新进行测试,减少了资源的 浪费。 上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段, 而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够 更明显易懂,以下特举本专利技术的【具体实施方式】。【附图说明】 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通 技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术 的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中: 图1示出了根据本专利技术一个实施例的一种基于代码覆盖率的测试方法实施例1的 步骤流程图; 图2示出了根据本专利技术一个实施例的一种基于代码覆盖率的测试方法实施例2的 步骤流程图 图3示出了根据本专利技术一个实施例的一种基于代码覆盖率的测试装置实施例1的 结构框图;以及 图4示出了根据本专利技术一个实施例的一种基于代码覆盖率的测试装置实施例2的 结构框图。【具体实施方式】下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开 的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例 所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围 完整的传达给本领域的技术人员。参照图1,示出了根据本专利技术一个实施例的一种基于代码覆盖率的测试方法实施 例1的步骤流程图,具体可以包括如下步骤: 步骤101,当启动待测试的应用时,启动在所述应用中注入的插件代理; 在本专利技术实施例中,可以将测试过程中读取代码覆盖率,覆盖多个测试平台,如 Android(安卓)、I0S、Windows Phone、Windows等等。 为使本领域技术人员更好地理解本专利技术实施例,在本专利技术实施例中,将Android作 为测试平台应用测试工具Jacoco进行的一种示例进行说明。 应用本专利技术实施例,可以在待测试的应用的、由源代码编译的应用文件中,插入标 识变量,即离线插粧。具体而言,离线插粧,是指在java代码生成字节码时,在代码间插入特定的标识变 量。 这个过程不会修改源代码,而是修改源代码编译之后的字节码文件,如class文 件。 Jacoco工具支持gradle等构件工具,能自动实现插粧过程。 通过构建任务中指定testCoverageEnabled值为true,最后生成的就是插粧之后 的应用文件。 例如,某个源代码生成的class文件为:插入标识变量后的class文件为: 其中,array0fBoolean和arrayOfBoolean就是插粧后的变量标识,由 Jacoco工具统一管理,默认值是false。 若启动待测试的应用,Jacoco工具也会随之启动。如果待测试的应用中包含多进程,根据Jacoco工具的内部机制,每个进程都会单 独启动一个插件代理。 步骤102,当测试所述应用时,由所当前第1页1 2 3 本文档来自技高网...
【技术保护点】
一种基于代码覆盖率的测试方法,包括:当启动待测试的应用时,启动在所述应用中注入的插件代理;当测试所述应用时,由所述插件代理生成代码覆盖率数据;由所述插件代理启动一检测线程;由所述检测线程读取所述覆盖率数据。
【技术特征摘要】
【专利技术属性】
技术研发人员:刘双,
申请(专利权)人:北京奇虎科技有限公司,奇智软件北京有限公司,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。