qodo-cover
Qodo-Cover 是一款基于生成式人工智能的开源工具,旨在自动化生成单元测试并提升代码覆盖率。它通过智能分析现有代码库,自动构建测试用例,帮助开发者快速填补测试空白,从而确保软件质量与可靠性。
该工具主要解决了人工编写单元测试耗时费力、难以全面覆盖代码逻辑的痛点。在传统开发流程中,维持高覆盖率往往需要大量重复劳动,而 Qodo-Cover 能够自动识别待测文件、收集上下文信息,并持续生成符合要求的测试脚本,显著简化了测试流程。
Qodo-Cover 非常适合软件开发者、测试工程师以及希望探索自动化测试新技术的研究人员使用。它既支持作为命令行工具在本地运行,也能集成到 GitHub CI 工作流中,灵活适配各种开发环境。
其核心技术亮点在于模块化的智能架构:包含测试执行器、覆盖率解析器、提示词构建器和 AI 调用器。这一机制确保了生成的测试不仅语法正确,还能切实提升覆盖率指标。值得注意的是,该项目目前处于非维护状态,但其开源代码仍为社区提供了宝贵的参考实现,适合有能力的团队进行二次开发或定制使用。
使用场景
某电商初创团队的后端工程师小李,正面临核心订单模块代码覆盖率长期低于 60% 的困境,且临近上线截止日期,急需补充大量单元测试以确保系统稳定性。
没有 qodo-cover 时
- 人工编写效率低下:面对数千行遗留代码,手动逐行分析逻辑并编写测试用例耗时数天,严重挤占功能开发时间。
- 边界场景覆盖不全:人工思维容易忽略极端输入或异常分支,导致测试盲区,线上仍偶发难以复现的 Bug。
- 维护成本高昂:每当业务逻辑微调,需人工同步修改大量测试断言,容易出现测试代码与业务代码不同步的情况。
- 覆盖率提升瓶颈:传统手段难以快速定位未覆盖的代码行,只能凭经验盲目补充测试,覆盖率增长缓慢且停滞不前。
使用 qodo-cover 后
- 自动化批量生成:qodo-cover 自动扫描订单模块,基于现有代码逻辑瞬间生成数百个高质量的单元测试用例,将原本几天的工作量缩短至小时级。
- 智能补全盲区:工具利用大模型深度分析控制流,自动识别并生成了针对空指针、超时等边缘情况的测试,显著提升了代码鲁棒性。
- 动态同步更新:当订单状态机逻辑变更时,qodo-cover 能感知差异并自动调整相关测试用例,确保持续集成流水线中的测试始终有效。
- 精准提升覆盖率:通过内置的覆盖率解析器,qodo-cover 定向生成缺失部分的测试,帮助团队在短时间内将核心模块覆盖率从 58% 提升至 92%。
qodo-cover 通过将繁琐的单元测试编写转化为自动化流程,让开发团队在保障代码质量的同时,得以专注于核心业务价值的交付。
运行环境要求
- Linux
- macOS
- Windows
未说明
未说明

