精准测试探索

精准,测试,探索 · 浏览次数 : 228

小编点评

**精准测试** **背景:** * 代码变更点和影响范围评估不准确。 * 影响范围过大,用例过多,占用大量时间来测试完全和本次提测无关的功能。 **静态链路分析:** * 生成对应上下游方法调用链,查看影响的上下游方法。 * 帮助开发人员分析是否有未考虑代码影响范围。 **增量代码覆盖率分析:** * 统计增量代码覆盖率,用于评估用例覆盖了哪些代码。 * 帮助开发人员识别需要补充测试用例的功能。 **步骤:** **1. 启动服务** * 启动服务无论是tomcat启动,还是springboot启动,将JACOCO_AGENT加入到 JAVA_OPTS里。 **2. 执行测试用例** * 生成exec文件,包含被测试类和方法的原始数据。 * 使用jacoco工具分析代码覆盖率报告。 **3. 生成增量代码覆盖率报告** * 通过git库中对分支和master分支进行比对,生成差异列表。 * 使用jacoco工具扩展报告,进行增量代码覆盖率统计。 **4. FUTURE规划:** * 通过用例的执行生成动态链路,更精准地匹配用例和链路之间的关系。 * 建立用例推荐机制,帮助开发人员更有效的补充测试用例。

正文

一、背景

什么是精准测试?通常研发提测的需求有代码变更,针对研发的代码变更点以及关联点进行测试,我们称之为精准测试。

很多时候,对变更点、影响范围的评估并不是很准确,偶尔会出现影响范围评估不全或者影响范围评估过大的情况。对于影响范围不全,我们所执行的测试用例,就会出现覆盖不全的情况,导致部分功能漏测,进而产生线上问题。对于影响范围过大,我们所执行的用例会过多,占用大量时间来测试完全和本次提测无关的功能,浪费人力物力。因此在这里提出测试精准化。

对于精准化的测试,我们目前做了两部分探索,静态链路分析和增量代码覆盖率分析。

二、静态链路分析

1. 当前解决问题:

部分代码耦合度高,多业务之间存在方法依赖:由于代码框架问题,部分代码可扩展性不强,代码间耦合度高,随着接入的业务线增多,代码间的依赖关系越来越多。一个微小的改动,可能就会影响到其他不相干的业务线,而这种影响由于代码并不会报错,开发人员也无法及时评估到。

本次改动对其他业务线是否有影响,无法准确评估:测试人员一般是根据本次需求改动进行用例编写,无法评估代码的改动是否会影响到其他业务线。所以在用例评审阶段,产品、开发、测试人员均无法准确评估影响范围,这样就可能会导致本次需求上线完成后,等到其他业务发生调用错误,才发现业务被影响到了。

通过改动方法,生成对应上下游方法调用链,查看影响的上下游方法,帮助开发人员分析是否有未考虑到代码影响范围;帮助测试人员检查是否需要补充测试用例

2. 架构设计:

整体项目包括前端UI界面、codeDiff、maven命令打包、静态链路生成、代码注释扫描、执行结果同步等几部分。提供界面化操作,使用者只需要提供应用名称以及提测分支,即可一键生成链路分析报告,包含改动方法数、改动方法关联上下游方法对应链路数,通过分析链路即可快速准确发现本次改动影响范围

架构设计图如下:

3. 使用效果:

截止到目前,风控业务线接入应用5个,评审需求7个,覆盖供应链金融,天盾,鉴权等业务线,后续会有更多业务接入。

三、增量代码覆盖率分析

提到覆盖率统计,我们最先想到的单元测试中的代码覆盖率,这也是通常我们最先接触的,但我们这里要做的是服务端的代码覆盖率,也是能够度量测试用例执行效果的一种统计。

做覆盖率度量的工具有很多,我们这里采用的是开源工具jacoco,也是最常用的工具之一。

首先来看一下,我要做全量代码覆盖率统计,需要哪些步骤:

全量代码覆盖率统计

1. 启动服务

无论是tomcat启动,还是springboot启动,我们都需要修改启动脚本,将JACOCO_AGENT加入到 JAVA_OPTS里,这样我们在启动应用服务的时候,自动加载jacoco agent,并同时开始对我们所测试的服务进行监听,采集被测试类和方法的数据。

JACOCO_AGENT="-javaagent:/export/content/jacocoagent.jar=destfile=/export/content/jacoco/jacoco.exec,append=true,includes=com.*,output=tcpserver,address=0.0.0.0,port=8181"

2. 执行测试用例

3. 生成exec文件

这里的exec文件,就是我们这次执行测试用例所覆盖类、方法的原始数据,通过dump指令来和服务端进行通信来进行采集。

java -jar org.jacoco.cli.jar dump --address 127.0.0.1 --port 8181 --destfile ./jacoco.exec

4. 生成report文件

这里的report文件,就是我们全量的代码覆盖率的jacoco原始报告,通过report指令来生成。

