对于setup.py,如何将单元测试分解为实际的单元测试与集成测试?

时间:2018-06-02 00:17:00

标签: python unit-testing pytest

我熟悉使用setup.py文件来指定包具有单元测试:

import sys
from setuptools import setup, find_packages

version = open('VERSION').read().strip()

setup_options = dict(
    name = 'web_api',
    version = version,
    author = 'me',
    author_email = 'me@example.com',
    url = 'http://www.example.com',
    description = 'Lorem ipsum dolor fiat lux',
    long_description = open('README.md').read().strip(),
    license = 'MIT',
    packages = find_packages(),
    tests_require=[
        'pytest'
    ],
    install_requires=[
        'click',
        'Flask'
    ],
    test_suite = 'tests'
)

setup(**setup_options)

使用此方法,可以说python setup.py test并且tests文件夹中的所有单元测试都会被执行。

我的项目通常会设置如下:

/
|..setup.py
|..mypackage/
|..|..__init__.py
|..|..somefile.py
|..tests/
|..|..test_something.py
|..|..test_somethingelse.py

当我运行python setup.py test时,所有单元测试都会触发。

但是,有时使用python单元测试框架来编写集成测试(可能涉及真实数据库连接的测试,或伸出并触摸另一台服务器)也很方便。

我发现当我编写Web服务器应用程序时,我希望能够在生产中运行测试,以确保环境按预期工作。我发现在实践中,我似乎总是把一堆脚本放在一边进行生产“冒烟测试”,开发集成测试以及包装内的一堆常规单元测试。

以下是我的测试类别。我认为这并不奇怪。

  1. 在CI服务器上执行的单元测试,它只测试python包中的内容(这些是“传统的”单元测试)
  2. 当我开发包时,我在我的开发机器上执行了
  3. 。这些测试有一个有效的数据库连接字符串,我安装到单元测试文件中(已经通过其他方式完成)我使用测试来决定是否针对环境(开发环境)正确编写代码
  4. 在软件包安装期间(例如在pip安装期间),我希望运行组#1测试。这是为了验证所有依赖性是否正常工作(没有集成测试)我们如何做到这一点?这是用setup.py吗?
  5. 完成的
  6. 在部署软件包之后,在某个地方,可能会出现问题。我想在生产环境中登录服务器并运行我的集成测试,以查看环境是否按预期工作。为此,我似乎最终得到了一堆脚本。但我真的希望他们成为整个包装的一部分。
  7. 在一个完美的世界中,所有这些代码都将在每次签到后由CI / CD机器执行。在实践中,如果不是,那就没关系。

    目前,我们必须将所有内容放入旧的/tests文件夹中。这意味着当我们说python setup.py test时,一切都会被执行。这对于仅用于开发或仅用于生产的集成测试是不可取的。我们如何分解它们以便只有某些由python setup.py test执行而其他的可以通过其他方式执行?

    P.S。我可以使用pytest。可以这样做吗?

0 个答案:

没有答案