将 ITestContext 属性值传递给 onTestStart 方法时传递的空值

null values passed when passing ITestContext attribute value to onTestStart method

我想将使用 ITestContext 设置的变量传递给 onTestStart

   public void login(ITestContext Test){
        Test.setAttribute("nodeName","05 test");
        Test.setAttribute("nodeDetails","05 This belongs to regresion test");
   }

我使用了下面的代码,但只打印了空值。

 @Override
    public void onTestStart(ITestResult result) {
        //get the node name
        String node= (String) result.getTestContext().getAttribute("nodeName");
        String nodeDetails= (String) result.getTestContext().getAttribute("nodeDetails");
        System.out.println("onTestStart node is "+node);
        System.out.println("onTestStart nodeDetails is* "+nodeDetails);
}

但是,当我把它放到 onTestSuccess 方法时,我确实注意到了。

我最初的要求是在 onTestStart 方法 中传递节点名称和节点详细信息以创建 extent 的报告节点。请帮忙。

test = report.createTest(result.getMethod().getMethodName()).createNode(node).pass(nodeDetails);

onStart: This method is invoked before any test method gets executed. You can use this to set your extra attributes if you need to.

onTestStart: This method is invoked before any tests method is invoked. This can be used to indicate that the particular test method has been started.

   @Override
   public void onStart(ITestContext context) {

        context.setAttribute("nodeName","05 test");
        context.setAttribute("nodeDetails","05 This belongs to regresion test");
   }

=== 已编辑

如果你想在ITestContext之前添加一些属性(ALL Tests都是运行),那么使用@BeforeTest

使用@BeforeTest,这将是运行一次,然后所有其他测试都是运行。

   @BeforeTest
   public void setData(ITestContext context)
   {
      context.setAttribute("nodeName","05 test");
   }

如果你想在 (EACH) 测试方法之前做一些应该 运行 的逻辑,那么使用

@BeforeMethod
public void beforeMethod(ItestContext testContext) {
    // Do testContext related processing
}

如果以上都不是,并且您想将自定义数据传递给每个@Test 用例,那么 DataProvider 就是您要找的。

一个例子:

    @DataProvider(name = "node-05-provider")
    public Object[][] dataProvider(){
            return new Object[][]{
                {"node-05"}};
    }

    @Test(dataProvider="node-05-provider")
    public void search(String data){
     
         System.out.println(data); // "node-05"


    }