使用正则表达式解析单元测试输出日志,仅提取失败用例详情
提取单元测试失败用例的正则解决方案
我来帮你快速搞定从单元测试日志里提取错误用例的需求!针对你给出的日志格式,我们可以用正则表达式精准捕获所有从[ 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
相关产品推荐
相关产品推荐

