2014-02-05 18 views
1

我有点生锈Python(2.7)模块&包,所以我希望能找到一些帮助。我在写一些使用硒的测试。我想组织“场景家庭”的测试,我想实施一个助手类来处理一些样板,这些样板将成为我所有测试的基础类。 基本上我想有一个结构看起来像:用于硒测试的Python项目结构

. 
├── assets 
│ └── ressource.ext 
├── tests 
│ ├── __init__.py 
│ ├── user 
│ │ ├── __init__.py 
│ │ └── upload.py 
│ └── visitor 
│  ├── __init__.py 
│  ├── homepage.py 
│  ├── login.py 
│  ├── search.py 
│  └── signup.py 
└── utils 
    ├── __init__.py 
    └── base.py 

我完全卡在如何使utils.base模块可见例如tests.visitor.signup模块仍允许使用python tests/visitor/signup.py运行此特定测试。 我该怎么做?

谢谢!

编辑:使事情更容易在这里的是什么,我试图做一个虚拟样品:

mkdir -p {utils,tests/user} 
touch {utils,tests{,/user}}/__init__.py 

echo -e "import unittest\n\nclass Base(unittest.TestCase):\n pass" > utils/base.py 
echo -e "from utils.base import Base\n\nclass MyTest(Base):\n pass\n\nif __name__ == '__main__':\n unittest.main()" > tests/user/upload.py 

这将产生以下树空__init__.py文件和进口我试图实现测试/用户/ upload.py:

dummy/ 
├── tests 
│   ├── __init__.py 
│   └── user 
│    ├── __init__.py 
│    └── upload.py 
└── utils 
    ├── __init__.py 
    └── base.py 

现在,如果我在dummy/文件夹中我得到这个:

(env)dummy $ python tests/user/upload.py 
Traceback (most recent call last): 
    File "tests/user/upload.py", line 1, in <module> 
    from utils.base import Base 
ImportError: No module named utils.base 

但是,如果我运行它交互显然有没有问题:

(env) dummy $ python 
Python 2.7.6 (default, Jan 16 2014, 16:39:48) 
>>> from utils.base import Base 
>>> 

我的问题一定是非常愚蠢的,但我看不到我在做什么错。而我不明白的是,指定python路径((env) dummy $ PYTHON_PATH=. python tests/user/upload.py)不能解决问题。

回答

0

您可以设置PYTHONPATH搜索当前目录:

PYTHONPATH=. python tests/user/upload.py 

或者你可以使用一个测试运行,一样的鼻子:

nosetests tests/user/upload.py 

或者你可以创建自己的测试运行,如果你不不想使用nose。例如,一个runtests.py文件有:

import unittest 
from tests.user.upload import * 
unittest.main() 

然后:

python runtests.py 

此测试跑步可以导入更多的测试,或者可能是选择什么测试中,它的进口。最终,我建议用鼻子来写自己的测试跑步者。

在层次结构顶部启动一个测试运行器是可行的,因为Python会将脚本的当前目录添加到它搜索模块的路径列表中。

+0

感谢您的帮助Louis。我有一段时间没练习Python,但不记得有过这个问题。我添加了一个简单的方法来生成我的代码布局,如果你想尝试 – marchelbling

+0

对不起,我想昨天我意外地在我创建的模拟层次结构上运行了'nosetests',而不是'python'。习惯的力量。我已经更新了答案。 – Louis

+0

好吧,当我说把PYTHONPATH传递给python命令不起作用时,我只是很傻。一个进口只是失踪。你说得对,鼻子就是最好的解决方案。 – marchelbling