使用 AOP 将屏幕截图或其他附件附加到 Allure 报告的步骤

问题描述 投票:0回答:1

我一直在研究是否可以将屏幕截图附件附加到由自定义 @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“打开谷歌”步骤后添加了屏幕截图步骤。 enter image description here 有没有办法直接把截图步骤或附件本身 在标记方法内部的末尾,就像我在方法本身内手动完成的一样。我知道 allure 本身可以与 AOP 一起使用,但我对其方法的理解有限

java maven junit5 aop allure
1个回答
0
投票

你的方面

@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;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.