问题标签 [pytest-cov]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
148 浏览

python - 为什么只有在使用 pytest 进行单元测试时才找到模块?

我在运行单元测试时遇到问题。我有一个这样的项目结构:

鉴于此目录

test_wave_encoder.py看起来像这样:

如果我单独运行这个测试文件,没有问题。但是,如果我尝试从项目中的任何目录运行 pytest:

我得到一个ModuleNotFoundError: No module named 'wave_encoder'.

但是,如果我移动test_wave_encoder.py到父目录,它确实有效(还有其他错误,但这是一个不同的问题)。

我真的不想要父目录中的一堆测试文件。我该如何解决这个问题?

0 投票
0 回答
212 浏览

python - Coverage.py 仅在导入期间检测调用,而不是在测试执行期间检测调用

我无法coverage.py正确测量我的 Python 包的代码覆盖率。无论我尝试什么,我只能覆盖导入期间运行的代码,即package/__init__.py从那里调用的代码,以及在执行测试期间调用的所有代码的 0% 覆盖率。该软件包作为可编辑安装安装pip install -e .在 Docker 容器内。

如果我剥离项目以创建一个最小示例,问题就会消失,这表明它一定是由实际项目中的某些特定原因引起的,但不幸的是我无法共享实际代码(与工作相关)。

我已经没有尝试什么的想法(请参阅下面的尝试修复)。可能是什么问题呢?

一般项目结构

版本信息

  • Python:3.7.2 里面的一个 Docker 容器基于python:3.7-slim
  • pytest:6.0.1
  • pytest-cov:2.10.0
  • 覆盖范围:5.2.1

我尝试过的事情

  • 检查在我的测试中运行的代码的路径,inspect.getsourcefile(func)以确保使用正确的源文件,而不是在其他地方安装的副本
  • 通过pytest-cov插件或直接使用运行测试/覆盖命令coverage run --source package -m pytest tests/ && coverage report
  • 从不同的目录运行,例如/app//app/tests//
  • 环境PYTHONPATH="."
  • 按照 Pytest 文档中的建议将目录移动package到单独的src目录中
  • 删除导入conftest.py以避免在覆盖分析开始之前导入
  • 在测试中而不是在测试模块级别导入包代码
  • 降级coverage.py到早期版本
0 投票
0 回答
155 浏览

python-3.x - 来自 Boto3 的 list_stacks() 中带有 Moto 的 Pytest-cov

我正在尝试使用 pytest 和 moto 创建一个测试,检查StackStatus字典中的是否从函数返回list_stacks()https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/cloudformation.html# CloudFormation.Client.list_stacks)是DELETE_COMPLETE.

我为客户端连接创建了一个 pytest.fixture:

我创建了一个虚拟模板:

在我的测试函数中,我创建了堆栈,在我删除之后:

睾丸的功能是这个:

我面临一个问题:

它抱怨我的模板没有 BucketName:

但是当我添加一个时,它会给出另一个错误:

0 投票
2 回答
2021 浏览

python - 在 pytest 覆盖率报告中,“->”对于缺失的行意味着什么?

我正在使用覆盖插件(pytest --cov)运行 pytest,在报告中我得到以下行:

我知道这3-5意味着它错过了第 3 到第 5 行,但我不知道是什么->意思。从测试逻辑来看,我希望只会5被报告。作为参考,这是我使用的代码:

0 投票
1 回答
453 浏览

django - 无法使用 pytest-cov 和 pytest 运行覆盖范围

面对覆盖运行 pytest 的问题,我已经浏览了 SO 帖子并且无法解决这个问题,我相信我在这里遗漏了一些东西..

在用户是我项目的应用程序的情况下出现以下错误

我的 pytest.ini 文件内容

[pytest] DJANGO_SETTINGS_MODULE = cloudstack.settings
python_files = tests.py test_*.py *_test.py
addopts = -v --ignore=venv --cov=。--cov报告=html

我也尝试将 DJANGO_SETTINGS_MODULE 添加为环境变量,然后我得到了不同的错误cloudstack module is not found

我在执行这些测试时处于激活的环境中。

