我一直在研究是否可以将屏幕截图附件附加到由自定义 @Captured 注释标记的特定方法,以便使用 AOP 进行 Allure 转发
我创建了注释本身和拦截标记方法的方面
@Aspect
public class ScreenshotAppenderAspect {
@Pointcut("@annotation(com.annotanions.Captured)")
public void captured (){}
//if method returns object
@Around("captured()")
public Object aroundStep(ProceedingJoinPoint point){
Object result;
//getting name of allure step
String stepName = getStepName();
result = point.proceed();
// method with screenshot attachment
Screenshot(stepName);
}
//if it's void method
@Around("captured() && execution(void *(..))")
public Object aroundStep(ProceedingJoinPoint point){
point.proceed();
// method with screenshot attachment
Screenshot(stepName);
}}
但是,报告中的结果在标有@Captured“打开谷歌”步骤后添加了屏幕截图步骤。 有没有办法直接把截图步骤或附件本身 在标记方法内部的末尾,就像我在方法本身内手动完成的一样。我知道 allure 本身可以与 AOP 一起使用,但我对其方法的理解有限
你的方面
@Around
建议方法永远不会返回任何结果,即没有任何内容传递给调用者,这将产生像null
,0
,false
这样的默认值。此外,我认为没有必要两次捕获相同的连接点。如果您以正确的方式编写方面,它也适用于 void
方法。另外,包名不应该是com.annotations
而不是com.annotanions
吗?
从概念上讲,您的方面应该如下所示,可能还加上一些错误处理:
@Aspect
public class ScreenshotAppenderAspect {
@Around("@annotation(com.annotanions.Captured)")
public Object aroundStep(ProceedingJoinPoint point) throws Throwable {
//getting name of allure step
String stepName = getStepName();
Object result = point.proceed();
// method with screenshot attachment
Screenshot(stepName);
return result;
}
}