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

使用正则表达式解析单元测试输出日志,仅提取失败用例详情

提取单元测试失败用例的正则解决方案

我来帮你快速搞定从单元测试日志里提取错误用例的需求!针对你给出的日志格式,我们可以用正则表达式精准捕获所有从[ RUN ]开始到对应[ FAILED ]结束的完整失败用例块。

核心正则表达式

首先,这个正则能帮你匹配到所有失败用例的完整上下文:

\[ RUN \] .*?\[ FAILED \] .*?

正则解释

  • \[ RUN \]:匹配日志里的测试启动标记,方括号是正则的特殊字符,所以要加反斜杠转义
  • .*?:非贪婪模式的任意字符匹配,确保不会把多个失败用例合并成一个匹配结果;需要开启「匹配换行符」的模式(比如Python的re.DOTALL),否则只会匹配单行内容
  • \[ FAILED \] .*?:匹配测试失败的结束标记和对应的测试名称,同样转义方括号

实际使用示例

用Python实现

如果你用Python处理日志文本,可以这样写代码:

import re

# 你的测试日志内容
test_log = """[ RUN ] testname 1
Success log
[ OK ] testname 1
[ RUN ] testname 2
Failure details 1
Failure details 1
[ FAILED ] testname 2
[ RUN ] testname 3
Success log
[ OK ] testname 3
[ RUN ] testname 4
Failure details 2
Failure details 2
[ FAILED ] testname 4
[ RUN ] testname
Success log
[ OK ] testname"""

# 开启DOTALL模式,让.匹配换行符
failed_cases = re.findall(r'\[ RUN \] .*?\[ FAILED \] .*?', test_log, re.DOTALL)

# 打印每个失败用例
for idx, case in enumerate(failed_cases, 1):
    print(f"=== 失败用例 {idx} ===")
    print(case.strip())

运行后输出的结果就是你想要的:

=== 失败用例 1 ===
[ RUN ] testname 2
Failure details 1
Failure details 1
[ FAILED ] testname 2
=== 失败用例 2 ===
[ RUN ] testname 4
Failure details 2
Failure details 2
[ FAILED ] testname 4

用命令行工具(Linux/macOS)

如果直接在终端处理日志文件,用grep组合命令也能快速提取:

# 假设日志文件是test.log
grep -A 100 "\[ RUN \]" test.log | grep -B 100 "\[ FAILED \]"
  • -A 100:匹配到[ RUN ]后,显示后面100行(可以根据日志长度调整数字)
  • -B 100:匹配到[ FAILED ]后,显示前面100行,这样就精准截取了从启动到失败的完整块

注意事项

  • 一定要开启「匹配换行符」的模式:Python里是re.DOTALL,Perl风格正则(比如grep -P)是用(?s)前缀
  • 非贪婪匹配.*?是关键,避免把多个不相关的测试用例合并成一个匹配结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:10:10