【问题标题】:Using Selenium, TestNG and ReportNG with Gradle在 Gradle 中使用 Selenium、TestNG 和 ReportNG
【发布时间】:2012-04-18 23:13:04
【问题描述】:

这里有人成功配置了 gradle 1.0-milestone-9 的报告吗?

我下载了一个 Selenium 2,使用 Gradle 开发的 TestNG 示例(来自 https://github.com/iainrose/page-objects)。它工作得很好(在将系统属性添加到 build.gradle 以切换浏览器之后),现在我想将 ReportNG 添加到组合中。我尝试了以下方法:

dependencies {
compile "org.seleniumhq.selenium:selenium-java:2.15.0"
compile "org.testng:testng:6.3.1"
compile "org.uncommons:reportng:1.1.2"
}

它会产生以下错误:

Could not resolve all dependencies for configuration ':compile'.
> Artifact 'org.testng:testng:6.3.1:jdk15@jar' not found.

我在http://issues.gradle.org/browse/GRADLE-2042 发现了一个类似的问题,并在那里添加了评论,但是,还没有后续行动。唯一的建议是从依赖项中删除报告...我希望这里有人知道一种让报告与 gradle 一起工作的方法。

在下面添加 Szpak 建议的代码后:

按照 Szpak 的建议将代码添加到 build.gradle 之后,我终于可以运行测试了——仍然没有报告监听器,但依赖项已经到位。但是,一旦我插入监听器,如下所示:

    useTestNG() {
    options {
        listeners << 'org.uncommons.reportng.HTMLReporter'
        listeners << 'org.uncommons.reportng.JUnitXMLReporter'
    }

我得到了 java.lang.StackOverflowError:

A problem occurred evaluating root project 'console-bg1'.
> java.lang.StackOverflowError (no error message)

* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'console-bg1'.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:54)

(...)

Caused by: java.lang.StackOverflowError
at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
at groovy.lang.MetaClassImpl.invokeMissingMethod(MetaClassImpl.java:804)
at groovy.lang.MetaClassImpl.invokePropertyOrMissing(MetaClassImpl.java:1096)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1049)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:128)
at org.gradle.api.tasks.testing.testng.TestNGOptions.methodMissing(TestNGOptions.groovy:204)

从我的在线研究来看,依赖项似乎有问题。我仍然无法将报告与 gradle 一起使用...

【问题讨论】:

    标签: testng gradle reportng


    【解决方案1】:

    作为一种解决方法,您可以从 reportng 包中排除 testng-5.0-jdk15 传递依赖。

    dependencies {
        compile "org.seleniumhq.selenium:selenium-java:2.15.0"
        compile "org.testng:testng:6.3.1"
        compile("org.uncommons:reportng:1.1.2") {
            exclude group: "org.testng", module: "testng"
        }
        compile "com.google.inject:guice:3.0"
    }
    

    顺便说一句,testCompile 通常是测试依赖项的更好选择。

    更新:添加了 guice 依赖项以避免“ClassNotFoundException: com.google.inject.Module”。

    【讨论】:

    • 这会导致很多编译错误,因为 selenium 和 testng 包都找不到了...
    • 好的,我收回这一点——从 compile 到 testCompile 的变化开始引发所有编译错误。一旦我想重新编译,您的代码就可以正常工作 - 我不再遇到可怕的“找不到工件错误”。执行的测试。谢谢!
    • 添加报告监听器后构建失败并出现 java.lang.StackOverflowError 异常。从我的搜索看来,这可能与依赖关系有关(请参阅gradle.1045684.n5.nabble.com/…)。我无法确定这是 gradle 的问题还是依赖声明中的问题。我将成为原始帖子例外的一部分。
    • 嗯,在我的已配置 ReportNG 的项目上将 TestNG 更新为 6.3.1,它工作正常(我必须添加 guice 作为依赖项以防止“ClassNotFoundException:com.google.inject.Module”之后测试执行)。可以先通过一些简单的测试(没有 Selenium)检查 ReportNG 吗?顺便说一句,您使用的是哪个版本的 Gradle?我用 1.0-milestone-9 对其进行了测试。顺便说一句,这应该不是问题,但您也可以禁用默认侦听器(useDefaultListeners = false)。
    • 我移到了 gradle 1.0-rc-3(从 1.0-milestone-9),但结果是一样的:使用 reportng 监听器时出现 StackOverflow 异常。在 [link]issues.gradle.org/browse/… 下的 jira 中记录了此问题
    【解决方案2】:

    这是有效的代码,包括 Szpak 的贡献:

    dependencies {
    compile "org.seleniumhq.selenium:selenium-java:2.21.0"
    compile "org.testng:testng:6.3.1"
    compile group: 'com.google.inject', name: 'guice', version: '3.0'
    compile("org.uncommons:reportng:1.1.2") {
        exclude group: "org.testng", module: "testng"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-06
      • 2013-11-28
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      相关资源
      最近更新 更多