pytest测试框架的服务插件
项目描述
pytest测试框架的服务插件
安装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或指定额外安装memcache(pip install ‘pytest-services[memcached]’)。
- memcached_client
绑定到服务的pylibmc.Client实例。需要安装pylibmc或指定额外安装memcache(pip 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及其他人。
变更日志
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2da740487d08ea63dfdf718f5d4ba11e590c99ddf5481549edebf7a3a42ca536 |
|
MD5 | 1de5a6ffca616c0886bed21bfc99eb8a |
|
BLAKE2b-256 | a7077771b0bd4f9a8b7bc23e567715387f49491c40dd890db08824fb1829d81f |