Java 如果DataProvider为单个测试方法运行多个具有不同数据的测试,请在TestNG/Maven报告中获取测试方法名称
我的自动化脚本中有一个测试方法,必须为6个不同的人运行。 有一个自定义数据提供程序提供这6个人,方法名为Java 如果DataProvider为单个测试方法运行多个具有不同数据的测试,请在TestNG/Maven报告中获取测试方法名称,java,maven,automated-tests,testng,rest-assured,Java,Maven,Automated Tests,Testng,Rest Assured,我的自动化脚本中有一个测试方法,必须为6个不同的人运行。 有一个自定义数据提供程序提供这6个人,方法名为getSalaryDetails()。执行工作正常,测试运行正常。报告是问题所在 对于单个方法的6次测试运行,结果显示为getSalaryDetails()的6次,这使得很难理解测试失败的数据提供程序 有没有一种方法可以在TestNG/Maven中实现,这样我就可以通过在某个地方添加参数/数据提供程序来获得测试方法名,这样它的读起来就有点像 Person1getSalaryDetails()
getSalaryDetails()
。执行工作正常,测试运行正常。报告是问题所在
对于单个方法的6次测试运行
,结果显示为getSalaryDetails()
的6次,这使得很难理解测试失败的数据提供程序
有没有一种方法可以在TestNG/Maven中实现,这样我就可以通过在某个地方添加参数/数据提供程序来获得测试方法名,这样它的读起来就有点像
Person1getSalaryDetails()
Person2getSalaryDetails()
等等
下面是用于报告的代码
public class ReportListener implements ITestListener {
//Extent Report Declarations
private static ExtentReports extent = ExtentManager.createInstance();
private static ThreadLocal<ExtentTest> test = new ThreadLocal<>();
@Override
public void onTestStart(ITestResult result) {
System.out.println((result.getMethod().getMethodName() + " started!"));
//Start operation for extentreports.
ExtentTest extentTest = extent.createTest(result.getMethod().getMethodName(), result.getMethod().getDescription());
test.set(extentTest);
}
@Override
public void onTestSuccess(ITestResult result) {
System.out.println((result.getMethod().getMethodName() + " passed!"));
test.get().pass("Test passed" + result);
}
@Override
public void onTestFailure(ITestResult result) {
System.out.println((result.getMethod().getMethodName() + " failed!"));
test.get().fail(result.getThrowable());
}
@Override
public void onTestSkipped(ITestResult result) {
System.out.println((result.getMethod().getMethodName() + " skipped!"));
test.get().skip(result.getThrowable());
}
@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
System.out.println(("onTestFailedButWithinSuccessPercentage for " + result.getMethod().getMethodName()));
}
@Override
public void onStart(ITestContext context) {
System.out.println("Extent Reports Version 3 Test Suite started!");
}
@Override
public void onFinish(ITestContext context) {
System.out.println(("Extent Reports Version 3 Test Suite is ending!"));
extent.flush();
}
公共类ReportListener实现ITestListener{
//范围报告声明
私有静态ExtentReports extent=ExtentManager.createInstance();
私有静态ThreadLocal测试=新ThreadLocal();
@凌驾
公共void onTestStart(ITestResult结果){
System.out.println((result.getMethod().getMethodName()+“started!”);
//启动extentreports的操作。
extendettest extendettest=extent.createTest(result.getMethod().getMethodName(),result.getMethod().getDescription());
测试集(延伸测试);
}
@凌驾
公共void onTestSuccess(ITestResult结果){
System.out.println((result.getMethod().getMethodName()+“已通过!”);
test.get().pass(“测试通过”+结果);
}
@凌驾
公共void onTestFailure(ITestResult结果){
System.out.println((result.getMethod().getMethodName()+“failed!”);
test.get().fail(result.getThrowable());
}
@凌驾
已跳过公共void onTestSkipped(ITestResult结果){
System.out.println((result.getMethod().getMethodName()+“跳过”);
test.get().skip(result.getThrowable());
}
@凌驾
public void ontestfailed但未成功百分比(ITestResult结果){
System.out.println((“+result.getMethod().getMethodName()”的ontestfailed但不成功百分比);
}
@凌驾
公共void onStart(ITestContext上下文){
System.out.println(“扩展报告版本3测试套件已启动!”);
}
@凌驾
公共void onFinish(ITestContext上下文){
System.out.println((“扩展报告版本3测试套件已结束!”);
expndure.flush();
}
数据提供程序传递给测试方法的参数可以在侦听器方法中获取,如下所示
@Override
public void onTestStart(ITestResult result) {
System.out.println((result.getMethod().getMethodName() + " started!"));
//Start operation for extentreports.
String methodName = result.getMethod().getMethodName();
Object[] parameters = result.getParameters();
if (parameters != null && parameters.length > 0) {
methodName = parameters[0].toString + methodName;
}
ExtentTest extentTest = extent.createTest(methodName, result.getMethod().getDescription());
test.set(extentTest);
}
另一个选项是,我们可以将数据提供程序方法中的参数添加到测试方法中的测试描述中
@Test
public void testMethod(String personName) {
ITestResult result = Reporter.getCurrentTestResult();
result.getMethod().setDescription(personName + " along with other string");
}
测试(dataProvider=“inputData”)
公共void测试方法(最终映射数据映射){
试一试{
//注意:正如您所说的,您在每次测试运行中都会使用dataProvider,您将获得personName-add名称,如下行所示。
//get(“personName”)-从dataprovider输入数据
extendettest=extent.createTest(Thread.currentThread().getStackTrace()[1].getMethodName().toString()+dataMap.get(“personName”);
}捕获(例外e){
日志(Status.ERROR,e.getMessage());
}
对于您的第一个解决方案,如何在TestNG报告中获取它。它正在打印名称,但如何在TestNG函数结果窗口中追加它。@prakashWell,您正在使用ExtentReport。您可以使用
test.get().info()
。如果您使用TestNG html报告,report.log()
可以提供帮助。在listener?Prakash Saravanan中,在何处添加此报告.log
,请查看我的答案我不知道如何在控制台中更改方法名称。我们可以在html报告中执行此操作,如上所述。我们可以在失败消息中打印参数,以区分其他运行。
@Test(dataProvider = "inputData")
public void testMethod(final Map<String, Object> dataMap){
try{
//Note: As you said you are using dataProvider every test run you will get the personName- add name like shown below line.
//dataMap.get("personName") - input data from dataprovider
extentTest = extent.createTest(Thread.currentThread().getStackTrace()[1].getMethodName().toString()+dataMap.get("personName"));
}catch(Exception e){
extentTest.log(Status.ERROR, e.getMessage());
}