如果DataProvider针对单个Test方法运行具有不同数据的多个测试,则在TestNG / Maven报告中获取Test方法名称

时间:2019-06-23 08:34:35

标签: java maven automated-tests testng rest-assured

我的自动化脚本中有一个Test方法,必须为6个不同的人运行。 有一个自定义的DataProvider,提供了这6个人,方法名称为getSalaryDetails()。执行工作正常,测试运行正常。报告是问题所在。

对于单一方法的这些6 Test runs,结果显示为getSalaryDetails()的6倍,这使得很难理解测试将失败的DataProvider。

有没有一种方法可以在TestNG / Maven中实现,所以我可以通过在某个地方附加参数/数据提供程序来获得Test方法的名称,这样它的读取结果会像 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();
    }

2 个答案:

答案 0 :(得分:1)

数据提供者传递给测试方法的参数可以按以下方法在侦听器方法中获取

@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");
}

答案 1 :(得分:0)

EKEventStore