首页 > 解决方案 > Gradle 启动的 TestNG 测试在套件而不是类中按优先级运行

问题描述

TestNG 7.3.0(与 6.8.9 相同)Gradle 4.10.3

我为班级内的测试设置了唯一的优先级。我在一个包中有几个类。我还被迫在我知道的所有地方在一个线程中运行测试: maxParallelForks = 1<suite name="UI tests" thread-count="1" parallel="false">

当我右键单击 Intellij IDEA 中的包并运行测试时,它们按预期进行:所有测试都来自 A 类的优先级,然后所有测试都来自 B 类的优先级:

在此处输入图像描述

但是当我运行 gradle 任务(从 IDEA 中的 Gradle 菜单,与从命令行相同),甚至通过在 IDEA 中右键单击运行 testng xml 文件时,执行优先级为 1 的包(或整个项目)中的所有测试,然后所有优先级为 2 等 - 这对我来说是完全错误且不可预测的:

在此处输入图像描述

对我来说,它看起来像是一个 Gradle-TestNG 错误。有什么想法吗?

gradle 构建文件中的 TestNG 配置:

task uiTest(type: Test) {
    group 'verification'
    outputs.upToDateWhen { false }
    testLogging.showStandardStreams = true
    testLogging.exceptionFormat = 'full'

    useTestNG() {
        maxParallelForks = 1
        outputDirectory = file("$buildDir/testng-output")
        suites 'src/test/resources/testData/ui/testNG.xml'
        listeners << 'ui.util.listener.ExceptionListener'
    }

}

测试NG xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="UI tests" thread-count="1" parallel="false">
    <listeners>
        <listener class-name="ui.util.listener.ExceptionListener"/>
    </listeners>
    <test name="UI tests">
        <packages>
            <package name="ui.rock_suites.priorityTest.*"/>
        </packages>
    </test>
</suite>

测试类样本:

package ui.rock_suites.priorityTest

import org.testng.annotations.Test

class A {

    @Test(priority = 1)
    void ATest1() {
        sleep(100)
    }

    @Test(priority = 2)
    void ATest2() {
        sleep(100)
    }

    @Test(priority = 3)
    void ATest3() {
        sleep(100)
    }

    @Test(priority = 4)
    void ATest4() {
        sleep(100)
    }

}
package ui.rock_suites.priorityTest

import org.testng.annotations.Test

class B {
    @Test(priority = 1)
    void BTest1() {
        sleep(100)
    }

    @Test(priority = 2)
    void BTest2() {
        sleep(100)
    }

    @Test(priority = 3)
    void BTest3() {
        sleep(100)
    }

    @Test(priority = 4)
    void BTest4() {
        sleep(100)
    }
}

标签: gradlegroovyautomated-teststestng

解决方案


我在测试中看到了类似的问题,我通过定义优先级来运行测试,但它们不再遵循优先级。寻求有关如何解决它的帮助。

以前的所有东西都可以与早期版本的 android studio(4.1.1) 和 gradle(7.0) 一起使用,但是在将我的 studio 和 gradle 升级到最新版本后我看到了这个问题


推荐阅读