Получить имя метода Test в отчетах TestNG / Maven, если DataProvider выполняет несколько тестов с разными данными для одного метода Test. - PullRequest
1 голос
/ 23 июня 2019

У меня есть метод Test в моем скрипте автоматизации, который должен быть запущен для 6 разных людей. Существует специальный DataProvider, который предоставляет этих 6 человек, а имя метода - getSalaryDetails(). Выполнение работает отлично и тесты работают нормально. Отчетность - это то, где возникает проблема.

Для этих 6 Test runs для одного метода результаты отображаются как 6 раз для getSalaryDetails(), что затрудняет понимание 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 ]

1 голос
/ 24 июня 2019

Параметры, передаваемые поставщиком данных в методы тестирования, можно получить в методах прослушивателя следующим образом

@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");
}
0 голосов
/ 26 июня 2019
@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());
    }
...