无法在testng套件中的<test>标记之间传递数据

时间:2019-01-16 22:28:27

标签: java testng listener

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

作为与报告软件集成的一部分,我们将每个测试方法提供的数据存储在由ITestContext对象处理的数组列表中。在@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>

1 个答案:

答案 0 :(得分:0)

因此,这里基本上有两种情况,TestNG为每种情况提供了一种共享数据的正确方法:

  1. 所有测试类(一个测试类是一个或多个@Test方法的类)驻留在同一<test>标记中,并且希望在它们之间共享数据。

在这种情况下,您应该利用ITestContext对象并通过ITestContext对象的属性共享数据。

  1. 测试类驻留在一个或多个<test>标签中,并且希望在它们之间共享数据。

在这种情况下,您应该利用ISuite对象并通过ITestContext对象的属性共享数据。

基本上:

  • ITestContext代表一个<test>标签,而
  • ISuite代表一个<suite>标签