CodeiumAI 单元测试生成和覆盖率统计实践
系统单元测试的生成和覆盖率统计是保证项目质量的重要方法。可以使用测试框架(如 unittest、pytest 等)来管理测试用例,并记录测试结果和覆盖率信息。生成覆盖率报告可以帮助开发人员分析代码的测试覆盖率情况,找出未被覆盖的代码行、函数或分支,并进一步完善测试用例。同时,覆盖率报告也可以作为评估项目测试质量的重要依据。对于覆盖率报告的统计方法,一般包括代码行覆盖率、函数覆盖率、分支覆盖率等指标的统计和分析。可以使用各种工具来帮助生成和分析覆盖率报告,如 coverage、pytest-cov 等。
1、CodiumAI 简介
CodiumAI 正在利用 AI 创建一个新的代码完整性范式。愿景是让开发人员能够以零错误的方式快速构建。CodiumAI 的第一个工具是一个 IDE 插件,与开发人员互动,为忙碌的开发人员生成有意义的测试和代码解释。
Codeium 是一种类似于 Github Copilot 的 AI 智能编程助手,可以提供超过 40 种编程语言的代码自动完成工具。它支持几乎所有主流的编程语言和 IDE,并且个人用户可以免费使用。CodiumAI 正在利用 AI 创建一个新的代码完整性范式。愿景是让开发人员能够以零错误的方式快速构建。CodiumAI 的第一个工具是一个 IDE 插件,与开发人员互动,为忙碌的开发人员生成有意义的测试和代码解释。
1.1 CodiumAI 特性
单元测试:有效地分析代码上下文,提供有效的代码分析以及有意义的单元测试。
代码智能提示:Codeium 能够实时智能提示代码,代码提示完全基于人工智能自动完成,生成速度快,延时较低,帮助程序员更快地编写代码。
代码自动完成:Codeium 能够自动完成代码,减少程序员的敲击次数,提高编码效率。
代码重构:Codeium 可以自动重构代码,帮助程序员更好地管理和维护代码。
代码调试:Codeium 内置了调试器,能够帮助程序员快速发现和解决代码中的问题。
版本控制:Codeium 支持多种版本控制系统,包括 Git、SVN 等,方便程序员管理和维护代码。
团队协作:Codeium 支持多人协作开发,能够提高团队的工作效率。
代码分析:Codeium 能够对代码进行分析,帮助程序员发现和解决代码中的潜在问题。
智能搜索:Codeium 可以对程序员的搜索关键词进行智能分析和推荐,帮助程序员更快地找到他们需要的信息。目前只支持 VS 英文
人工智能聊天:Codeium 拥有人工智能聊天的功能,可以回答程序员的问题和提供技术支持,帮助他们更好地应对编程和计算机科学方面的挑战。目前只支持 VS 英文
安全隐私和合规性: CodiumAI 仅分析必要的代码,为其提供足够的上下文来生成有意义的测试,并且数据经过 SSL 加密。 此外,codium 正在进行 SOC2 认证过程。 我们根据我们的隐私声明遵循负责任的做法。
1.2 Github Copilot VS Codeium
如下是参考知乎文章《Github Copilot VS Codeium——哪款AI编程辅助工具更适合你》进行的对比分析
2、单元测试覆盖率统计
2.2 coverage 简介
coverage.py 是一个用于测量 Python 代码覆盖率的工具,它可以帮助开发者分析哪些代码被测试覆盖,哪些代码没有被测试覆盖。coverage.py 的主要特点包括:
支持多种覆盖率分析:coverage.py 支持对 Python 代码中的语句、分支、函数和行进行覆盖率分析,可以帮助开发者快速发现测试用例中的漏洞和代码中的缺陷。
多种输出格式:coverage.py 支持多种输出格式,包括命令行输出、HTML 报告、XML 报告等,方便开发者查看和分析测试覆盖率。
灵活配置:coverage.py 支持多种配置选项,例如忽略特定文件或目录、设置覆盖率阈值等,可以根据不同的需求进行灵活配置。
兼容性好:coverage.py 可以与多种 Python 单元测试框架集成使用,包括 unittest、pytest、nose 等。
使用 coverage.py 可以帮助开发者快速测试 Python 代码的覆盖率,并快速发现代码中的漏洞和缺陷。同时,coverage.py 也可以与其他 Python 单元测试工具结合使用,例如 pytest-cov、nose-cov 等,以进一步提高测试效率和质量。
2.3 pytest-cov 简介
pytest-cov 是一个 pytest 插件,用于测试 Python 代码的覆盖率,并生成覆盖率报告。它可以对 Python 代码中的语句、分支、函数和行进行覆盖率分析。pytest-cov 的主要特点包括:
使用简单:pytest-cov 可以通过安装 pytest 和 coverage.py 后直接安装使用,无需额外配置。
覆盖率统计:pytest-cov 可以统计 Python 代码的语句、分支、函数和行的覆盖率,并生成相应的覆盖率报告。
多种输出格式:pytest-cov 支持多种输出格式,包括命令行输出、HTML 报告、XML 报告等。
灵活配置:pytest-cov 支持多种配置选项,例如忽略特定文件或目录、设置覆盖率阈值等。
使用 pytest-cov 可以帮助开发者快速测试 Python 代码的覆盖率,并快速发现代码中的漏洞和缺陷。同时,pytest-cov 也可以与其他 pytest 插件结合使用,例如 pytest-xdist、pytest-mock 等,以进一步提高测试效率和质量。
3、AIGC 单测用例
这里选择envvars.py
模块,我们尝试使用 AI 插件生成单元测试用例和代码注释。首先我们自定义测试框架,python 主流的测试框架,例如 pytest、unittest 等,然后自定义生产单元测试用例的数量,最后直接将生成用例导入到项目 test 目录test_env_vars.py
里面。
3.1 执行自动化测试用例
运行用例的时候加上 --cov 参数
pytest --cov -vs .\test\test_env_conf.py -m ci
如下是利用 codiumai 针对cepservice\common\envvars.py
模块生成单元测试用例运行结果和覆盖率统计结果,从报告可以看出该模块的代码测试覆盖率是 96%,在整个项目占比 7%。
3.2 生成测试报告
coverage 相关参数查看,使用 pytest -h
生成 html 的报告
pytest --cov --cov-report=html
执行完成,在项目根目录会生成 htmlcov 目录。浏览器打开 index.html 文件查看代码覆盖率
3.3 用户自定义规则
如果我们需要统计特定模块单测覆盖率,可以通过自定义单测统计规则方式实现。首先在项目根目录创建文件.coveragerc
,该文件通常包含一些配置选项,例如要覆盖哪些文件或目录、哪些文件应该被忽略、覆盖率报告应如何呈现等。然后在运行测试时,可以使用.coveragerc 文件来指定这些配置选项。
pytest --cov=src
4、参考
https://note.qidong.name/2018/04/pytest-plugins/
https://blogs.sap.com/2022/02/16/how-to-write-independent-unit-test-with-pytest-and-mock-techniques/
https://towardsdatascience.com/pytest-with-marking-mocking-and-fixtures-in-10-minutes-678d7ccd2f70
https://stackoverflow.com/questions/26082128/improperlyconfigured-you-must-either-define-the-environment-variable-django-set
https://codeium.com/playground
https://www.phpcms9.com/ai/aistudy
https://github.com/Codium-ai/codium-code-examples
https://www.codium.ai/blog/best-practices-for-writing-unit-tests/
版权声明: 本文为 InfoQ 作者【lklmyy】的原创文章。
原文链接:【http://xie.infoq.cn/article/259a7524e13f2d69d892e2ac0】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论