Java 将参数TestNG DataProvider parallel=true从@Test传递给侦听器
我让DataProvider生成一些数据并将其提供给@TestJava 将参数TestNG DataProvider parallel=true从@Test传递给侦听器,java,selenium,testng,testng-dataprovider,Java,Selenium,Testng,Testng Dataprovider,我让DataProvider生成一些数据并将其提供给@Test @DataProvider(name=“dp”,parallel=true) 公共对象[][]getBrowser(方法m){ 迭代器Iterator=Constants.browsers.Iterator(); 字符串浏览器=null; 对象[][]数据=新对象[2][1]; 对于(int i=0;i
@DataProvider(name=“dp”,parallel=true)
公共对象[][]getBrowser(方法m){
迭代器Iterator=Constants.browsers.Iterator();
字符串浏览器=null;
对象[][]数据=新对象[2][1];
对于(int i=0;i<2;i++){
if(iterator.hasNext()){
browser=iterator.next();
数据[i][0]=浏览器;
}
}
返回数据;
}
按照在ITestContext中为ITestResult设置的方式设置属性
@Test(dataProviderClass = TestUtilities.class, dataProvider = "dp")
public void testing(String browser, ITestContext context) throws InterruptedException {
ITestResult result = Reporter.getCurrentTestResult();
// Changes here
result.setAttribute("browser", browser);
context.setAttribute("browser", browser);
initiate(browser, Constants.baseURL); //Instantiate Chrome or Edge WebDriver and go to the URL
// Do the testing
closeBrowser();
}
下面的方法将只执行一次
/**
* Invoked after all the test methods belonging to the classes inside the <test>
tag have run
* and all their Configuration methods have been called.
*
* @param context The test context
*/
@Override
public void onFinish(ITestContext context) {
String usedBrowser = null;
usedBrowser = (String) context.getAttribute("browser");
log.debug("ITestContext --> Used Browser : " + usedBrowser);
}
完成时只执行一次不幸的是,在尝试了您的建议后,我仍然看到与以前相同的问题。我只看到ITestResult只打印了一次。快速提问,OnFinish将只执行一次,这意味着最后执行的线程将覆盖先前完成的线程?无论如何,谢谢:)您正在ITestContext中设置context.setAttribute(“浏览器”,浏览器),因此它将被覆盖。其中一个测试可能失败,因此您会在onTestFailure、onTestSkipped上看到“仅查看ITestResult仅打印一次”的问题。测试实际上没有做任何事情。它只会同时启动Chrome和Edge浏览器,然后访问www.google.com。就这样。没有用于检查任何内容的断言或其他方法。之后,只需调用quit()。当我执行代码时,我可以看到这些浏览器同时启动,进入google.com,然后关闭浏览器。我的错。实际上,ITestResult在控制台中打印了两次,但第一次打印在日志堆栈的顶部,第二次打印在最后一次打印在底部。只有在检查.log文件后,我才能看到它们都以良好的顺序打印在日志文件中。非常感谢你的帮助Rahul:)
/**
* Invoked after all the test methods belonging to the classes inside the <test>
tag have run
* and all their Configuration methods have been called.
*
* @param context The test context
*/
@Override
public void onFinish(ITestContext context) {
String usedBrowser = null;
usedBrowser = (String) context.getAttribute("browser");
log.debug("ITestContext --> Used Browser : " + usedBrowser);
}
DEBUG TestBase -ITestResult --> BROWSER is Chrome
DEBUG TestBase -ITestResult --> BROWSER is Edge
DEBUG TestBase -ITestContext --> Used Browser : Edge --- Note this--