无法使用pytest运行测试,未找到模块

时间:2017-06-11 05:47:41

标签: python pytest python-unittest

我的目录结构如下:

| project/
| ---- lib/
| -------- __init__.py
| -------- MyModule.py
| ---- test/
| -------- __init__.py
| -------- test_MyModule.py
| ---- __init__.py

在我的测试文件中,我执行以下操作:

from project.lib.MyModule import MyModule

这是MyModule的文字:

class MyModule(object):
    pass

我能够在控制台和文件中运行它。但由于某些原因,pytest无法发现MyModule。我收到一个错误说:

E   ImportError: No module named 'project'

我做错了什么?

更新

我也试过这个并且失败了:

import sys
sys.path.insert(0, "~/project")

不起作用。帮助

2 个答案:

答案 0 :(得分:1)

应为from lib.MyModule import MyModule

答案 1 :(得分:0)

我认为问题可能出在你的Python或pytest版本和/或平台上(Windows / Linus发行版)。 我的环境: MacOS 10.11.6 Python 2.7.13 pytest (3.0.7)

我重新创建了你的项目并无法重现你的问题 - pytest运行正常:

Dmitry[project]: tree
.
├── __init__.py
├── lib
│   ├── MyModule.py
│   └── __init__.py
└── test
    ├── __init__.py
    └── test_MyModule.py

2 directories, 5 files
Dmitry[project]: cat lib/MyModule.py 
class MyModule(object):
    pass

Dmitry[project]: cat test/test_MyModule.py 
from project.lib.MyModule import MyModule

def test_object():
    o = MyModule()
    assert 1

运行pytest(对我而言,从哪里运行pytest并不重要,只需通过测试或测试模块提供正确的dir路径):

Dmitry[project]: pytest -vvv test/test_MyModule.py 
================================================================== test session starts ===================================================================
platform darwin -- Python 2.7.13, pytest-3.0.7, py-1.4.33, pluggy-0.4.0 -- /usr/local/opt/python/bin/python2.7
cachedir: .cache
sensitiveurl: .*
benchmark: 3.0.0 (defaults: timer=time.time disable_gc=False min_rounds=5 min_time=5.00us max_time=1.00s calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: /private/tmp/project, inifile:
plugins: xdist-1.15.0, variables-1.4, timeout-1.0.0, selenium-1.4.0, instafail-0.3.0, html-1.10.1, hidecaptured-0.1.2, excel-1.1.0, cov-2.5.1, capturelog-0.7, benchmark-3.0.0, base-url-1.1.0
collected 1 items 

test/test_MyModule.py::test_object PASSED

====================================================== 1 passed, 3 pytest-warnings in 0.02 seconds =======================================================