如何修改Allure测试报告中测试用例的展示顺序?
让Allure报告按TestNG测试执行顺序展示用例
刚好之前碰到过类似的场景——用TestNG的dependsOnMethods控住了执行顺序,但Allure偏偏按方法名字母序展示,给你几个实用的解决方案:
方法1:用TestNG监听器自动注入执行顺序(最通用)
这个方法适合测试用例多、不想手动维护顺序的场景,通过自定义监听器记录每个测试的执行顺序,给Allure打个自定义标签,之后就能在报告里按这个标签排序。
具体步骤:
- 写个TestNG监听器类,在测试开始时给Allure测试用例加个
executionOrder标签:
import io.qameta.allure.Allure; import org.testng.ITestListener; import org.testng.ITestResult; import java.util.concurrent.atomic.AtomicInteger; public class ExecutionOrderTracker implements ITestListener { private final AtomicInteger executionSeq = new AtomicInteger(1); @Override public void onTestStart(ITestResult result) { // 给当前测试用例打上执行顺序的标签 Allure.getLifecycle().updateTestCase(testCase -> testCase.addLabel("executionOrder", String.valueOf(executionSeq.getAndIncrement())) ); } // 其他监听器方法留空或者用默认实现就行 }
- 在你的TestNG配置xml里注册这个监听器:
<listeners> <listener class-name="com.your.package.ExecutionOrderTracker"/> </listeners>
- 生成Allure报告后,在报告页面的Sort by下拉菜单里选
executionOrder,就能看到测试用例按实际执行顺序排列了。
方法2:手动给测试方法加Allure的@Order注解
如果你的测试用例数量不多,手动指定顺序也挺方便的——注意要用Allure的@Order注解,不是TestNG的,这样报告默认就会按这个顺序展示:
import io.qameta.allure.Order; import org.testng.annotations.Test; public class YourTestSuite { @Test(dependsOnMethods = {"test3"}) @Order(4) // 对应最后执行的test1 public void test1() { // 你的测试逻辑 } @Test @Order(1) // 第一个执行的test2 public void test2() { // 你的测试逻辑 } @Test(dependsOnMethods = {"test2"}) @Order(2) // 第二个执行的test3 public void test3() { // 你的测试逻辑 } @Test(dependsOnMethods = {"test3"}) @Order(3) // 第三个执行的test4 public void test4() { // 你的测试逻辑 } }
方法3:修改Allure配置文件,默认按执行顺序排序
如果想一劳永逸,直接改Allure的默认排序规则,在项目的src/test/resources下新建allure.properties文件,添加下面的配置:
allure.report.sorting=EXECUTION_ORDER
注意这个配置需要Allure 2.17及以上版本支持,配置好之后生成的报告默认就会按执行顺序排列,不用再手动选排序方式。
内容的提问来源于stack exchange,提问作者Hethurin
相关产品推荐
相关产品推荐

