ImportError:使用pytest时无法导入名称

时间:2017-09-11 11:41:42

标签: python unit-testing pytest

我在python中创建一个与此类似的目录结构:

module_root
├── __init__.py
├── module_a
│   ├── __init__.py
│   ├── local_module_a.py
│   └── tests
│       ├── context.py
│       └── test_local_module_a.py
├── module_b
│   └── tests
│       └── context.py
├── tests
│   ├── context.py
│   └── test_this_module_will_be_exported.py
├── this_module_will_be_exported.py
└── this_module_will_not_be_exported.py

每个模块都有自己的测试文件夹和测试。一旦Python不在文件调用import之上的目录中搜索模块,每个测试目录都有一个名为context.py的文件,类似于:

import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

from this_module_will_be_exported import ThisClassWillBeExported

然后,在每个测试文件中,我使用以下import语句:

from context import ThisClassWillBeExported

当我只有一个test目录和一个context.py时,一切正常,但是当我添加更多测试时(如上面的目录树中所述),pytest执行会返回以下错误

ImportError while importing test module 'path/to/module_root/tests/test_this_module_will_be_exported.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
module_root/tests/test_this_module_will_be_exported.py:1: in <module>
    from context import ThisClassWillBeExported
E   ImportError: cannot import name 'ThisClassWillBeExported'

当我将module_root/module_a/tests/context.py的名称更改为module_root/module_a/tests/_context.py时(例如),测试效果很好。所以我知道我可以简单地将所有context.py更改为不同的名称,但我希望保留其名称以避免更多工作。

所以我需要社区的帮助,有办法保留context.py名称并解决这个问题吗?

感谢。 :)

1 个答案:

答案 0 :(得分:0)

首先,您只需将根目录添加到 driver.manage().window().maximize(); 而不是所有上下文文件。

其次,如果要从同一文件夹导入上下文文件,请尝试使用相对路径。

PYTHONPATH

第三,确保所有上下文文件都包含您要导入的变量。

相关问题