#java #testng #testng-dataprovider
#java #testng #testng-dataprovider
Вопрос:
Я создаю пользовательский reporter, реализующий интерфейс IReporter, и хотел бы опубликовать входные параметры теста в итоговом отчете о тестировании. Мои тестовые входные параметры предоставляются через TestNG Dataprovider. Каждый входной параметр является экземпляром класса TestCase.
Я могу получить доступ к входным параметрам в моем отчете, но это всего лишь хэш-код объекта, а не сам экземпляр, из которого я мог бы вызвать необходимые тестовые данные и опубликовать в html-отчете.
Я смог распечатать все входные аргументы, используя следующий код
Set<ITestResult> failedTests = testContext
.getFailedTests()
.getAllResults();
for (ITestResult result: failedTests) {
for (Object param: result.getParameters()) {
System.out.println(param);
}
}
Output:
data.service.entities.TestCase@1a1da881
org.testng.TestRunner@4dbb42b7
Метод getParameters() возвращает массив объектов, которые я не знаю, как преобразовать в TestCase.
Пожалуйста, посоветуйте способ получить экземпляр data.service.entities.TestCase@1a1da881 для вызова его методов.
Ответ №1:
Чтобы получить экземпляры, я создал класс TestNG CustomListener, где я вручную устанавливаю входной аргумент (TestCase) в качестве атрибута каждого выполняемого теста ITestResult:
public class CustomListener extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult iTestResult) {
super.onTestFailure(iTestResult);
TestCase tCase = (TestCase) iTestResult.getParameters()[0];
iTestResult.setAttribute("failed_case", tCase);
}
@Override
public void onTestSuccess(ITestResult iTestResult) {
super.onTestSuccess(iTestResult);
TestCase tCase = (TestCase) iTestResult.getParameters()[0];
iTestResult.setAttribute("passed_case", tCase);
}
@Override
public void onTestSkipped(ITestResult iTestResult) {
super.onTestSkipped(iTestResult);
TestCase tCase = (TestCase) iTestResult.getParameters()[0];
iTestResult.setAttribute("skipped_case", tCase);
}
}
В моем пользовательском классе отчетов я получаю объекты каждого тестового примера, как показано ниже:
TestCase failedCase = (TestCase) testResult.getAttribute("failed_case");
TestCase passedCase = (TestCase) testResult.getAttribute("passed_case");
TestCase skippedCase = (TestCase) testResult.getAttribute("skipped_case");