零基础学习CMake--第六章:测试与调试——用CTest让项目更可靠6.3 测试报告生成:HTML/XML格式输出与持续集成(CI) - 指南

第六章:测试与调试——用CTest让项目更可靠

6.3 测试报告生成:HTML/XML格式输出与持续集成(CI)

从“命令行输出”到“可视化报告”:测试结果的“最后一公里”

在前面的章节中,我们用ctest运行测试,只能看到命令行的“Passed/Failed”输出。但在实际项目中,我们需要:

  • ​可视化报告​​:HTML格式的报告,直观展示每个测试用例的执行情况、耗时、错误信息;

  • ​持续集成​​:每次代码提交自动运行测试,生成报告并通知团队;

  • ​结果归档​​:XML格式的报告,便于CI系统解析、存储和追溯。

这一节,我们将学习如何用CTest生成​​HTML/XML报告​​,并将测试集成到​​GitHub Actions​​(主流CI工具)中,实现“代码提交→自动测试→报告生成”的全流程自动化。


一、CTest测试报告格式介绍

CTest支持多种报告格式,最常用的是:

  1. ​JUnit XML​​:行业标准格式,几乎所有CI系统(GitHub Actions、Jenkins、GitLab CI)都支持解析;

  2. ​HTML​​:可视化界面,适合本地查看或嵌入项目文档;

  3. ​Plain Text​​:纯文本输出,适合日志归档。


二、生成JUnit XML报告(用于CI集成)

2.1 命令行生成XML报告

CTest提供了--output-junit参数,直接生成JUnit格式的XML报告:

# 在项目build目录中运行
ctest --test-dir tests \  # 指定测试目录
      --output-junit report.xml \  # 输出XML报告文件名
      --verbose  # 可选:显示详细执行过程

运行后,会在build目录生成report.xml,内容如下(简化):



  
    
  
  
    
    
  

2.2 配置CMake自动生成XML报告

可以在CMakeLists.txt中添加​​自定义目标​​,一键生成XML报告:

# 在父CMakeLists.txt中添加
add_custom_target(generate_test_report
    COMMAND ctest --test-dir tests --output-junit ${CMAKE_BINARY_DIR}/report.xml
    COMMENT "Generating JUnit XML test report..."
)

运行cmake --build . --target generate_test_report,即可生成报告。


三、生成HTML报告(本地可视化)

CTest自带​​HTML报告生成器​​,通过--output-html参数生成:

ctest --test-dir tests \
      --output-html report.html \
      --title "FileEncryptor Test Report"  # 报告标题

生成的report.html是完整的网页文件,包含:

  • 测试套件的整体统计(通过/失败数量、耗时);

  • 每个测试用例的详细信息(名称、状态、耗时、错误日志);

  • 可展开/折叠的测试树结构。

示例HTML报告截图(简化):

https://cmake.org/cmake/help/latest/_images/CTestTestReport.png


四、集成到GitHub Actions(持续集成)

GitHub Actions是免费的CI/CD服务,能自动运行测试并生成报告。我们以​​文件加密工具项目​​为例,配置CI流程:

4.1 准备GitHub仓库

将项目上传到GitHub,并启用GitHub Actions(默认已启用)。

4.2 创建Workflow文件

在项目根目录创建.github/workflows/ci.yml,内容如下:

name: FileEncryptor CI
on: [push, pull_request]  # 触发条件:push或PR
jobs:
  test:
    runs-on: ubuntu-latest  # 运行环境:Ubuntu最新版
    steps:
      # 1. 检出代码
      - name: Checkout code
        uses: actions/checkout@v4
      # 2. 安装依赖(OpenSSL、Boost)
      - name: Install dependencies
        run: |
          sudo apt update
          sudo apt install -y libssl-dev libboost-filesystem-dev libboost-system-dev
      # 3. 配置CMake
      - name: Configure CMake
        run: |
          mkdir build
          cd build
          cmake .. -DBUILD_TESTS=ON  # 启用测试
      # 4. 构建项目
      - name: Build project
        run: |
          cd build
          cmake --build .
      # 5. 运行测试并生成XML报告
      - name: Run tests and generate report
        run: |
          cd build
          ctest --test-dir tests --output-junit report.xml --verbose
      # 6. 上传报告作为Artifact(可在PR中查看)
      - name: Upload test report
        uses: actions/upload-artifact@v4
        with:
          name: Test Report
          path: build/report.xml
          retention-days: 7  # 保留7天

4.3 效果演示

  1. ​推送代码到GitHub​​:触发CI workflow;

  2. ​查看CI状态​​:在GitHub仓库的“Actions” tab中,能看到测试是否通过;

  3. ​查看测试报告​​:点击“Artifacts”→“Test Report”→“report.xml”,GitHub会自动渲染JUnit报告:

    https://docs.github.com/assets/cb-138303/images/help/repository/manual-check-run-test-report.png


五、高级技巧:自定义CI报告

5.1 过滤测试用例

如果只想运行特定标签的测试(比如“fast”),可以在ctest命令中添加-L参数:

- name: Run fast tests
  run: |
    cd build
    ctest --test-dir tests -L fast --output-junit report.xml

5.2 显示详细错误日志

ctest中添加-V参数,输出详细日志(包括测试失败的原因):

- name: Run tests with verbose output
  run: |
    cd build
    ctest --test-dir tests -V --output-junit report.xml

5.3 集成CDash(可选)

CDash是一个开源的测试仪表盘工具,可以收集多个项目的测试报告,生成可视化面板。配置步骤:

  1. 安装CDash:sudo apt install cdash

  2. 启动CDash服务:cdash-configure

  3. 修改CTest配置,指向CDash服务器:

    set(CTEST_DROP_METHOD "http")
    set(CTEST_DROP_SITE "your-cdash-server.com")
    set(CTEST_DROP_LOCATION "/submit.php?project=FileEncryptor")

六、总结:测试报告与CI的价值

  1. ​可视化​​:HTML报告让测试结果一目了然;

  2. ​自动化​​:CI集成实现“代码提交→自动测试→报告生成”;

  3. ​追溯性​​:XML报告便于存储和排查问题;

  4. ​团队协作​​:PR中的测试报告让评审更高效。

​下一章预告​​:调试技巧——GDB与LLDB高级用法,解决加密算法中的棘手问题!

(配套资源:GitHub Actions配置示例CTest报告生成脚本


​本节要点​​:

  • --output-junit生成JUnit XML报告,用于CI解析;

  • --output-html生成可视化HTML报告;

  • 配置GitHub Actions自动运行测试并上传报告;

  • 测试报告的核心价值:可视化、自动化、追溯性。

posted on 2025-11-21 08:23  ljbguanli  阅读(0)  评论(0)    收藏  举报