【发布时间】:2021-09-11 03:53:22
【问题描述】:
我正在尝试使用 pytest 为 repo 建立一个单元测试框架,并且我在一个旧分支中工作。我克隆了新分支并将文件复制到新分支。调用 pytest 时,测试可以正常运行,但它们引用的是旧项目中的文件(即使它们是作为当前项目中的包导入的,而不是通过直接文件路径)。
这是用于运行 pytest 的行/命令:
(venv) C:\Program Files\Python-3.8.2\pycharm_projects\fnma-erm01-devl-edl-hao-repo_21.3>python -m pytest
为了解决这个问题,我在本地删除了旧分支,现在所有测试都无法运行,并且它无法将任何项目目录识别为有效模块。
堆栈跟踪:
========================================================================================================================================================================= test session starts =========================================================================================================================================================================
platform win32 -- Python 3.8.2, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: C:\Program Files\Python-3.8.2\pycharm_projects\ERM_EDL_HAO_21.3_Branch, configfile: pytest.ini
plugins: mock-3.5.1
collecting ... sys path ['
C:\\Program Files\\Python-3.8.2\\pycharm_projects\\ERM_EDL_HAO_21.3_Branch\\SourceCode\\application\\deploy\\app\\hao',
'C:\\Program Files\\Python-3.8.2\\pycharm_projects\\ERM_EDL_HAO_21.3_Branch',
'C:\\Progra~1\\Python-3.8.2\\pycharm_projects\\fnma-erm01-devl-edl-hao-repo\\SourceCode\\application\\deploy\\app\\hao\\lambda',
'C:\\Progra~1\\Python-3.8.2\\pycharm_projects\\fnma-erm01-devl-edl-hao-repo\\SourceCode\\application\\deploy\\app\\hao\\lambda\\tests',
'C:\\Progra~1\\Python-3.8.2\\pycharm_projects\\fnma-erm01-devl-edl-hao-repo\\SourceCode\\application\\deploy\\app\\hao\\lambda\\utils',
'C:\\Program Files\\Python-3.8.2\\pycharm_projects\\ERM_EDL_HAO_21.3_Branch',
'C:\\Program Files\\Python-3.8.2\\python38.zip',
'C:\\Program Files\\Python-3.8.2\\DLLs',
'C:\\Program Files\\Python-3.8.2\\lib',
'C:\\Program Files\\Python-3.8.2',
'C:\\Program Files\\Python-3.8.2\\pycharm_projects\\ERM_EDL_HAO_21.3_Branch\\venv',
'C:\\Program Files\\Python-3.8.2\\pycharm_projects\\ERM_EDL_HAO_21.3_Branch\\venv\\lib\\site-packages',
'C:\\Users\\g3uj2m\\AppData\\Roaming\\Python\\Python38\\site-packages',
'C:\\Users\\g3uj2m\\AppData\\Roaming\\Python\\Python38\\site-packages\\win32',
'C:\\Users\\g3uj2m\\AppData\\Roaming\\Python\\Python38\\site-packages\\win32\\lib',
'C:\\Users\\g3uj2m\\AppData\\Roaming\\Python\\Python38\\site-packages\\Pythonwin',
'C:\\Program Files\\Python-3.8.2\\lib\\site-packages']
collected 0 items / 16 errors
=============================================================================================================================================================================== ERRORS ================================================================================================================================================================================
_______________________________________________________________________________________________________________________ ERROR collecting SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_amtm_upstream_notification.py _______________________________________________________________________________________________________________________
ImportError while importing test module 'C:\Program Files\Python-3.8.2\pycharm_projects\ERM_EDL_HAO_21.3_Branch\SourceCode\application\deploy\app\hao\lambda\tests\handlers\unittest_hao_amtm_upstream_notification.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
..\..\lib\importlib\__init__.py:127: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
SourceCode\application\deploy\app\hao\lambda\tests\handlers\unittest_hao_amtm_upstream_notification.py:8: in <module>
from hao_amtm_upstream_notification import lambda_function
E ModuleNotFoundError: No module named 'hao_amtm_upstream_notification'
# ... ^ that part more or less repeated 15 more times ...
======================================================================================================================================================================= short test summary info =======================================================================================================================================================================
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_amtm_upstream_notification.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_batchjob_status_check.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_batchjob_submit.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_capture_hedge_status.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_ccfa_upstream_notification.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_dynamodb_status_check.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_glue_function.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_irdb_upstream_notification.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_krd_upstream_notification.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_ln_pool_max.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_s3_data_availability_check.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_stepfn_execution_status.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_swap_upstream_notification.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_trigger_sns_msg.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_verify_upstream_data_availability.py
ERROR SourceCode/application/deploy/app/hao/lambda/tests/handlers/unittest_hao_workflow_trigger.py
文件树:
pytest.ini
SOURCECODE
├───application
│ └───deploy
│ └───app
│ └───hao
│ ├───lambda
│ │ ├───hao_amtm_upstream_notification
│ │ │ lambda_function.py
│ │ │
│ │ ├───hao_batchjob_status_check
│ │ │ lambda_function.py
│ │ │
│ │ ├───hao_batchjob_submit
│ │ │ lambda_function.py
│ │ │
... etc ...
│ │ │
│ │ ├───tests
│ │ │ conftest.py
│ │ │
│ │ │ ├───handlers
│ │ │ │ unittest_hao_amtm_upstream_notification.py
│ │ │ │ unittest_hao_batchjob_status_check.py
│ │ │ │ unittest_hao_batchjob_submit.py
│ │ │ │ ... etc ...
pytest.ini 文件:
# pytest.ini
[pytest]
python_files = unittest_*.py
这是我已经尝试/检查过的:
- 所有必要的文件夹都已标记为“Sources Root”。
- 我已将
__init__.py添加到所有必要的文件夹中。 - 我已检查以确保
__init__.py未被识别为文本文件。 - 我已经在文件下运行了“使缓存无效/重新启动...”选项。
- 我已确保项目的解释器与当前项目和目录保持一致。
它不会让我包含屏幕截图,但项目结构应该不是问题,因为它在旧分支中运行良好。 (旧的分支结构和新的一样,所以从一个复制到另一个应该没有引用问题)
编辑 1:
我正在使用pytest.ini 配置文件,其中指定的唯一内容是用于标识测试文件的自定义前缀。我为新项目创建了一个新的 venv,并且我正在从 PyCharm 的内置终端调用 pytest,因此 venv 处于活动状态。
编辑 2:
缩短了堆栈跟踪,使其更易于阅读,并添加了文件树和pytest.ini 文件的相关部分。
【问题讨论】:
-
@bad_coder 我正在使用 pytest.ini 配置文件,其中唯一指定的是用于标识测试文件的自定义前缀。我为新项目创建了一个新的 venv,并且我正在从 pycharm 的内置终端调用 pytest,因此 venv 处于活动状态。
-
@bad_coder 正在发现测试。这是行/命令:
(venv) C:\Program Files\Python-3.8.2\pycharm_projects\fnma-erm01-devl-edl-hao-repo_21.3>python -m pytest。它成功地找到并尝试运行所有 16 个测试,但无论出于何种原因,对项目中模块的引用都被破坏了。虚拟环境 (venv) 处于活动状态。对于项目解释器,我选择了虚拟环境,但这确实让我怀疑将它放在 Python 主文件夹中是否会导致问题。希望不是因为它必须因为权限而存在。 -
我在文件树和pytest.ini文件的相关部分添加了
-
好的,我想我发现了错误。在您的
sys.path中查看'C:\\Progra~1\\Python-3.8.2\\pycharm_projects\\fnma-erm01-devl-edl-hao-repo\\SourceCode\\application\\deploy\\app\\hao\\lambda'。这就是发生 1 条错误消息的地方,这是一条from hao_amtm_upstream_notification import lambda_function。现在,问题似乎是您的sys.path中有lambda包用于fnma-erm01-devl-edl-hao-repo分支,但不是ERM_EDL_HAO_21.3_Branch如果您像您一样将相同的包放在sys.path上的后续分支对于前者,它应该可以工作。 -
将
'C:\\Program Files\\Python-3.8.2\\pycharm_projects\\ERM_EDL_HAO_21.3_Branch\\SourceCode\\application\\deploy\\app\\hao\\lambda'添加到sys.path中应该少1 个“未找到”导入错误。基本上,您需要复制与fnma-erm01-devl-edl-hao-repo相同的路径并将它们放在sys.path上。