import org.testng.ITestResult; //导入方法依赖的package包/类
@Override
@SuppressWarnings({"Indentation", "PMD.ExcessiveMethodLength"})
public void onTestStart(final ITestResult testResult) {
Current current = currentTestResult.get();
if (current.isStarted()) {
current = refreshContext();
}
current.test();
final String parentUuid = getUniqueUuid(testResult.getTestContext());
final ITestNGMethod method = testResult.getMethod();
final ITestClass testClass = method.getTestClass();
final List labels = new ArrayList<>();
labels.addAll(Arrays.asList(
//Packages grouping
new Label().withName("package").withValue(testClass.getName()),
new Label().withName("testClass").withValue(testClass.getName()),
new Label().withName("testMethod").withValue(method.getMethodName()),
//xUnit grouping
new Label().withName("parentSuite").withValue(safeExtractSuiteName(testClass)),
new Label().withName("suite").withValue(safeExtractTestTag(testClass)),
new Label().withName("subSuite").withValue(safeExtractTestClassName(testClass)),
//Timeline grouping
new Label().withName("host").withValue(getHostName()),
new Label().withName("thread").withValue(getThreadName())
));
labels.addAll(getLabels(testResult));
final List parameters = getParameters(testResult);
final TestResult result = new TestResult()
.withUuid(current.getUuid())
.withHistoryId(getHistoryId(method, parameters))
.withName(getMethodName(method))
.withFullName(getQualifiedName(method))
.withStatusDetails(new StatusDetails()
.withFlaky(isFlaky(testResult))
.withMuted(isMuted(testResult)))
.withParameters(parameters)
.withLinks(getLinks(testResult))
.withLabels(labels);
processDescription(getClass().getClassLoader(), method.getConstructorOrMethod().getMethod(), result);
getLifecycle().scheduleTestCase(parentUuid, result);
getLifecycle().startTestCase(current.getUuid());
final String uuid = current.getUuid();
Optional.of(testResult)
.map(ITestResult::getMethod)
.map(ITestNGMethod::getTestClass)
.map(classContainerUuidStorage::get)
.ifPresent(testClassContainerUuid -> getLifecycle().updateTestContainer(
testClassContainerUuid,
container -> container.getChildren().add(uuid)
));
}