快速开始
Qodo Cover 的目标是通过自动生成高质量的测试用例来扩展代码覆盖率,从而高效提升代码覆盖率。Qodo Cover 可以在你的 GitHub CI 工作流中运行,也可以作为 CLI 工具在本地使用。
目录
新闻与更新
2025-06-15
⚠️ 此仓库已不再维护。如果您希望继续开发或在自己的项目中使用,请将其 fork。
2024-12-04:
新增模式 - 在你的 GitHub CI 工作流中运行 Qodo Cover Pro。目前处于预览阶段,限时免费提供给 Python 项目使用,支持你从心仪的 LLM 提供商处获取并使用自己的 LLM API 密钥。这是一种切实可行的方式,可以提升代码质量和可靠性。更多详情请联系 Qodo 团队。
2024-11-05:
新增模式 - 扫描整个代码库,自动识别测试文件,自动收集每个测试文件的上下文,并通过新增测试用例扩展测试套件。 更多详情请参见 这里。
Qodo-Cover
欢迎来到 Qodo-Cover。该项目专注于利用生成式 AI 自动化并优化测试用例的生成(目前主要为单元测试),旨在简化开发流程。Qodo-Cover 可通过终端运行,并计划集成到主流的 CI 平台中。
我们诚邀社区共同协作,帮助扩展 Qodo Cover 的功能,持续将其打造为自动化单元测试生成领域的前沿解决方案。同时,我们也希望激励研究人员利用这一开源工具探索新的测试生成技术。
概述
该工具是更广泛的软件自动化单元测试生成工具集的一部分。它利用先进的生成式 AI 模型,旨在简化和加速测试过程,确保高质量的软件开发。系统由多个组件组成:
- 测试运行器: 执行命令或脚本以运行测试套件并生成代码覆盖率报告。
- 覆盖率解析器: 验证随着测试用例的增加,代码覆盖率是否提升,确保新测试确实提高了整体测试效果。
- 提示构建器: 从代码库中收集必要数据,并构建传递给大型语言模型(LLM)的提示。
- AI 调用器: 与 LLM 交互,根据提供的提示生成测试用例。
安装与使用
需求
在开始之前,请确保您已具备以下条件:
- 在环境变量中设置
OPENAI_API_KEY,这是调用 OpenAI API 所必需的。 - 代码覆盖率工具:工具正常运行需要 Cobertura XML 格式的代码覆盖率报告。
- 例如,在 Python 中可以使用
pytest-cov。运行 Pytest 时添加--cov-report=xml选项即可。 - 注意:我们正在积极支持更多类型的覆盖率格式,但欢迎您提交 PR 并参与
cover_agent/CoverageProcessor.py的开发。
- 例如,在 Python 中可以使用
如果直接从仓库运行,您还需要:
- 系统上已安装 Python。
- 安装 Poetry 来管理 Python 包依赖。Poetry 的安装说明可在 https://python-poetry.org/docs/ 查阅。
独立运行
Qodo Cover 可以作为 Python Pip 包安装,也可以作为独立可执行文件运行。
Python Pip
要直接通过 GitHub 安装 Python Pip 包,请运行以下命令:
pip install git+https://github.com/qodo-ai/qodo-cover.git
二进制文件
二进制文件无需在您的系统上安装任何 Python 环境即可运行(例如,在不包含 Python 的 Docker 容器中)。您可以前往项目的 发布页面 下载适用于您系统的版本。
代码库设置
运行以下命令以安装所有依赖项并从源码运行项目:
poetry install
运行代码
下载可执行文件或安装 Pip 包后,您可以运行 Cover Agent 来生成和验证单元测试。通过以下命令在命令行中执行:
cover-agent \
--source-file-path "<源文件路径>" \
--test-file-path "<测试文件路径>" \
--project-root "<项目根目录>" \
--code-coverage-report-path "<覆盖率报告路径>" \
--test-command "<要运行的测试命令>" \
--test-command-dir "<运行测试命令的目录>" \
--coverage-type "<覆盖率报告类型>" \
--desired-coverage <期望的覆盖率,范围为0到100> \
--max-iterations <LLM的最大迭代次数> \
--included-files "<可选的要包含的文件列表>"
您可以使用下面的示例代码来试用 Cover Agent。 (请注意,usage_examples 文件提供了更详细的 Cover Agent 使用示例)
Python
按照 templated_tests/python_fastapi/ 目录下的 README.md 文件中的步骤设置环境,然后返回到仓库根目录,运行以下命令为 python fastapi 示例添加测试:
cover-agent \
--source-file-path "templated_tests/python_fastapi/app.py" \
--test-file-path "templated_tests/python_fastapi/test_app.py" \
--project-root "templated_tests/python_fastapi" \
--code-coverage-report-path "templated_tests/python_fastapi/coverage.xml" \
--test-command "pytest --cov=. --cov-report=xml --cov-report=term" \
--test-command-dir "templated_tests/python_fastapi" \
--coverage-type "cobertura" \
--desired-coverage 70 \
--max-iterations 10
Go
对于使用 go 的示例,进入 templated_tests/go_webservice 目录,按照 README.md 设置项目。
为了使用覆盖率报告功能,您需要安装 gocov 和 gocov-xml。运行以下命令安装这些工具:
go install github.com/axw/gocov/gocov@v1.1.0
go install github.com/AlekSi/gocov-xml@v1.1.0
然后运行以下命令:
cover-agent \
--source-file-path "app.go" \
--test-file-path "app_test.go" \
--code-coverage-report-path "coverage.xml" \
--test-command "go test -coverprofile=coverage.out && gocov convert coverage.out | gocov-xml > coverage.xml" \
--test-command-dir $(pwd) \
--coverage-type "cobertura" \
--desired-coverage 70 \
--max-iterations 1
Java
对于使用 java 的示例,进入 templated_tests/java_gradle 目录,按照 README.md 设置项目。
为了使用 jacoco 覆盖率报告功能,请遵循 README.md 中的“要求”部分:
然后运行以下命令:
cover-agent \
--source-file-path="src/main/java/com/davidparry/cover/SimpleMathOperations.java" \
--test-file-path="src/test/groovy/com/davidparry/cover/SimpleMathOperationsSpec.groovy" \
--code-coverage-report-path="build/reports/jacoco/test/jacocoTestReport.csv" \
--test-command="./gradlew clean test jacocoTestReport" \
--test-command-dir=$(pwd) \
--coverage-type="jacoco" \
--desired-coverage=70 \
--max-iterations=1
录制与回放功能
为了节省 LLM 服务费用,提供响应录制模式。起点是一个组哈希值,由每次测试运行中使用的源文件和测试文件的哈希值生成。如果任一文件发生变化,相应的 LLM 响应都应重新录制。 运行以下命令以启用 LLM 响应录制模式执行所有测试:
poetry run python tests_integration/run_test_all.py --record-mode
如果您不带 --record-mode 标志运行相同命令:
poetry run python tests_integration/run_test_all.py
它将使用已录制的响应生成测试,而无需调用 LLM;如果未录制,则会调用 LLM 来运行测试。
您也可以从单独的测试运行中录制 LLM 响应。像平常一样运行测试,并在命令中添加 --record-mode 标志:
poetry run python tests_integration/run_test_with_docker.py \
--docker-image "embeddeddevops/python_fastapi:latest" \
--source-file-path "app.py" \
--test-file-path "test_app.py" \
--code-coverage-report-path "coverage.xml" \
--test-command "pytest --cov=. --cov-report=xml --cov-report=term" \
--coverage-type "cobertura" \
--model "gpt-4o-mini" \
--record-mode
下表说明了测试运行程序的行为,取决于是否设置了 --record-mode 标志以及是否已存在录制文件:
| 标志 | 录制文件 | 结果 |
|---|---|---|
| ❌ | ❌ | 普通测试运行(未录制文件) |
| ✅ | ❌ | 录制新文件 |
| ✅ | ✅ | 覆盖现有文件 |
| ❌ | ✅ | 回放已录制文件 |
录制的响应存储在 stored_responses 文件夹中。文件名基于测试名称以及一个依赖于源文件和测试文件内容的哈希值。
<测试名称>_responses_<哈希值>.yml
# 例如:
python_fastapi_responses_a9d9de927a82a7d776889738d2880bec7166c5f69d3518837183a20ef48b2a37.yml
与同一源文件和测试文件组哈希值对应的响应文件会在每次录制会话中更新,添加新的提示哈希条目。 要从头重新生成该文件,您可以删除现有的响应文件并开始新的录制会话。
输出
一些调试文件将在仓库本地输出(这些文件包含在 .gitignore 中):
run.log:记录器的副本,会转储到您的stdout;test_results.html:结果表格,包含每个生成测试的以下信息:- 测试状态
- 失败原因(如适用)
- 退出代码
stderrstdout- 生成的测试
您可以使用 --suppress-log-files 标志来抑制日志输出。这将阻止创建 run.log、test_results.html 以及测试结果的 db 文件。
额外的日志记录
如果您设置环境变量 WANDB_API_KEY,提示、响应以及其他附加信息将会被记录到 Weights and Biases 上。
使用其他大模型
本项目使用 LiteLLM 与 OpenAI 及其他托管的大模型进行通信(目前已支持 100 多种大模型)。要使用除 OpenAI 默认模型之外的其他模型,您需要:
- 导出受支持大模型所需的任何环境变量 按照 LiteLLM 的说明。
- 在调用 Cover Agent 时,使用
--model选项指定模型名称。
例如(如 LiteLLM 快速入门指南 所示):
export VERTEX_PROJECT="hardy-project"
export VERTEX_LOCATION="us-west"
cover-agent \
...
--model "vertex_ai/gemini-pro"
OpenAI 兼容端点
export OPENAI_API_KEY="<您的 API 密钥>" # 如果 <您的 API 基础地址> 需要 API 密钥,请设置此值。
cover-agent \
...
--model "openai/<您的模型名称>" \
--api-base "<您的 API 基础地址>"
Azure OpenAI 兼容端点
export AZURE_API_BASE="<您的 API 基础地址>" # Azure API 基础地址
export AZURE_API_VERSION="<您的 API 版本>" # Azure API 版本(可选)
export AZURE_API_KEY="<您的 API 密钥>" # Azure API 密钥
cover-agent \
...
--model "azure/<您的部署名称>"
贡献
有关如何为本项目做出贡献的更多信息,请参阅 Contributing。
文档
路线图
以下是计划功能的路线图及当前实现状态:
- 自动为您的软件项目生成单元测试,利用先进的人工智能模型确保全面的测试覆盖和质量保证。(类似于 Meta)
- 能够为不同编程语言生成测试
- 能够应对各种复杂的测试场景
- 对被测代码进行行为分析,并据此生成测试
- 检查测试的不稳定性,例如按照 TestGen-LLM 的建议运行 5 次
- 解决更多测试生成方面的痛点
- 生成专注于 PR 变更集的新测试
- 遍历整个代码库并尝试增强所有现有的测试套件
- 提升易用性
- 与 GitHub Actions、Jenkins、CircleCI、Travis CI 等集成
- 集成数据库、API、OpenTelemetry 等数据源,以提取用于测试生成的相关输入输出
- 添加配置文件
QodoAI
QodoAI 的使命是帮助繁忙的开发团队提升并持续维护代码质量。 我们提供多种工具,包括开源工具的“Pro”版本,这些版本专为企业级代码复杂度设计,并能感知多仓库代码库。
版本历史
0.3.102025/05/210.3.92025/05/150.3.82025/05/120.3.72025/02/260.3.62025/02/260.3.52025/02/250.3.42025/02/210.3.32025/02/210.3.22025/02/210.3.12025/02/200.3.02025/02/200.2.222025/02/200.2.212025/02/060.2.202025/02/030.2.172025/01/140.2.162025/01/120.2.152025/01/070.2.142025/01/070.2.132025/01/070.2.122025/01/03常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
Deep-Live-Cam
Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

