@After("setValueToAnyField() && withParameterAnnotation()") public void parameterValueChanged(JoinPoint joinPoint) { try { FieldSignature fieldSignature = (FieldSignature) joinPoint.getSignature(); Parameter parameter = fieldSignature.getField().getAnnotation(Parameter.class); String name = parameter.value().isEmpty() ? fieldSignature.getName() : parameter.value(); Allure.LIFECYCLE.fire(new AddParameterEvent(name, joinPoint.getArgs()[0].toString())); } catch (Exception ignored) { } }
/** * Creates test case parameters in XML in case of parametrized test (see TestNG @DataProvider). * Java 8 allows to keep test method parameter names in class files (needs javac -parameters compilation). * In Java 7 default parameter naming is used (arg0, arg1, ... ). * * @param iTestResult parameter passed to onTestStart() callback by TestNG * @see #getNameForParameter(String, List, int) * @see #getMethodParameterNamesIfAvailable(Method) */ private void fireAddParameterEvents(ITestResult iTestResult) { Object[] parameters = iTestResult.getParameters(); Method nativeMethod = iTestResult.getMethod().getConstructorOrMethod().getMethod(); Annotation[][] parametersAnnotations = nativeMethod.getParameterAnnotations(); List<String> methodParameterNames = getMethodParameterNamesIfAvailable(nativeMethod); for (int i = 0; i < parameters.length; i++) { Parameter parameter = getParameterAnnotation(parametersAnnotations[i]); if (parameter == null) { continue; } String name = getNameForParameter(parameter.value(), methodParameterNames, i); String value = Objects.toString(parameters[i]); getLifecycle().fire(new AddParameterEvent(name, value, ParameterKind.ARGUMENT)); } }