繁体   English   中英

使用Gradle和TestNG对多个节点进行分区测试

[英]Partitioning tests across multiple nodes with Gradle and TestNG

我有一个带有大量测试的Java项目。 我的构建使用Gradle,测试使用TestNG,并由gradle调用。 我想通过在多个工作程序上同时运行我的构建,并让每个工作程序仅运行测试的一个子集来加快对构建的测试。

每个节点将提供2个环境变量TOTAL_NODESNODE_NUMBER ,其中TOTAL_NODES是运行我的构建的节点数,而NODE_NUMBER是分配给该特定节点的数。

我想要一种对测试进行分区的方法,以便每个节点运行〜1 / TOTAL_NODES个测试,并且每个测试仅运行一次。 使用gradle和TestNG有一种简单的方法吗?

我可以通过将每个标签标记为一个特定的组来手动将测试分为几组,但是有很多测试,这是一个主要的维护难题,而且如果节点数量发生变化,它也无法扩展。

Gradle提供了测试过滤,但似乎全部基于类名匹配,并且不能接受任意过滤功能。 我可以找到所有测试文件,然后在将它们插入测试过滤器之前根据某种哈希方案对其进行细分,但这似乎不必要地复杂。

有没有更简单的方法可以做到这一点?

Gradle或TestNG可能没有提供简单的方法,但是您可以实现Listener org.testng.IMethodInterceptor并在其中实现拆分算法。

在测试套件启动之前,将调用org.testng.IMethodInterceptor#intercept ,您将获得计划运行的所有测试实例。 因此,如果您读取ENV变量,然后根据TOTAL_NODES将所有实例吐到某些类别, TOTAL_NODES您只能返回与NODE_NUMBER匹配的类别,例如,使用HashMap ,其中键为NODE_NUMBER ,值为List<IMethodInstance> ,在结尾intercept()返回map.get(NODE_NUMBER)

http://testng.org/doc/documentation-main.html#methodinterceptors

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM