【问题标题】:Including (not excluding) groups in TestNG and Gradle在 TestNG 和 Gradle 中包括(不排除)组
【发布时间】:2014-01-08 23:58:09
【问题描述】:

在尝试包含使用 Gradle 和 Java 与 TestNG 一起运行的测试时,我遇到了一些问题。排除测试组没有任何问题,但如果我没有指定排除组并尝试仅使用包含包含语句,其他测试也会运行。

我的 Gradle 代码如下:

tasks.withType(Test) {
    maxParallelForks = 1
    forkEvery = 1000
    ignoreFailures = false

    systemProperties = System.getProperties()

    testLogging.showStandardStreams = true

    exclude '**/tasks/'

    classpath += configurations.testCompile
}

包括示例:

排除示例;完美运行:

task firefox(type: Test) {
    maxParallelForks = Integer.valueOf(threadCount) //default is 1 if not specified
    testLogging.events "started"
    testLogging {
        events "started", "passed", "skipped", "failed", "standardOut", "standardError"
        exceptionFormat "full" // default is "short"
    }
    useTestNG() {
        excludeGroups 'chrome', 'broken'
        useDefaultListeners = false
        listeners << 'org.uncommons.reportng.HTMLReporter'
        listeners << 'org.uncommons.reportng.JUnitXMLReporter'
        listeners << 'com.xmatters.testng.Listener'
    }

    reports.junitXml.destination = file("${buildDir}/test-results/firefox")
    reports.html.destination = file("${reporting.baseDir}/firefox")

    systemProperties.BROWSER = System.getProperty('BROWSER', 'firefox')
    exclude '**/selenium/'
    exclude '**/setupscripts/'
}

这是给我带来麻烦的一个。除了 msie 组中的测试之外,它还包括未分组的测试。

task internetExplorer(type: Test) {
    testLogging {
        events "started", "passed", "skipped", "failed", "standardOut", "standardError"
        exceptionFormat "full"
    }
    useTestNG() {
        includeGroups 'msie'
        useDefaultListeners = false
        listeners << 'org.uncommons.reportng.HTMLReporter'
        listeners << 'org.uncommons.reportng.JUnitXMLReporter'
        listeners << 'com.xmatters.testng.Listener'
    }
    reports.junitXml.destination = file("${reporting.baseDir}/internetExplorer")
    reports.html.destination = file("${buildDir}/test-results/internetExplorer")

    systemProperties.BROWSER = System.getProperty('BROWSER', 'internetExplorer')

    exclude '**/selenium/'
    exclude '**/setupscripts/

任何帮助或想法都会很棒。

【问题讨论】:

  • 可能是一个错误。你搜索过issues.gradle.org吗?
  • 只是简单地说,我会更彻底地看一下,看看我是否能找到任何相关的东西。

标签: java selenium gradle testng


【解决方案1】:

您似乎没有使用 Gradle TestNG 插件的“parallel”和“threadcount”选项。相反,您是从 Gradle 核心分叉出来的。再看看这个:http://www.gradle.org/docs/current/groovydoc/org/gradle/api/tasks/testing/testng/TestNGOptions.html

【讨论】:

  • 我的印象是使用parallel 功能是在项目级别上,而maxParallelForks 在任务级别上运行。我一次只运行一项任务(包含多个测试)。
  • useTestNG { parallel = ...; threadCount = ...; } 是在多个线程(一个 JVM)中执行测试的 TestNG 功能。 test.maxParallelForks 是在多个 JVM(每个 JVM 一个线程)中执行(JUnit 或 TestNG)测试的通用 Gradle 功能。 --parallel 是用于并行运行任务的通用 Gradle 功能。 (目前,只有来自不同项目的任务才能并行运行。)
  • @PeterNiederwieser 有趣的是,如果测试确实在一个 JVM 中运行,这可能会解决我遇到的自定义侦听器问题。当maxParallelForks 已经就位时,我接受了这个项目,所以我认为这样做是有原因的;也许不是。我会试一试的。谢谢你的提示!不幸的是,仍然不喜欢 includeGroups;似乎已经提交了一些关于此问题的缺陷报告,但对于它们是经过验证的错误还是只是配置问题并没有真正的结论。
  • 完全可以想象,TestNG 特性和 Gradle 测试并行化,或者 TestNG 并行化和 Gradle 测试特性之间可能会遇到一些糟糕的交互。可能无法使每种组合都起作用。如果您可以在forums.gradle.org 上发布一个独立的最小示例来演示您的问题,我们会再看一看。
【解决方案2】:

我使用 testNG() 部分来设置包含和排除

   useTestNG() {
        //run classes in parallel, thread count limited by processor.
        options {
            parallel = 'classes'
            threadCount = Runtime.runtime.availableProcessors()
        }
        listeners << 'com.automation.listeners.TestNgListener'
        //sets the default group to run as smoke.*, .* is wildcard.
        includeGroups System.getProperty('groups', 'smoke.*')
        excludeGroups System.getProperty('excludeGroups', 'exclude')
    }

当使用上述结构时,所有未分组的测试都不会运行,但我努力不进行任何没有分组的测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-16
    • 2021-06-19
    • 2017-04-22
    • 2023-02-22
    • 2013-02-13
    • 1970-01-01
    • 2018-08-03
    • 2013-06-27
    相关资源
    最近更新 更多