编辑 我查看了堆栈溢出的每一篇文章,以修复运行 pytest 时出现的错误,这些错误都没有帮助我解决这个问题。

Django 升级到 1.9 错误“AppRegistryNotReady:应用程序尚未加载。”

pytest 'ImportError: No module named YadaYadaYada' 的 PATH 问题

配置不当:您必须在访问设置之前定义环境变量 DJANGO_SETTINGS_MODULE 或调用 settings.configure()

我按照 SO 帖子中的说明将所有内容对齐

$ type -a 覆盖范围是 /cygdrive/c/#Work#/Python/Django/Projects/cloudstacko/cvenv/bin/coverage

$ type -a pytest pytest 是 /cygdrive/c/#Work#/Python/Django/Projects/cloudstacko/cvenv/bin/pytest

$ type -a python python 是 /cygdrive/c/#Work#/Python/Django/Projects/cloudstacko/cvenv/bin/python

sys.path ['/cygdrive/c/#Work#/Python/Django/Projects/cloudstacko/cloudstacko', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr /lib/python3.6/lib-dynload', '/cygdrive/c/#Work#/Python/Django/Projects/cloudstacko/cvenv/lib/python3.6/site-packages']

0 投票
2 回答
825 浏览

gitlab-ci - 在 Gilab 上激活 python 代码的测试覆盖率

我正在尝试创建一个.gilab-ci.yml步骤来使用 pytest + pytest-cov 激活 gitlab 的测试覆盖率。

当前不成功的片段

我试过了:

在用于我的项目的其他包中,该requirements.txt文件包含 pytest 和 pytest-cov。

相关管道输出:

但我无法在我的 MR 中看到新功能。

有没有人有一个可行的解决方案来激活该选项?

参考页

https://docs.gitlab.com/ee/user/project/merge_requests/test_coverage_visualization.html

0 投票
1 回答
610 浏览

python - 运行 pytest 和 pytest-cov 时忽略特定文件(不是目录)

我的项目结构为:

我想运行覆盖src的测试,但想排除src/data_access.py

我想实现类似于: pytest tests --cov=src --exclude=src/data_access.pyexclude不是正确的论点。

0 投票
1 回答
824 浏览

python - 缺少测试覆盖率 pytest python 类

我正在使用 pytest --cov 测试我的代码,但我的一个模块的覆盖率为 0%。

该模块有一个类声明,如下所示:

该测试执行以下操作:

对此的测试覆盖率为 0% - 我在这里做错了什么?

0 投票
1 回答
556 浏览

github - Pytest 未在 GitHub 操作上找到测试

我正在尝试为我处理的 python 包生成代码覆盖率,并创建了一个 GitHub 操作来执行此操作,它使用codecov-action。工作流程如下所示:

当它运行时,它会输出一个错误,您可以在此处查看。Pytest 输出错误代码 5 - 表示未找到任何测试 - 但是当我在计算机上运行它时,它可以正常工作。为什么会这样?

0 投票
1 回答
3268 浏览

python - 如何使用 pytest-cov 生成覆盖率报告并打印到终端?

背景

我是使用 pytest 和 pytest-cov 的新手,已从 unittest + coverage.py 切换

我首先将我的自动化测试设置为以这种方式运行:

python3 -m pytest --cov=myapplication

这给了我这样的输出到终端:

然后我想生成一个 xml 报告,所以我更改了命令:

python3 -m pytest --cov-report xml:coverage.xml --cov=myapplication

问题

我遇到的问题是添加后--cov-report xml:coverage.xml我不再获得任何输出到终端

查看pytest-cov 的文档,我发现:

这三个报告选项输出到文件而不在终端上显示任何内容:[继续显示 xml、html 和注释报告选项]

问题

如何在同一测试运行中既生成报告又打印到终端?(这甚至可能吗?)

(我可以运行测试套件两次,但如果可以的话,我想一次做所有事情)


我正在使用这些版本:

  • 蟒蛇 3.8.5
  • pytest 6.2.2(撰写本文时的最新版本)
  • pytest-cov 2.11.1 (-"-)