使用Gradle和TestNG

时间:2015-05-13 20:37:34

标签: java testing gradle continuous-integration testng

我有一个包含大量测试的java项目。我的构建使用Gradle,测试使用TestNG并由gradle调用。我想通过在多个worker上同时运行我的构建并让每个worker只运行一部分测试来加快测试构建。

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

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

我可以通过标记特定组中的每一个来手动将测试划分为偶数组,但是有许多测试,这是一个主要的维护麻烦,而且如果节点数量发生变化,它也不会扩展。

Gradle提供了测试过滤功能,但它似乎都基于类名匹配,并且不能接受任意过滤功能。我可以找到所有测试文件,然后根据一些散列方案对它们进行细分,然后再将它们插入测试过滤器,但它似乎不必要地复杂。

有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

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

在测试套件启动之前调用

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

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