我有一个带有setup.py
文件的项目。我使用pytest
作为测试框架,我还在代码上运行了各种短语(pep8
,pylint
,pydocstyle
,pyflakes
等。我使用tox
在几个Python版本中运行它们,以及使用Sphinx
构建文档。
我想使用python setup.py test
任务运行我的测试套件以及源代码上的linters。如果我实现了这一点,那么我将使用python setup.py test
作为在tox.ini
文件中运行测试的命令。
所以我的问题是:
python setup.py test
执行这些操作是否合理/良好?或者我应该只使用其他工具,比如直接在tox
?setup.py
在test
任务中执行这些操作?我知道py.test
有setup.py test
的集成说明(此处:http://pytest.org/latest/goodpractices.html#integrating-with-setuptools-python-setup-py-test-pytest-runner),但我正在寻找更“随意的CLI命令”路由,因为我想运行几个工具。
答案 0 :(得分:2)
1。我个人更喜欢tox来完成这些任务,因为
通过您的设置(因为您已经使用过tox),我真的没有看到将python setup.py test
而非精确的测试命令写入tox.ini
的好处,因为它只会添加一些更复杂的功能(新用户/贡献者必须搜索两个文件(tox.ini
和setup.py
)来运行测试/工具而不是一个(tox.ini
)。
<强> 2 强>
要使用此命令,您的项目测试必须包含在unittest中 测试套件由函数,TestCase类或方法或模块组成 或包含TestCase类的包。
答案 1 :(得分:1)
setup.py test
做tox
内容import sys
import os
if sys.argv[-1] == 'test':
try:
import tox
except ImportError:
raise ImportError('You should install `tox` before run `test`')
sys.exit(os.system('tox'))
看起来不太好,但你有一点意见。继续使用tox.ini
来配置您的测试环境和投放者(如flake8
,coverage
等)因为tox
擅长此类内容。
答案 2 :(得分:0)
您可以在setup.py文件中添加更多自定义命令,如下所示:
class FooCommand(distutils.cmd.Command):
...
setup(
cmdclass={
'foo': FooCommand,
}
)
但请注意,您可以使用一组命令,以及一些可以包含的跑步者。
setup(
setup_requires=['pytest-runner'] # gives you a new pytest command
)
通过运行python setup.py --help-commands
Extra commands:
...
pytest run unit tests after in-place build