
本文详细说明如何在 qaf 4.x(如 4.0.0-rc1)中正确集成 allure testng,生成标准 json 格式报告,并解决因依赖错配导致的报告不生成问题。
本文详细说明如何在 qaf 4.x(如 4.0.0-rc1)中正确集成 allure testng,生成标准 json 格式报告,并解决因依赖错配导致的报告不生成问题。
QAF(Qmetry Automation Framework)原生提供功能丰富的 HTML 报告(基于 ExtentReports),但若需与企业级测试看板(如 Jenkins + Allure Server)统一集成,常需输出 Allure 兼容的 JSON 格式结果。值得注意的是:*QAF 不支持 `allure-cucumber-jvm系列依赖**——即使项目未使用 Cucumber,该依赖也无法与 QAF 的 TestNG 执行器协同工作,会导致allure-results/` 目录为空或报告完全缺失。
✅ 正确方案是使用 allure-testng(专为 TestNG 设计),并配合 QAF 的监听器机制确保事件被正确捕获。
✅ 正确 Maven 配置(pom.xml)
<!-- Allure TestNG 支持(必须使用与 Allure CLI 版本兼容的版本) --> <dependency><groupid>io.qameta.allure</groupid><artifactid>allure-testng</artifactid><version>2.23.0</version><scope>test</scope></dependency>
同时,在 maven-surefire-plugin 中配置结果目录与 TestNG 监听器:
<plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-surefire-plugin</artifactid><version>3.2.5</version><configuration><!-- 指定 Allure 结果输出路径 --><systempropertyvariables><allure.results.directory>${project.basedir}/allure-results</allure.results.directory></systempropertyvariables><!-- 注册 Allure TestNG Listener --><properties><property><name>listener</name><value>io.qameta.allure.testng.AllureTestNg</value></property></properties><!-- 确保 QAF 自身监听器不冲突(推荐保留 QAF 默认监听器) --><argline>-javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar</argline></configuration><dependencies><dependency><groupid>org.aspectj</groupid><artifactid>aspectjweaver</artifactid><version>${aspectj.version}</version></dependency></dependencies></plugin>
⚠️ 注意事项:
allure-cucumber5-jvm等 Cucumber 专用适配器 与 QAF 不兼容,务必移除;allure-testng仅能捕获 TestNG 生命周期事件(@Test,@BeforeMethod等),无法自动记录 QAF 的 step-level 日志(如get("url")、verifyText(...)) —— 这是其与原生 QAF 报告的核心差异;- 如需增强步骤粒度,可通过
Allure.step()显式封装关键操作(见下例)。
✅ 在测试代码中补充 Allure 步骤(可选增强)
import io.qameta.allure.Step;
@Test
public void verifyLoginPage() {
driver.get("https://example.com/login");
fillUsername("testuser");
fillPassword("pass123");
clickLogin();
assertDashboardLoaded();
}
@Step("输入用户名: {username}")
private void fillUsername(String username) {
getDriver().findElement(By.id("username")).sendKeys(username);
}
@Step("点击登录按钮")
private void clickLogin() {
getDriver().findElement(By.id("login-btn")).click();
}
✅ 生成并查看报告
执行测试后,Allure JSON 文件将生成于 allure-results/ 目录。使用 Allure CLI 生成可视化报告:
# 安装 Allure CLI 后(v2.23.0+) allure generate allure-results -o allure-report --clean allure open allure-report
✅ 总结
| 项目 | 推荐做法 |
|---|---|
| 依赖选择 | ✅ allure-testng;❌ allure-cucumber*-jvm
|
| 监听器注册 | 必须在 Surefire 中声明 io.qameta.allure.testng.AllureTestNg
|
| 步骤可见性 | 原生无 QAF action 级日志 → 需手动 @Step 注解增强 |
| QAF 兼容性 | 已验证适用于 QAF 4.0.0-RC1 及后续稳定版(4.0.0+) |
通过以上配置,即可在保留 QAF 强大测试能力的同时,输出标准 Allure JSON 报告,无缝接入 CI/CD 流水线与 Allure 服务。










