跳转到主要内容

pytest测试框架的服务插件

项目描述

pytest测试框架的服务插件

https://img.shields.io/pypi/v/pytest-services.svg https://img.shields.io/pypi/pyversions/pytest-services.svg https://img.shields.io/coveralls/pytest-dev/pytest-services/master.svg https://travis-ci.org/pytest-dev/pytest-services.svg?branch=master Documentation Status

安装pytest-services

pip install pytest-services

特性

该插件提供了一套固件和实用函数,用于通过 pytest 启动您的测试服务进程。

固件

  • run_services

    确定是否运行服务。默认为False,如果不是分布式环境(没有pytest-xdist)。可以通过覆盖测试配置中的此固件或将命令行参数设置为< cite>–run-services来手动设置为True(见下文)。

基础设施固件

  • worker_id

    如果使用pytest-xdist运行测试,则工作进程的ID。如果没有使用pytest-xdist运行测试(将命令行选项< cite>–dist设置为< cite>load),则设置为< cite>local。具有已弃用的别名slave_id,将在未来的版本中删除。

  • session_id

    测试会话ID。全局唯一,当然,也保证在通过pytest-xdist在同一个测试节点上运行多个测试会话时不同。

  • watcher_getter

    用于实例化测试服务监视器(popen对象)的函数。包括自动终止(退出)服务进程,并在返回监视器之前测试服务。使用memcached服务的示例

@pytest.fixture(scope='session')
def memcached(request, run_services, memcached_socket, watcher_getter):
    """The memcached instance which is ready to be used by the tests."""
    if run_services:
        return watcher_getter(
            name='memcached',
            arguments=['-s', memcached_socket],
            checker=lambda: os.path.exists(memcached_socket),
            # Needed for the correct execution order of finalizers
            request=request,
        )
  • services_log

    用于管理测试服务时的调试日志记录器。

  • root_dir

    测试服务工件(基于磁盘)的父目录。默认设置为< cite>/tmp。

  • base_dir

    测试服务工件(基于磁盘)的基本目录,< cite>root_dir的唯一子目录。在测试会话结束时自动递归删除。

  • temp_dir

    < cite>临时目录(基于磁盘),< cite>base_dir的子目录。用于严格临时的工件(例如 - 从用户输入上传文件的文件夹)。

  • memory_root_dir

    测试服务工件(基于内存)的父目录。具有基于内存的目录的主要思想是将性能关键文件存储在那里。例如 - mysql服务将使用它来存储数据库文件,这大大加快了mysql服务器,尤其是在数据库管理操作方面。默认设置为< cite>/var/shm,回退到‘root_dir’。请注意,如果系统上运行着apparmor,它很可能阻止您的测试服务使用它(例如 - mysql有其apparmor配置文件)。您需要禁用apparmor配置中的此类配置文件。禁用mysqld的apparmor的示例

sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
sudo /etc/init.d/apparmor restart
  • memory_base_dir

    测试服务工件(基于内存)的基本目录,< cite>memory_root_dir的唯一子目录。在测试会话结束时自动递归删除。

  • memory_temp_dir

    < cite>临时目录(基于内存),< cite>base_dir的子目录。

  • lock_dir

    用于存储为资源分配(端口、显示等)创建的锁的锁文件目录。< cite>memory_root_dir的子目录。

  • run_dir

    进程ID和套接字文件目录(类似于全局< cite>/var/run,但仅针对测试会话本地)。< cite>memory_root_dir的子目录。

  • port_getter

    用于获取未分配端口的函数。自动确保通过flock在应用级别锁定和解锁它。

  • display_getter

    用于获取未分配显示的函数。自动确保通过flock在应用级别锁定和解锁它。

  • lock_resource_timeout

    用于函数lock_resource。尝试锁定资源之间的最大总睡眠时间。

服务固件

  • memcached

    启动memcached实例。需要安装< cite>pylibmc或指示< cite>memcache为额外(< cite>pip install ‘pytest-services[memcached]’)。

  • memcached_socket

    用于连接的Memcached Unix套接字文件名。

  • memcached_connection

    Memcached连接字符串。

  • do_memcached_clean

    确定在每次测试运行之前是否应该清除memcached。默认等于run_services fixture。需要安装pylibmc或指定额外安装memcachepip install ‘pytest-services[memcached]’)。

  • memcached_client

    绑定到服务的pylibmc.Client实例。需要安装pylibmc或指定额外安装memcachepip install ‘pytest-services[memcached]’)。

  • mysql

    启动mysql-server实例。

  • mysql_database_name

    在初始化mysql服务的系统数据库后创建的MySQL数据库名。

  • mysql_database_getter

    带有单个参数 - 数据库名的函数。用于创建测试的额外数据库。在由mysql使用的mysql_database fixture中用于。

  • mysql_connection

    MySQL连接字符串。

  • xvfb

    启动xvfb实例。

  • xvfb_display

    用于连接的xvfb显示。

  • xvfb_resolution

    使用的xvfb显示分辨率。形式为(1366, 768, 8)的元组。

