You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CircleCI按耗时拆分测试时无法读取Behave生成的JUnit XML文件

问题原因

CircleCI 按测试耗时拆分并行任务的核心逻辑,是匹配历史上传的 JUnit 报告中 classname 字段值,和当前拆分时传入的测试文件标识做关联。Behave 框架默认生成的 JUnit 报告,classname 字段仅填充 Feature 名称,不带 .feature 文件的完整相对路径,和你通过 circleci tests glob 拿到的 features/featurefiles/XXX.feature 路径完全无法匹配,因此会抛出「No timing found」报错,回退到按文件名拆分的默认逻辑。

配置步骤
  • 安装支持自定义 JUnit 字段格式的 Behave 插件
    Behave 原生 JUnit 导出器不支持自定义 classname 规则,需要替换为 behave-junit-formatter。在依赖安装步骤执行安装命令,或者直接把包加入 requirements.txt:
    pip3 install behave-junit-formatter
    
  • 配置 Behave 输出符合 CircleCI 匹配规则的 JUnit 报告
    在项目根目录新建 behave.ini 配置文件,指定 JUnit 输出路径,以及 classname 字段直接输出 feature 文件的相对路径,和 glob 拿到的文件路径保持完全一致:
    [behave]
    junit_directory = reports
    formatters = behave_junit_formatter:JUnitFormatter
    junit_classname_template = {feature.filename}
    
  • 调整 CircleCI 配置中的测试执行命令
    去掉原命令中的 --junit 参数,替换为新的格式化器,提前创建报告目录避免写入报错,修改后的测试步骤如下:
    - run:
        name: Test application
        command: |
          mkdir -p reports
          TEST=$(circleci tests glob "features/featurefiles/*.feature" | circleci tests split --split-by=timings --timings-type=classname)
          echo $TEST
          behave $TEST -f behave_junit_formatter -o reports/
    
  • 确认测试结果上传路径正确
    现有配置中 store_test_results 指向的 reports 路径和 Behave 配置的 JUnit 输出目录一致,无需调整。
注意事项

第一次执行工作流时,因为平台还没有对应测试的历史耗时数据,依然会走默认拆分逻辑。等第一次执行完成、测试报告成功上传解析后,第二次及后续触发的工作流就会自动按照每个 feature 文件的实际执行耗时做均匀拆分,实现按耗时并行的预期效果。

内容的提问来源于stack exchange,提问作者Naseem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 20:42:21