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