技术干货|如何通过测试分发(TD)提高单元测试执行效率

发布于:2022-12-04 ⋅ 阅读:(437) ⋅ 点赞:(0)

前言

软件测试是软件工程中的一个重要环节,是开发项目的一部分。软件测试作为一种能够保证软件质量的有效手段,重要程度不言而喻。随着软件复杂程度的增加、规模的增大,软件测试也面临着更大的压力和挑战。如何提高测试执行的效率也成为测试团队关注的重中之重。

测试分发是一种现代的测试并行方法,通过使用现有的测试套件并将其分布在远程代理上,以更快地在本地和CI上执行,从而大大加快了测试执行的时间。Gradle企业级解决方案测试分发Test Distribution ( TD ) 可同时扩展支持Gradle和Maven构建工具。一起来看看Gradle 测试分发的功能是如何帮助测试团队提升效率的。
测试分发 Test Distribution http://www.gradle.com.cn/gradle-enterprise-solutions/test-distribution/

测试时间是构建时间的关键因素之一。影响测试时间的因素有很多,主要来自以下三个方面:

· 越来越多的集成和功能测试

为了保证覆盖率,开发者往往需要编写大量的测试代码来验证其代码的可用性,随着测试的密度增加,就会使单元测试和集成测试越来越多。

· 串行运行测试

如果是串行执行测试,如果每个测试平均需要2秒,想象一下数千个测试会是多长时间...

· 对外部服务的依赖

某些测试可能需要连接数据库,或者多个中间件以及跨网络的请求才能完成,这无疑会花费大量时间。如果是串行执行,必定会阻塞后续测试的运行。

时间就是金钱,任何能够节省时间的事情都是值得去尝试的,但是构建加速不仅仅是节省时间,当构建速度提高,开发者就能及时发现问题,并快速修改,开发者就有更多的时间和注意力集中在代码上,而不是等待。毕竟对于开发者,心流是至关重要的。减少内耗,提高效率。所以,我们需要一些方法来加速构建:

Java开发中最常用的编译构建工具就是Gradle和Maven,这两种构建(Maven > 3.0)都具有并行运行测试的能力。

我们分别在Gradle和Maven上进行了并行测试:

· Gradle   

· Maven

本地开启多线程确实会明显提高测试的执行效率,但是本地的机器性能毕竟有限,开启多线程后,可能会导致电脑做不了任何其他事情。

如果可以把本地的测试任务交给远程服务器去运行,则既可以多线程运行,也可以节省本地的性能资源。

· 配置TD资源池

既然要让把测试任务交给TD,那TD就需要有若干个Agent去分配任务。

我尝试这里配置了一个最大20个Agent的资源池。

​如果要充分利用这里的资源池,那么Agent就需要自动伸缩的能力,在不需要运行的时候自动退出,按需启动Agent,这里使用K8s的自动伸缩能力来做到这一点。

接下来我们再看一下开启远程后Gradle和Maven分别运行的结果。

· Gradle(3m30s→29s)   

接入远程后的构建时间从并行后的55s降低到了29s,又缩短了大概一半时间。

· Maven(1m46s→24s)   

开启远程后,时间同样节省了一半

点击Gradle Enterprise日志中的链接即可快速查看构建扫描结果

总 结

本地单机并行运行可能会得到显著的加速效果,但会受限于并行的数量,并将取决于机器的 CPU 和内存资源:

● 消耗大量本地开发人员的机器资源,个人电脑可能无法继续其他事情。

● 公司投资购买昂贵、功能强大的机器来运行 CI Agent并缩短测试执行时间,导致机器容量大量未充分利用。一旦 CI 构建开始,CI 机器资源就完全专用于 CI 构建,而不能用于其他作业。

● 由于本地单机并行可能要求在多个本地 JVM 中运行测试以避免相互干扰,因此通常会导致资源共享冲突。它们共享相同的文件系统和相同的“进程空间”,因此从测试开始的服务器需要使用不同的端口。

测试分发 Test Distribution ( TD )的优势在于:

●  TD 可用于所有本地和 CI 构建,无论在何处调用(例如,本地命令行、IDE)。

●  由于测试以分布式和透明的方式自动运行,而不是在本地运行,因此开发人员的工作流程没有任何变化。

●  由于运行测试的先决条件构建步骤只运行一次,因此资源消耗大大减少。

●  由于有效的细粒度分布允许每个代理顺序执行测试,可靠性提高了。

● TD 历史和动态调度服务可用于在测试Agent之间适当且弹性地平衡测试执行负载,并优化测试执行时间和计算资源消耗。

●  为了最大限度地利用可用资源,如果没有可用的远程测试Agent或可选的本地/远程混合执行模式,TD 支持本地测试执行回退

  • 了解更多:

Test Distribution http://www.gradle.com.cn/gradle-enterprise-solutions/test-distribution/


网站公告

今日签到

点亮在社区的每一天
去签到