如何在`python setup.py test`中运行py.test和linters

时间:2016-02-06 09:54:13

标签: python python-2.7 pytest setup.py

我有一个带有setup.py文件的项目。我使用pytest作为测试框架,我还在代码上运行了各种短语(pep8pylintpydocstylepyflakes等。我使用tox在几个Python版本中运行它们,以及使用Sphinx构建文档。

我想使用python setup.py test任务运行我的测试套件以及源代码上的linters。如果我实现了这一点,那么我将使用python setup.py test作为在tox.ini文件中运行测试的命令。

所以我的问题是:

  1. 使用python setup.py test执行这些操作是否合理/良好?或者我应该只使用其他工具,比如直接在tox
  2. 中编写这些命令
  3. 如何让setup.pytest任务中执行这些操作?
  4. 我知道py.testsetup.py test的集成说明(此处:http://pytest.org/latest/goodpractices.html#integrating-with-setuptools-python-setup-py-test-pytest-runner),但我正在寻找更“随意的CLI命令”路由,因为我想运行几个工具。

3 个答案:

答案 0 :(得分:2)

1。我个人更喜欢tox来完成这些任务,因为

  • 它还会检查您的deps是否正确安装(在所有py版本上)
  • 它可以使用多个python版本(virtualenv)
  • 测试您的代码

通过您的设置(因为您已经使用过tox),我真的没有看到将python setup.py test而非精确的测试命令写入tox.ini的好处,因为它只会添加一些更复杂的功能(新用户/贡献者必须搜索两个文件(tox.inisetup.py)来运行测试/工具而不是一个(tox.ini)。

<强> 2

  

要使用此命令,您的项目测试必须包含在unittest中     测试套件由函数,TestCase类或方法或模块组成     或包含TestCase类的包。

setuptools#test

答案 1 :(得分:1)

如何使setup.py testtox内容

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来配置您的测试环境和投放者(如flake8coverage等)因为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