Testng如何将参数传递给监听器

时间:2016-06-28 12:21:36

标签: testng listener

我想知道一种从我的suite.xml或代码本身传递一个参数在侦听器中的方法

我需要在并行测试中确切地知道我在哪个设备上运行测试才能制作一些报告

这是我已经/希望实现的一个例子

套件文件

<suite name="SearchButton" parallel="tests" thread-count="5">
    <test name="SamsungS6">
        <parameter name="deviceUDID"  value="04157df40862d02f"/>
        <classes>
            <class name="MyTestScenario"/>
        </classes>
    </test>
</suite>

@Test
public void researchText (){
    String DeviceUDID = "1234";
}

我希望能够在我的侦听器中找到设备UDID

public void onTestSkipped(ITestResult result) {
    System.out.println("My deviceUDID ");
}

我试图用

找到它
System.getProperty("deviceUDID") // or
result.getAttribute() // or
result.getParameters()

没有成功

关于如何做的任何想法?

2 个答案:

答案 0 :(得分:0)

如果您未在其他地方使用get*,则

set*方法无效。

我看到两个选项:

  1. 通过设置可注射的ITestContextITestResult#getTestContext())中的数据进行测试。见the related documentation
  2. 从侦听器中获取有关测试方法的注释元数据(即:@UDID("1234"))。但如果你想避免重复,那么在测试中使用它可能会更困难。
  3. 根据你的例子:

    @Test
    public void researchText(ITestContext context){
        String DeviceUDID = "1234";
        context.setAttribute("UDID", DeviceUDID)
    }
    
    public void onTestSkipped(ITestResult result) {
        System.out.println("My deviceUDID " + result.getTestContext().getAttribute("UDID"));
    }
    

    <suite name="SearchButton" parallel="tests" thread-count="5">
        <test name="SamsungS6">
            <parameter name="deviceUDID"  value="04157df40862d02f"/>
            <classes>
                <class name="MyTestScenario"/>
            </classes>
        </test>
    </suite>
    
    @Parameters({ "deviceUDID" })
    @Test
    public void researchText (String DeviceUDID, ITestContext context){
        context.setAttribute("UDID", DeviceUDID)
    }
    
    public void onTestSkipped(ITestResult result) {
        System.out.println("My deviceUDID " + result.getTestContext().getAttribute("UDID"));
    }
    

答案 1 :(得分:0)

我终于找到了办法。 它可以被视为一种解决方法,但它可以完成工作。

在ITestListener监听器中,我发现我们有一个onStart方法,允许我从.xml文件中访问参数

    deviceUDID = context.getCurrentXmlTest().getParameter("deviceUDID");

现在我把它放在监听器中我只需要将它保存在变量中并在onTestSkipped方法中访问它

相关问题