写点什么

CodeiumAI 单元测试生成和覆盖率统计实践

作者:lklmyy
  • 2023-11-30
    浙江
  • 本文字数:3878 字

    阅读完需:约 13 分钟

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 特性

  1. 单元测试:有效地分析代码上下文,提供有效的代码分析以及有意义的单元测试。

  2. 代码智能提示:Codeium 能够实时智能提示代码,代码提示完全基于人工智能自动完成,生成速度快,延时较低,帮助程序员更快地编写代码。

  3. 代码自动完成:Codeium 能够自动完成代码,减少程序员的敲击次数,提高编码效率。

  4. 代码重构:Codeium 可以自动重构代码,帮助程序员更好地管理和维护代码。

  5. 代码调试:Codeium 内置了调试器,能够帮助程序员快速发现和解决代码中的问题。

  6. 版本控制:Codeium 支持多种版本控制系统,包括 Git、SVN 等,方便程序员管理和维护代码。

  7. 团队协作:Codeium 支持多人协作开发,能够提高团队的工作效率。

  8. 代码分析:Codeium 能够对代码进行分析,帮助程序员发现和解决代码中的潜在问题。

  9. 智能搜索:Codeium 可以对程序员的搜索关键词进行智能分析和推荐,帮助程序员更快地找到他们需要的信息。目前只支持 VS 英文

  10. 人工智能聊天:Codeium 拥有人工智能聊天的功能,可以回答程序员的问题和提供技术支持,帮助他们更好地应对编程和计算机科学方面的挑战。目前只支持 VS 英文

  11. 安全隐私和合规性: CodiumAI 仅分析必要的代码,为其提供足够的上下文来生成有意义的测试,并且数据经过 SSL 加密。 此外,codium 正在进行 SOC2 认证过程。 我们根据我们的隐私声明遵循负责任的做法。

1.2 Github Copilot VS Codeium

如下是参考知乎文章《Github Copilot VS Codeium——哪款AI编程辅助工具更适合你》进行的对比分析

2、单元测试覆盖率统计

2.2 coverage 简介

coverage.py 是一个用于测量 Python 代码覆盖率的工具,它可以帮助开发者分析哪些代码被测试覆盖,哪些代码没有被测试覆盖。coverage.py 的主要特点包括:

  1. 支持多种覆盖率分析:coverage.py 支持对 Python 代码中的语句、分支、函数和行进行覆盖率分析,可以帮助开发者快速发现测试用例中的漏洞和代码中的缺陷。

  2. 多种输出格式:coverage.py 支持多种输出格式,包括命令行输出、HTML 报告、XML 报告等,方便开发者查看和分析测试覆盖率。

  3. 灵活配置:coverage.py 支持多种配置选项,例如忽略特定文件或目录、设置覆盖率阈值等,可以根据不同的需求进行灵活配置。

  4. 兼容性好: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 的主要特点包括:

  1. 使用简单:pytest-cov 可以通过安装 pytest 和 coverage.py 后直接安装使用,无需额外配置。

  2. 覆盖率统计:pytest-cov 可以统计 Python 代码的语句、分支、函数和行的覆盖率,并生成相应的覆盖率报告。

  3. 多种输出格式:pytest-cov 支持多种输出格式,包括命令行输出、HTML 报告、XML 报告等。

  4. 灵活配置: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%。

pytest --cov   -vs .\test\test_env_conf.py -m ci                                        ...test/test_env_conf.py::test_set_env_vars_with_valid_arguments PASSEDtest/test_env_conf.py::test_instantiate_with_default_arguments PASSED...---------- coverage: platform win32, python 3.8.13-final-0 -----------Name                                    Stmts   Miss  Cover-----------------------------------------------------------cepservice\__init__.py                      0      0   100%cepservice\apps.py                          3      3     0%cepservice\common\__init__.py               1      0   100%cepservice\common\cepssh.py                37     37     0%cepservice\common\client.py               266    266     0%cepservice\common\envvars.py               55      2    96%cepservice\common\fake-agent.py           104    104     0%cepservice\common\namespace.py             22     22     0%test\test_env_conf.py                      52      0   100%-----------------------------------------------------------TOTAL                                    1559   1452     7%
============================================================================ 2 passed, 2 warnings in 0.37s =============================================================================
复制代码

3.2 生成测试报告

coverage 相关参数查看,使用 pytest -h

> pytest -hcoverage reporting with distributed testing support:  --cov=[SOURCE]        Path or package name to measure during execution (multi-allowed). Use --cov= to not do any                        source filtering and record everything.  --cov-report=TYPE     Type of report to generate: term, term-missing, annotate, html, xml (multi-allowed). term, term-                        missing may be followed by ":skip-covered". annotate, html and xml may be followed by ":DEST"                        where DEST specifies the output location. Use --cov-report= to not generate any output.  --cov-config=PATH     Config file for coverage. Default: .coveragerc  --no-cov-on-fail      Do not report coverage if test run fails. Default: False  --no-cov              Disable coverage report completely (useful for debuggers). Default: False  --cov-fail-under=MIN  Fail if the total coverage is less than MIN.  --cov-append          Do not delete coverage but append to current. Default: False  --cov-branch          Enable branch coverage.  --cov-context=CONTEXT                        Dynamic contexts to use. "test" for now.
复制代码

生成 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/


发布于: 刚刚阅读数: 4
用户头像

lklmyy

关注

脚踏实地,仰望星空 2020-06-22 加入

还未添加个人简介

评论

发布
暂无评论
CodeiumAI单元测试生成和覆盖率统计实践_单元测试_lklmyy_InfoQ写作社区