Java 无法在<;之间传递数据;测试>;testng套件中的标记

Java 无法在<;之间传递数据;测试>;testng套件中的标记,java,testng,listener,Java,Testng,Listener,我正在处理一个testngxml文件,就像本文底部复制的那个文件一样。为了通过浏览器参数化测试,我将每个类分解为一个单独的节点 作为与报表软件集成的一部分,我们将每个测试方法提供的一段数据存储在由ITestContext对象处理的arraylist中。在@afterSuite方法中,该对象将该信息上传到我们的报告软件 在其他套件中,如果类都存在于同一个节点中,则可以正常工作。但是,在这个套件中,我们只获取最后一个节点的数据。它似乎正在覆盖前三个,方法是创建一个新的ITestContext实例。不

我正在处理一个testngxml文件,就像本文底部复制的那个文件一样。为了通过浏览器参数化测试,我将每个类分解为一个单独的节点

作为与报表软件集成的一部分,我们将每个测试方法提供的一段数据存储在由ITestContext对象处理的arraylist中。在@afterSuite方法中,该对象将该信息上传到我们的报告软件

在其他套件中,如果类都存在于同一个节点中,则可以正常工作。但是,在这个套件中,我们只获取最后一个节点的数据。它似乎正在覆盖前三个,方法是创建一个新的ITestContext实例。不幸的是,我无法将这个套件整合成一个单独的套件,因为我们将失去参数化测试的能力

我需要知道是否有一种可接受的方式在不同节点中包含的测试方法之间传递信息。我尝试在公共父级中使用静态变量(未成功),但在testNG文档中找不到任何关于设置全局变量的内容

<suite name="UL" parallel="tests" thread-count="1" verbose="10">
    <parameter name="env" value="jobcaseStaging6"/>
    <parameter name="recordTests" value="1"/>
    <listeners>
    </listeners>
    <test name="UL Tests firefox">
        <classes>
            <class name="tests.selenium_tests.ULTests">
                <parameter name="browser" value="firefox"/>
            </class>
        </classes>
    </test>
    <test name="UL Tests chrome">
        <classes>
            <class name="tests.selenium_tests.ULTests">
                <parameter name="browser" value="chrome"/>
            </class>
        </classes>
    </test>
    <test name="UL Tests safari">
        <classes>
            <class name="tests.selenium_tests.ULTests">
                <parameter name="browser" value="bs_safari"/>
            </class>
        </classes>
    </test>
    <test name="UL Tests edge">
        <classes>
            <class name="tests.selenium_tests.ULTests">
                <parameter name="browser" value="bs_edge"/>
            </class>
        </classes>
    </test>
</suite>

因此这里基本上有两种场景,对于每种场景,TestNG都提供了一种适当的数据共享方式:

  • 所有测试类(测试类是包含一个或多个
    @test
    方法的类)都位于相同的
    标记中,并且希望在它们之间共享数据 在这种情况下,您应该使用
    ITestContext
    对象,并通过
    ITestContext
    对象的属性共享数据

  • 测试类驻留在一个或多个
    标记中,并希望在它们之间共享数据
  • 在这种情况下,您应该使用
    ISuite
    对象,并通过
    ITestContext
    对象的属性共享数据

    基本上:

    • ITestContext
      表示
      标记和
    • ISuite
      表示一个
      标记

    谢谢克里希南,他做到了。在测试前/测试后,我无法直接访问ISuite对象,没有意识到我必须从ITestContext访问它