JUnit4测试Allure报告仅显示NORMAL严重级别解决方案咨询
JUnit4集成Allure时严重级别始终显示NORMAL的解决方案
1 排查基础依赖与注解配置问题
- 确认引入的是适配JUnit4的Allure依赖,不要错引JUnit5版本的
allure-junit5,依赖不对会导致Allure完全无法识别JUnit4测试上的自定义注解,所有用例严重级别会默认回退为NORMAL。正确的Maven依赖示例:
<dependency> <groupId>io.qameta.allure</groupId> <artifactId>allure-junit4</artifactId> <version>与你本地安装的Allure命令行版本一致</version> <scope>test</scope> </dependency>
- 确认
@Severity注解的导入路径为io.qameta.allure.Severity,同名的其他第三方注解不会被Allure扫描识别。 - 确认测试类、测试方法均为public修饰,JUnit4不会执行非public的测试方法,对应的注解自然也不会被读取。
- 如果你使用了自定义Runner(比如
SpringJUnit4ClassRunner),可以在测试类上手动添加Allure监听器注解,避免监听器被自定义Runner屏蔽:
import io.qameta.allure.junit4.AllureJunit4; @RunWith(JUnit4.class) @Listeners({AllureJunit4.class}) public class YourTestClass { // 测试用例 }
2 修正Allure Lifecycle的错误写法
你之前写的运行时修改标签代码不生效,有两个核心错误:
- 传入了随机生成的UUID作为用例ID:
UUID.randomUUID().toString()生成的字符串和当前运行测试的实际用例ID完全不匹配,Allure找不到对应要更新的测试结果对象,修改自然不会落地。正确的用法是调用单参数的updateTestCase方法,不需要手动传ID,Allure会自动绑定当前线程上下文里正在执行的测试用例。 - 严重级别值大小写错误:
SeverityLevel.CRITICAL.toString()返回的是大写字符串CRITICAL,但Allure UI内置的严重级别匹配规则只识别小写值(critical/blocker/normal等),值不匹配时会直接默认显示为normal。正确的取值方式是调用枚举的value()方法。
修正后的可运行代码示例:
import io.qameta.allure.Allure; import io.qameta.allure.SeverityLevel; import io.qameta.allure.model.Label; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestWatcher; public class DemoTest { @Rule public TestWatcher setSeverityWatcher = new TestWatcher() { @Override protected void starting(org.junit.runner.Description description) { Allure.getLifecycle().updateTestCase(testResult -> { // 先移除原有错误的severity标签,避免标签重复导致UI识别异常 testResult.getLabels().removeIf(label -> "severity".equals(label.getName())); // 写入符合格式要求的严重级别标签 testResult.getLabels().add( new Label() .setName("severity") .setValue(SeverityLevel.CRITICAL.value()) ); }); } }; @Test public void criticalTestCase() { // 测试逻辑 } }
3 排查报告生成环节的异常
- 每次执行测试生成报告前,先清空项目根目录下的
allure-results文件夹,旧的残留测试结果会覆盖新生成的带正确标签的结果文件,导致你看到的报告始终是旧版本的错误内容。 - 检查测试资源目录下的
allure.properties配置文件,确认没有配置全局标签拦截、重写规则,比如有没有自定义的标签映射逻辑把所有severity值都替换成了normal。 - 验证其他Allure注解(比如
@Feature、@Story、@Step)是否能正常在报告中显示,如果所有注解都不生效,优先回到第一步排查依赖和监听器配置问题;如果只有@Severity不生效,基本是注解导错包、严重级别值大小写不匹配的问题。
内容的提问来源于stack exchange,提问作者Kushal Shinde
相关产品推荐
相关产品推荐

