Как добавить имя поставщика данных вместе с именем метода в отчете по экстентам? - PullRequest
0 голосов
/ 28 августа 2018

Я работаю над платформой Extent Report в моем текущем проекте. В моем тестовом классе я использую класс провайдера данных для импорта тестовых данных. Конкретный тест содержит 10 проверочных тестов, повторяющих ключ поставщика данных. Когда дело доходит до отчета об объеме, я записываю имя метода в отчет Но я должен дифференцировать каждый тест поставщика данных с именем, соответствующим каждому тесту проверки. Вот мой сценарий: 1. Конфигурация отчета по экстентам:

   @BeforeSuite
   public void setUp()
   {
       htmlReporter = new ExtentHtmlReporter(System.getProperty("user.dir") +"/test-output/extentReport.html");
       extent = new ExtentReports();
       extent.attachReporter(htmlReporter);

       extent.setSystemInfo("OS", "Windows");
       extent.setSystemInfo("Host Name", "1016086");
       extent.setSystemInfo("Environment", "QA");
       extent.setSystemInfo("User Name", "BABURAJ V D");

       htmlReporter.config().setChartVisibilityOnOpen(true);
       htmlReporter.config().setDocumentTitle("Extent report");
       htmlReporter.config().setReportName("Final Report");
   }


      @BeforeClass
      public synchronized void beforeClass() {
          test = extent.createTest(getClass().getSimpleName());
          parentTest.set(test);

      }

      @BeforeMethod
      public synchronized void beforeMethod(Method method) {

          child = parentTest.get().createNode(method.getName());
          childTest.set(child);

      }
      @AfterMethod
        public synchronized void afterMethod(ITestResult result) {
            if (result.getStatus() == ITestResult.FAILURE)
                childTest.get().fail(result.getThrowable());
            else if (result.getStatus() == ITestResult.SKIP)
                childTest.get().skip(result.getThrowable());
            else
                childTest.get().pass("Test passed");

   }

   @AfterSuite

   public void tearDown(){

       extent.flush();
   }

Extend Report

@Test(priority = 2, dataProvider = GE_XR240_DEVICE_DataProvider.DEVICE_ADD_VALIDATIONS, dataProviderClass = GE_XR240_DEVICE_DataProvider.class)

public void OPTIMA_XR240_FAILED_MESSAGE_VALIDATION(Map<String, String> deviceTestData) throws InterruptedException { }

Это проверки, происходящие в этом конкретном тесте OPTIMA_XR240_FAILED_MESSAGE_VALIDATION или сообщение об ошибке, которое должно отображаться в пользовательском интерфейсе:

Add Device Failed - System name should be filled
Add Device Failed - System Id should be filled
Add Device Failed - Manufacturer should be assigned
Add Device Failed - System model should be assigned
Add Device Failed - Current IP Address / Host Name should be filled

Так что я должен сделать отчет, который должен содержать часть информации, относящейся к проверке, которую он выполняет, а не только имя метода.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Это предварительный отрывок из экстента-testng-plugin, который скоро будет выпущен как часть версии 4, но разместив его здесь, так вы узнаете, как вы будете использовать провайдера данных в своих методах:

public class ExtentITestListener
    implements ITestListener {

    private static final ExtentReports EXTENT = Extent.getInstance();

    private static ThreadLocal<ExtentTest> methodTest = new ThreadLocal<ExtentTest>();
    private static ThreadLocal<ExtentTest> dataProviderTest = new ThreadLocal<>();

    @Override
    public synchronized void onStart(ITestContext context) { }

    @Override
    public synchronized void onFinish(ITestContext context) {
        EXTENT.flush();
    }

    @Override
    public synchronized void onTestStart(ITestResult result) {      
        String methodName = result.getMethod().getMethodName();
        if (result.getParameters().length>0) {
            if (methodTest.get() != null && methodTest.get().getModel().getName().equals(methodName)) { } 
            else {
                createTest(result);
            }
            String paramName = Arrays.asList(result.getParameters()).toString();
            ExtentTest paramTest = methodTest.get().createNode(paramName);
            dataProviderTest.set(paramTest);
        } else {
            createTest(result);
        }
    }

    private void createTest(ITestResult result) {
        String methodName = result.getMethod().getMethodName();
        ExtentTest test = EXTENT.createTest(methodName);
        methodTest.set(test);

        String[] groups = result.getMethod().getGroups();
        if (groups.length > 0) {
            Arrays.asList(groups)
                .forEach(x -> methodTest.get().assignCategory(x));
        }
    }

    @Override
    public synchronized void onTestSuccess(ITestResult result) {
        getTest(result).pass("Test passed");
    }

    private ExtentTest getTest(ITestResult result) {
        ExtentTest t = result.getParameters() != null && result.getParameters().length>0
                ? dataProviderTest.get()
                : methodTest.get();
        return t;
    }

    @Override
    public synchronized void onTestFailure(ITestResult result) {
        getTest(result).fail(result.getThrowable());
    }

    @Override
    public synchronized void onTestSkipped(ITestResult result) {
        getTest(result).skip(result.getThrowable());
    }

    @Override
    public synchronized void onTestFailedButWithinSuccessPercentage(ITestResult result) { }

}


public class Extent 
    implements Serializable {

    private static final long serialVersionUID = 1L;

    private static class ExtentReportsLoader {

        private static final ExtentReports INSTANCE = new ExtentReports();

        static {
        }
    }

    public static synchronized ExtentReports getInstance() {
        return ExtentReportsLoader.INSTANCE;
    }

    @SuppressWarnings("unused")
    private ExtentReports readResolve() {
        return ExtentReportsLoader.INSTANCE;
    }

}

Поскольку это ITestListener, вы можете добавить его непосредственно в свой тестовый или базовый класс, например так:

@Listeners(ExtentITestListenerAdapter.class)
public class MyTests {
    @Test
    public void test() {
        ...
    }
}
0 голосов
/ 28 августа 2018

Создается узел с именем метода, так как вы определили метод с именем "OPTIMA_XR240_FAILED_MESSAGE_VALIDATION"

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

 child = parentTest.get().createNode("Test node");
 childTest.set(child);

Каждый раз, когда вы хотите дать некоторую числовую идентификацию, такую ​​как «Тестовый узел 1», «Тестовый узел 2» и так далее. Вы можете получить его с помощью счетчика приращения или цикла, и он будет определен как:

child = parentTest.get().createNode("Test node" +i);
childTest.set(child);

Вы можете увеличить значение i до завершения метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...