实用函数

Django设置

在某些情况下,需要在测试运行期间切换Django设置,因为单个测试套件中测试了多个Django项目。pytest_services.django_settings将切换Django设置简化为单个函数调用。

  • setup_django_settings

    覆盖环境变量并调用设置对象的_setup方法来重新加载它们。

使用示例

conftest.py

from pytest_services import django_settings

django_settings.clean_django_settings()
django_settings.setup_django_settings('your.project.settings')

请注意,优秀的项目pytest-django不能解决这个问题,因为它面向单个Django项目,以及标准的Django测试技术。单个项目的方法在没有需要在它们之间共享的fixture时效果很好,但当有需要在它们之间共享的fixture时,你可以从将多个Django项目测试合并到单个测试运行中受益,因为所有会话作用域的fixture将为所有项目测试实例化一次。这种好处只有在你的测试套件足够大并且你的fixture足够重时才可见。

命令行选项

  • –run-services

    即使测试以非分布式方式执行(没有pytest-xdist),也强制运行服务。

  • –xvfb-display

    跳过xvfb服务的运行并使用提供的显示。当你需要运行所有服务除了xvfb来调试你的浏览器测试时很有用,例如,如果你使用pytest-splinter与或没有pytest-bdd

示例

test_your_test.py

import MySQLdb


def test_some_mysql_stuff(mysql):
    """Test using mysql server."""
    conn = MySQLdb.connect(user='root')

联系方式

如果您有任何问题、错误报告、建议等,请在GitHub项目页面上创建一个问题。

许可证

本软件受MIT许可证许可。

查看许可文件

© 2014 Anatoly Bubenkov,Paylogic International及其他人。

作者

Anatoly Bubenkov

理念和实现

以下人员按字母顺序对pytest-services做出了贡献

变更日志

2.2.1

  • #42: 在file_lock中重试zc.lockfile.LockError,使用现有的timeout关键字参数(mshriver)

2.2.0

  • #38: 如果抛出zc.lockfile.LockError,则重试锁定资源。修复对于pytest-xdist所需的更改。(StabbarN)

2.1.0

  • #34: 已弃用slave_id fixture,改用worker_id,以与pytest-xdist 2.兼容。

2.0.1

  • #20: 添加了对SysLogHandler问题的解决方案。

2.0.0

  • 依赖 zc.lockfile 控制锁文件行为。

  • 现在支持更高版本的mysql,不再支持低于 mysql --initialize 支持的版本。

  • 修复了与更高版本mysql相关的问题,其中 mysql_defaults_file 配置会导致mysql启动失败。

  • 修复了测试套件中未测试mysql配置的问题。

  • 删除了 pytest_services.locks.lock_file

1.3.1

  • 修复了使用port_getter/display_getter时引起的竞争条件(youtux)。

1.3.0

  • request 参数添加到watcher_getter,以正确执行finalizers的顺序(youtux)。

1.2.1

  • 在watcher_getter的finalization中交换kill和terminate,允许在Unix上使用更礼貌的SIGTERM来终止子进程。有关详细信息,请参阅#15(jaraco)。

1.2.0

  • 将pylibmc作为可选依赖项,作为额外内容提供(jaraco)。

1.1.15

  • 修复了与更新的netcat-openbsd>=1.130.3相关的挂起问题(joepvandijken)。

1.1.14

  • 使用不同的策略来确定xvfb是否支持(youtux)。

1.1.12

  • 为mysql基本目录使用realpath(bubenkoff)。

1.1.11

  • 排除xvfb的锁定显示(bubenkoff)。

1.1.7

  • 修复了django设置问题(olegpidsadnyi)。

1.1.3

  • 支持django 1.8(bubenkoff)。

1.1.2

  • 修复了旧django支持问题(olegpidsadnyi)。

1.1.0

  • 支持django 1.7+(bubenkoff)。

1.0.10

  • 删除了自动清理artifacts(bubenkoff)。

1.0.8

  • 修复了popen参数(bubenkoff)。

1.0.2

  • 添加了端口和显示获取器(bubenkoff)。

1.0.1

  • 改进了文档(bubenkoff)。

1.0.0

  • 首次公开发布

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

pytest-services-2.2.1.tar.gz (28.5 kB 查看哈希值)

上传时间 源代码

支持者