【问题标题】:Poetry and Pytest-cov with Sonar: how to reconcile the references?Poetry and Pytest-cov with Sonar:如何协调引用?
【发布时间】:2019-07-23 07:19:13
【问题描述】:

我正在将我的所有模块迁移到 Poetry,但我遇到了问题。

在使用python setup.py test 之前,我能够使用正确的覆盖率信息运行我的测试。

现在我要转向诗歌,所以我最好的选择是poetry run pytestpoetry install; pytest。在这两种情况下,我都必须在 Sonar 中指定源位置来收集覆盖数据。在这里我自然会通过我的src 文件夹,但显然引用将是错误的,因为 pytest 正在使用诗歌安装在环境中的代码运行,而不是像以前那样在本地代码上运行,所以引用将是不匹配。任何修修补补似乎都不起作用。

那么,当使用 pytest 运行时,诗歌是否有办法使用本地引用而不是环境引用?还是我应该放弃并使用inspect 的一些奇怪技巧来检索site-packages 文件夹中已安装包的路径?

【问题讨论】:

  • poetry(至少是最近的 0.12.1 版本)应该以可编辑模式安装您的项目,将 egg-link 放置在指向您的 site-packages 目录的 site-packages 中。 pytest --cov=mypkg 将因此收集src/mypkg 的覆盖率。检查您的诗歌版本将是第一步。
  • 嗯,好的,我会检查的。我读到了这种可编辑模式,但我不确定它是否有用。谢谢
  • 现在我已经写下了我的答案,我看到 hoefling 已经在他的评论中完全解决了这个问题。哦,好吧,至少我添加了一些关于为什么链接到源文件不是最佳的文本。

标签: python sonarqube pytest python-poetry


【解决方案1】:

您当前的设置是针对已安装的包而不是源文件运行pytest,这是非常可取的,因为它模拟了代码在使用中的行为。路径错误、未正确标记/移动以进行安装的文件,或任何其他在部署过程中可能出错的事情都将立即免费遇到。

它还有助于提供更准确的覆盖范围,例如任何不属于包的构建文件都将被忽略。为了告诉coverage 查看包而不是源文件,您只需要准确地告诉它。在您的 .coveragerc 中包含此内容就足够了:

[run]
source = sample_project

给定这样的项目结构[1]

.
├── .coveragerc
├── src
│   └── sample_project
│       ├── __init__.py
│       └── util.py
└── tests
    ├── __init__.py
    └── test_util.py

运行pytest --cov tests/ 可以正确查看已安装包的内部:

Test session starts (platform: linux, Python 3.7.2, pytest 3.10.1, pytest-sugar 0.9.2)
rootdir: /home/user/dev/sample_project, inifile:
plugins: sugar-0.9.2, cov-2.7.1
collecting ... 
 tests/test_util.py ✓                                                  100% ██████████

----------- coverage: platform linux, python 3.7.2-final-0 -----------
Name                 Stmts   Miss  Cover
----------------------------------------
tests/__init__.py        0      0   100%
tests/test_util.py       6      0   100%
----------------------------------------
TOTAL                    6      0   100%


Results (0.10s):
       1 passed

[1] 将源代码拆分到目录中以避免名称隐藏可能很重要(导入机制将更喜欢其 PYTHONPATH 中的本地包 foo ,工作目录始终是其中的一部分在已安装的软件包 foo 上)。根据您的描述,您似乎已经在这样做了。如果不是,请考虑重新设置您的项目,启用新的诗歌并启用其可选的 --src 标志。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 2018-02-09
    相关资源
    最近更新 更多