selenium测试的Python项目结构

selenium测试的Python项目结构,python,testing,selenium,Python,Testing,Selenium,我对Python(2.7)模块和包有点生疏,所以我希望能找到一些帮助。我正在使用selenium编写一些测试。我想按“场景族”组织测试,并且我想实现一个helper类来处理一些样板文件,这些样板文件将是我所有测试的基类。 基本上,我希望有一个如下的结构: . ├── assets │ └── ressource.ext ├── tests │ ├── __init__.py │ ├── user │ │ ├── __init__.py │ │ └── upload.p

我对Python(2.7)模块和包有点生疏,所以我希望能找到一些帮助。我正在使用selenium编写一些测试。我想按“场景族”组织测试,并且我想实现一个helper类来处理一些样板文件,这些样板文件将是我所有测试的基类。 基本上,我希望有一个如下的结构:

.
├── 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
module仍然允许使用
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
这将生成以下树,其中包含空的
\uuuu init\uuuu.py
文件和我试图在tests/user/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

我的问题一定很傻,但我看不出我做错了什么。我还不明白的是,指定python路径(
(env)dummy$python_path=.python tests/user/upload.py
)并不能解决这个问题。

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

PYTHONPATH=. python tests/user/upload.py
或者您可以使用测试跑步者,如nose:

nosetests tests/user/upload.py
如果不想使用,也可以创建自己的测试运行程序。例如,带有以下内容的
runtests.py
文件:

import unittest
from tests.user.upload import *
unittest.main()
然后:

此测试运行程序可以导入更多测试,也可以选择导入哪些测试。最后,我建议使用nose而不是编写自己的测试运行程序


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

感谢您的帮助。我已经有一段时间没有练习Python了,但我不记得有过这个问题。我添加了一种生成代码布局的简单方法。如果您想尝试一下的话,我想昨天我不小心在我创建的模拟层次结构上运行了
nosetests
,而不仅仅是
python
。习惯的力量。我已经更新了答案。好吧,当我说将PYTHONPATH传递给python命令不起作用时,我只是很傻;只是缺少一个重要的东西。你说得对,鼻子就是个好办法。
import unittest
from tests.user.upload import *
unittest.main()
python runtests.py