【问题标题】:How to pass parameters to TestNG listeners in parallel execution?如何在并行执行中将参数传递给 TestNG 侦听器?
【发布时间】:2021-09-30 19:02:56
【问题描述】:

我有一个案例,我在侦听器中有一个方法,它的一些参数对于每个测试用例都不同。我尝试使用context.setAttribute("....."),但效果不佳。它只是为变量分配最后一个值,并被转移到所有测试用例中。

我已经给出了下面的代码。谁能告诉我该怎么做?

public class Myproject implements ITestListener{
    @Test(dataProvider = "getData")
    public static void test1(int i,ITestContext context){
       System.setProperty("webdriver.chrome.driver", ".\\drivers\\chromedriver.exe");
       WebDriver driver=new ChromeDriver();
       driver.get(url);
       context.setAttribute("driver", driver);
       context.setAttribute("testCaseNo",i+1);
       equalToOne(i);
    }
    
    @DataProvider(parallel = true)
    public Object[][] getData() {
        Object[][] data = new Object[4][1];
        data[0][0] = 0;
        data[1][0] = 1;
        data[2][0] = 2;
        data[3][0] = 3;
        return data;
    }
    public static void equalToOne(int k){
       Assert.assertEquals(1,k);
    }
    
    @Override
    public void onTestStart(ITestResult result) {
        // TODO Auto-generated method stub      
    }

    @Override
    public void onTestSuccess(ITestResult result) {
       int i=(int) result.getTestContext().getAttribute("testcaseNo");      
       System.out.println("Testcase " + i + " Passed");     
    }

    @Override
    public void onTestFailure(ITestResult result) {
        int i=(int) result.getTestContext().getAttribute("testcaseNo");     
        System.out.println("Testcase " + i + " Failed");
    }

    @Override
    public void onTestSkipped(ITestResult result) {
        // TODO Auto-generated method stub      
    }

    @Override
    public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
        // TODO Auto-generated method stub      
    }

    @Override
    public void onStart(ITestContext context) {
        // TODO Auto-generated method stub      
    }

    @Override
    public void onFinish(ITestContext context) {
        WebDriver driver=(WebDriver)context.getAttribute("driver");
        driver.quit();
    }
    
}

在 XML 文件中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="methods" thread-count="5">
<listeners>
       <listener class-name="testNgProjects.Myproject">
    </listener>
</listeners>
<test name="Test">
    <classes>
        <class name="testNgProjects.Myproject" />
    </classes>
</test> <!-- Test -->
</suite> <!-- Suite -->

我应该得到类似的输出

Test case 1 Failed
Test case 2 Passed
Test case 3 Failed
Test case 4 Failed

但是输出是

Test case 3 Failed
Test case 3 Passed
Test case 3 Failed
Test case 3 Failed

它采用i 的最后一个设置值,而不是在每次测试中采用不同的值。

【问题讨论】:

    标签: java selenium parallel-processing testng listener


    【解决方案1】:

    设置上下文不会解决,在你的测试用例中使用静态方法:

    org.testng.Reporter.getCurrentTestResult().setAttribute(a,b)
    

    并使用以下方法在您的侦听器中获取相同的值:

    org.testng.Reporter.getCurrentTestResult().getAttribute(a)
    

    【讨论】:

    • 成功了。我到处寻找这个。非常感谢人! !
    【解决方案2】:

    您实际上可以在没有侦听器(甚至上下文)的情况下完成此操作。对于这种特殊情况,只需 afterMethod 就可以了。 (您可以在@BeforeTest@AfterTest 方法中启动和关闭WebDriver。)

    由于您是并行运行它,因此您可以使用线程本身来识别特定的测试用例。

    @Test(dataProvider = "getData")
    public void test1(int i) {
        Thread.currentThread().setName(String.valueOf(i));
        equalToOne(i);
    }
    
    @AfterMethod
    public void afterMethod(ITestResult res) {
        String msg = "Testcase " + Thread.currentThread().getName();
        switch (res.getStatus()) {
            case ITestResult.SUCCESS:
                msg += " Passed";
                break;
            case ITestResult.FAILURE:
                msg += " Failed";
                break;
            case ITestResult.SKIP:
                msg += " Skipped";
                break;
            default:
                break;
        }
        System.out.println(msg);
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-29
      • 2010-09-20
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 2011-09-18
      相关资源
      最近更新 更多