如何让coverage仅列出未被调用的函数?兼容pytest更佳
如何让coverage工具仅列出未被调用的函数(用于清理死代码)
要实现仅输出从未被调用的函数,可通过coverage的结构化数据导出功能配合简单脚本实现,同时兼容pytest,具体步骤如下:
1. 收集代码覆盖数据
直接运行目标代码
coverage run test.py
兼容pytest的方式
用coverage包裹pytest执行,自动收集测试过程中的代码覆盖数据:
coverage run -m pytest your_test_suite.py
2. 导出结构化覆盖数据
使用coverage json命令将覆盖统计结果导出为JSON格式,便于后续解析:
coverage json
执行后会生成coverage.json文件,包含所有函数的执行状态信息。
3. 编写脚本过滤未被调用的函数
创建一个简单的Python脚本(比如find_dead_functions.py),解析JSON文件并提取未执行的函数:
import json with open('coverage.json', 'r') as f: coverage_data = json.load(f) for file_path, file_info in coverage_data['files'].items(): # 遍历文件中的所有函数 for func_details in file_info['functions']: # 判断函数是否从未被执行 if func_details['executed'] == 0: # 提取文件名(不含后缀)和函数名 file_name = file_path.split('.')[0] func_name = func_details['name'].split('.')[-1] print(f"{file_name}.{func_name} - not called")
运行脚本即可得到目标输出:
python find_dead_functions.py
输出示例:
test.c - not called
可选:快速命令行过滤(适合临时需求)
若不想编写脚本,可使用coverage report结合命令行工具过滤,但准确性略低(可能包含未执行的代码行而非仅函数):
coverage report --show-missing --include="test.py" | grep -E "^\s+0\s+"
内容的提问来源于stack exchange,提问作者JL Peyret
相关产品推荐
相关产品推荐

