gradle测试任务的测试执行顺序

gradle test task execution order of tests

当我 运行 我的 testng 测试使用命令行和 testng.xml 文件中定义的测试时,它们 运行 按照它们在 testng.xml 中指定的顺序

<suite name="WorkDepot Tests">
        <test name="Submit work-result test">
          <classes>
                <class name="workdepot.test.SubmitWorkTest"/>
                <class name="workdepot.test.WorkResultTest"/>
                <class name="workdepot.test.SubmitWorkTest"/>
                <class name="workdepot.test.WorkErrorTest"/>
                <class name="workdepot.test.SubmitWorkTest"/>
                <class name="workdepot.test.MultipleHasTest"/>
                <class name="workdepot.test.WorkResultTest"/>
                <class name="workdepot.test.CallbackTest"/>
                <class name="workdepot.test.NegCallBackTest"/>
                <class name="workdepot.test.NegSubmitWork"/>
                <class name="workdepot.test.NegGetWork"/>
                <class name="workdepot.test.NegHasWork"/>
                <class name="workdepot.test.NegSubmitResult"/>
                <class name="workdepot.test.NegSubmitError"/>
                <class name="workdepot.test.NegReadResult"/>
                <class name="workdepot.test.NegMultipleHas"/>
          </classes>
        </test>
</suite>

现在我想要 运行 那些使用 gradle Test 任务类型的人,我也使用 include 模式。但是执行顺序现在改变了(任意)。

task integTest(type: Test){
    useTestNG()
    testClassDir = file("build/classes/integTest")

    include "workdepot/test/SubmitWorkTest*"
    include "workdepot/test/WorkResultTest*"
    include "workdepot/test/SubmitWorkTest*"
    include "workdepot/test/WorkErrorTest*"
    include "workdepot/test/SubmitWorkTest*"
    include "workdepot/test/MultipleHasTest*"
    include "workdepot/test/WorkResultTest*"
    include "workdepot/test/CallbackTest*"
    include "workdepot/test/NegCallBackTest*"
    include "workdepot/test/NegSubmitWork*"
    include "workdepot/test/NegGetWork*"
    include "workdepot/test/NegHasWork*"
    include "workdepot/test/NegSubmitResult*"
    include "workdepot/test/NegSubmitError*"
    include "workdepot/test/NegReadResult*"
    include "workdepot/test/NegMultipleHas*"

}

如何确保测试 运行 的顺序与 testng.xml 相同,而不更改测试代码(即添加测试之间的依赖关系)

JUnitTestNG 都无法从 gradle 级别进行控制。正如您提到的,可以修改测试源。对于 JUnit,可以定义一个测试套件来控制测试执行顺序。如果 TestNG 有它等价于这样的测试套件,它可能是要走的路。

默认情况下,TestNG 将 运行 您的测试按照它们在 XML 文件中找到的顺序进行。否则gradle测试将不保证任何顺序,

您可以在方法 运行 之前拦截这些方法,但在这种情况下没有用