java -jar org.jacoco.cli.jar report jacoco.exec --classfiles D:/workspace/git_code/code-domain/target/classes --sourcefiles D:/workspace/git_code/code-domain/src/main/java --html report --xml jacoco.xml --encoding utf8

需要指定class文件和source文件,对于项目中有多个模块的情况,可以指定多个 classfiles和sourcefiles路径。

这样我们就生成了jacoco原始的代码覆盖率报告,如下:

增量代码覆盖率统计

那么对于增量代码覆盖率统计,我们还需要做哪些事情呢

启动服务、执行测试用例、生成exec文件,这些都不要做任何改变,但是在生成report报告之前,我们需要添加一些步骤:

a. 获取增量代码

通过org.eclipse.jgit.api.Git和org.eclipse.jgit 来对我们所测试分支和master分支进行比对,生成list,看看有哪些类、哪些方法有变更

b. 改造org.jacoco.cli.jar包

在report命令后扩展 --diffCode

	@Option(name = "--diffCode", usage = "input String for diff", metaVar = "<file>")
	String diffCode;

c. 执行report,生成报告

java -jar org.jacoco.cli.jar report jacoco.exec --classfiles D:/workspace/git_code/code-domain/target/classes --sourcefiles D:/workspace/git_code/code-domain/src/main/java --html report --xml jacoco.xml --diffCode '[]' --encoding utf8

这样,我们就生成了只对增量代码进行染色的覆盖率报告。通过报告,我们就可以看出本次提测所修改的代码,是否被我们的测试用例覆盖到,以后我们可以有针对性的补充哪些用例,可以覆盖没有被覆盖的代码。

四、未来规划

目前只做到了静态链路分析以及增量代码覆盖率的统计,后面通过用例的执行生成出动态链路,可以更精准的匹配出用例和链路之间的关系,对于后面我们要做的用例推荐,有着更好的指导意义。

相信精准测试的落地推广,可以更有效的保证我们的测试质量和提高我们的测试效率。

作者:京东科技 闵琦

来源:京东云开发者社区

与精准测试探索相似的内容:

精准测试探索

什么是精准测试?通常研发提测的需求有代码变更,针对研发的代码变更点以及关联点进行测试,我们称之为精准测试。

代码影响范围工具探索

作者:京东零售 田创新、耿蕾 一、背景 1.祖传代码不敢随意改动,影响范围无法评估。并且组内时常有因为修改了某块代码,导致其他业务受到影响,产生bug,影响生产。 2.研发提测完成后,测试进入测试后经常会向研发询问本次需求改动影响范围,以此来确定测试用例,以达到精准测试,提升整个需求的质量,缩短交付

Jest + React 单元测试最佳实践

我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。 前言 单元测试是一种用于测试“单元”的软件测试方法,其中“单元”的意思是指软件中各个独立的组件或模块。开发者需要为他们的代码编写测试用例以确保这些代码可以正常使用。 在

Primer Premier 6安装使用教程

Primer Premier是一款专业级PCR引物设计工具软件,专为科研及分子生物学实验定制PCR扩增、测序探针及杂交引物。该程序运用尖端演算法评估引物的特异性、二聚体可能性和熔解温度等核心属性,确保产出的引物在性能上精准高效。其用户友好界面不仅简化了引物设计流程,并整合了序列比对与限制性内切酶位点

精准测试之覆盖

测试的覆盖通常是指需求范围的执行程度,如需求、测试用例、缺陷的正向与逆向的双向追溯。便于对其相关属性的度量,即使用了覆盖率。

精准测试之分布式调用链底层逻辑

概要: 1. 调⽤链系统概述; 2. 调⽤链系统的演进; 3. 调⽤链的底层实现逻辑; 4. Span内容组成。

精准测试之过程与实践

精准测试的核心组件包含的软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。

前端精准测试实践

作者:京东云质量部 背景 随着前端技术发展,已经转变为数据绑定为主流的框架方式,与后端服务一样,前端代码实现也会涉及相互依赖,引用这些场景,那么应该如何准确的评估前端代码改动的影响范围?依赖开发评估?依靠经验评估?或者直接前端自动化全回归?手工测试全回归?显然以上的策略都不是最优策略,本文叙述了通过

一篇文章了解DongTai IAST

文章转载自DongTai官网,只限个人学习使用。 简介 洞态 IAST 是一个完全开源的 IAST 项目,它使用应用程序运行时数据流进行分析从而识别可被利用的安全漏洞,再按风险优先级的提供已验证漏洞列表功能,协助开发人员实时的代码修复。 主要功能:全面精准的应用漏洞测试、开源组件漏洞和风险分析、应用

Django测试与持续集成:从入门到精通

title: Django测试与持续集成:从入门到精通 date: 2024/5/18 16:38:41 updated: 2024/5/18 16:38:41 categories: 后端开发 tags: Django 测试 CI/CD 优化 部署 监控 迭代 第1章:Django测试基础 1.1