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

如何让Boost Unit Test在JUnit testcase属性中显示文件名?

关于Boost Unit Test JUnit日志文件名位置的问题解答

问题1:Boost Unit Test能否直接将文件名添加到属性中?

不能。Boost Unit Test自带的JUnit日志器(log_format=JUNIT)没有提供配置选项,能把测试用例的文件名从<system-out>标签内转移到<testcase>的属性里。默认的JUnit输出格式中,<testcase>的属性是预定义的(比如assertions、classname、name、time这些),Boost的实现既没开放自定义这些属性的接口,也不会自动从日志内容里提取文件名放到属性中。

问题2:通过Shell脚本调整的方案

可以用Shell脚本结合XML处理工具(推荐xmlstarlet,比sed/awk处理XML更可靠)来修改生成的JUnit XML文件,具体步骤如下:

前提准备

先安装xmlstarlet,大部分Linux发行版可以通过包管理器安装:

# Debian/Ubuntu系
sudo apt install xmlstarlet
# RHEL/CentOS系
sudo yum install xmlstarlet

操作步骤

  1. 先运行测试生成原始JUnit XML文件:
./test --log_level=all --log_format=JUNIT --report_level=no > test_results.xml
  1. 编写Shell脚本(比如fix_junit_file_attr.sh)来修改XML:
#!/bin/bash

INPUT_XML="test_results.xml"
OUTPUT_XML="fixed_test_results.xml"

# 提取每个testcase对应的文件名
for testcase in $(xmlstarlet sel -t -v "//testcase/@name" "$INPUT_XML"); do
    # 从当前testcase的system-out中提取文件名
    filename=$(xmlstarlet sel -t -v "//testcase[@name='$testcase']/system-out" "$INPUT_XML" | grep -oP 'file\s*:\s*\K[^\\n]+')
    # 给该testcase添加file属性
    xmlstarlet ed -P -S -L -i "//testcase[@name='$testcase']" -t attr -n "file" -v "$filename" "$INPUT_XML"
    # 可选:删除system-out中的文件名和行号信息
    xmlstarlet ed -P -S -L -u "//testcase[@name='$testcase']/system-out" -v "$(xmlstarlet sel -t -v "//testcase[@name='$testcase']/system-out" "$INPUT_XML" | sed '/file\s*:/d;/line\s*:/d')" "$INPUT_XML"
done

# 重命名处理后的文件
mv "$INPUT_XML" "$OUTPUT_XML"
  1. 给脚本添加执行权限并运行:
chmod +x fix_junit_file_attr.sh
./fix_junit_file_attr.sh

简化版(单测试用例场景)

如果你的测试结果只有一个testcase,也可以用更轻量的sed命令处理:

#!/bin/bash
raw_content=$(cat test_results.xml)
# 提取文件名
target_file=$(echo "$raw_content" | grep -oP 'file\s*:\s*\K[^\\n]+')
# 插入file属性并清理system-out的冗余内容
echo "$raw_content" | sed "s/<testcase/<testcase file=\"$target_file\"/" | sed '/file   :.*//; /line   :.*//' > fixed_test_results.xml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:55:29