pytest fixture,它运行给定的ansible playbook文件。

pytest-ansible-playbook-runner的Python项目详细描述


pytest ansible playbook runner
==br/>

希望在测试设置期间重用
,或计划在ansible playbooks中维护测试设置,以便您能够在测试运行设置期间使用它,并直接通过ansible用于其他目的
(在部署期间自动使用或在需要时手动使用)。

` pytest ansible``模块,此模块不允许您检查每个ansible任务的"ansible facts"或结果的详细信息,也不允许直接指定和执行ansible任务。因此,如果您需要
其中任何一个,请改为使用"pytest ansible"。这个插件提供了唯一的
缺少ansible特性,pytest ansible不应该提供这个特性-直接运行ansible playbook文件。

这个存储库的初始结构是用'cookiecutter'
和'hackebrot''cookiecutter pytest插件一起生成的`_模板。



功能
——


\它允许
一个人在测试设置期间运行一个或多个ansible playbook,或拆除一个
测试用例。
-它还提供了"context manager``pytest ansible`playbook.runner()``
,可用于构建具有任何"scope"的自定义装置,或执行
安装和/或在测试用例的代码中分解playbook s。
-它与python3兼容(playbooks是通过在子进程中运行"ansible playbook"来执行的,而不是使用ansible python模块的api
)。
-不允许以任何方式配置ansible,Ansible
设置的所有更改都需要在Ansible Playbooks、变量或配置文件中完成。
这鼓励您保持Ansible Playbooks
和测试之间的清晰分离。





在测试过程中运行任意剧本的选项:
``python
def test_something(ansible_playbook,….):

ansible_playbook.run嫒playbook('my_playbook.yml')

```
2。在测试过程中添加可拆卸的剧本的选项:
``python
def test_something(ansible_playbook,….):

ansible_playbook.add_to_teardown({'file':'my_playbook.yml','extra_vars':{})

````
3.返回值已添加到每个剧本运行。返回值尊重playbook的执行顺序,对于每个主机:
``python
def test_something(ansible_playbook,….):

ret=ansible_playbook.run_playbook('my_playbook.yml')
assert ret['localhost'][0]['msg']='line added'
````
4。测试可以将参数传递给它运行的剧本。因此,playbook已从字符串更改为字典:
``python
def test_something(ansible_playbook,….):

ansible_playbook.run_playbook('my_playbook.yml',{'play_host_groupd':'some_ansible_group','param1':'value1')

`````
5。标记安装/拆卸语法:
``python
@pytest.mark.ansible廑u playbook廑u安装(
{file':'some廑u playbook.yml','extra廑vars':{'play廑u host廑u groupd':'some廑sible廑u group','param1':'value1'}
@pytest.mark.ansible廑u playbook廑u拆卸(
{file':'my廑teardow"额外变量":{play_host_groupd':"某些可扩展组","param1":"value1"},
{file':"my_teardown2.yml","额外变量":{play_host_groupd':"某些可扩展组","param1":"value1"}
)def test_something(ansible_playbook,…..:

ansible_playbook.run_playbook('my_playbook.yml',{'play_host_groupd':'some_ansible_group','param1':'value1'})

`````



pytest插件现在使用一个单独的模块:playbook_runner.
https://github.com/final israel/playbook_runner
这是因为其他工具可能也希望运行playbook,而不一定是pytest框架的一部分。



要求
----

系统。



《发布
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>建议的从当前主分支的源安装的方法是通过python virtual environment:


$cd pytest ansible playbook runner
$virtual env.env
$source.env/bin/activate
$pip install-e。

此工作流。



用法
---


安装插件时,可以使用以下命令行
参数::

py.test\
[--ansible playbook directory<;path\u-to-u directory\u-with-playbooks>;]\
[--ansible playbook inventory<;path_to_inventory_file>;]

,其中`<;path_to_directory_with_playbooks>;``是一个目录,其中包含
可翻译的playbooks和任何其他可翻译文件,如
配置或角色(如果需要)。"ansible playbook"进程将能够访问存储在其中的文件,因为该目录被设置为ansible进程的cwd(当前
工作目录)。

您可以
在通过第一个选项指定的ansible目录中使用绝对路径或相对路径



注意,选项名称是这样选择的,这样它就不会与"pytest ansible"插件冲突。




fixture
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

插件提供了一个名为"ansible\u playbook"的pytest fixture。要指定要由设备执行的行动手册,使用以下"pytest
标记:

*``@pytest.mark.ansible\u playbook\u setup('playbook.yml')```
*```@pytest.mark.ansible\u playbook\u teardown('playbook.yml')`

请注意,如果需要,可以在标记中列出多个playbook,例如:

@pytest.mark.ansible_playbook_setup('playbook.01.yml',"playbook.02.yml")


两个playbook将按给定顺序执行。


下面是一个示例,如何指定在测试用例的安装阶段要运行的两个playbook和用于拆卸的一个playbook::

@pytest.mark.ansible\u playbook\u setup('setup\u foo.yml',"bar.yml")
@pytest.mark.ansible_playbook_teardown('teardown_foo.yml')
def test_foo(ansible_playbook):
"
"这里进行了一些测试。
"


使用没有"ansible_playbook"固定装置的标记时,这样的固定装置是有效的::


@pytest.mark.ansible_playbook_setup('setup_foo.yml')
@pytest.mark.ansible_playbook_teardown('teardown_foo.yml')
def test_foo():
"
此处完成一些测试。
""


在这种情况下,不会执行任何playbook。

不带任何playbook参数的标记或使用不带任何标记的
设备无效,将导致错误。



`_它可以用来创建自定义的"pytest fixture",或者在测试用例中运行playbooks.
*将运行给定的设置/拆卸操作手册与其他不可用的设置或拆卸步骤结合起来
(以克服不能使用"ansible\u playbook"设备运行另一个设备的设置/拆卸操作,因为"pytest不希望fixtures
有标记`.
*指定当测试用例失败时跳过可拆卸的playbooks

简单自定义fixture示例::


iport pytest
@pytest.fixture(scope="session")
定义自定义夹具(请求):
安装程序手册=['setup_foo.yml','setup_bar.yml']
拆卸程序手册=['teardown_foo.yml','teardown_bar.yml']
与runner(请求,安装程序手册,拆卸行动手册:
这里是在安装过程中执行的代码,在运行安装程序之后
playbooks
yield
定义测试条(自定义夹具):
assert 1==1

['teardown_foo.yml']:
这里的代码在安装剧本之后执行,但是在
teardown剧本之前执行,如果您想避免在测试用例失败时运行teardown剧本,使用runner的
``skip\teardown``参数:

可以使用"tox"运行测试,请确保在提交请求之前覆盖率至少保持不变。




license
----



"Pytest Ansible Playbook Runner"是免费的开放源码软件



问题
----


如果您遇到任何问题,请"提交问题"以及详细的
说明。

_`提交问题`:https://github.com/final israel/pytest ansible playbook runner/issues
。_` Cookiecutter`:https://github.com/audreyr/Cookiecutter
。_`@hackebrot`:https://github.com/hackebrot
。_` cookiecutter pytest plugin`:https://github.com/pytest dev/cookiecutter pytest plugin
。_` pytest`:http://docs.pytest.org/en/latest/
。_` pytest fixture`:http://doc.pytest.org/en/latest/fixture.html
。_` pytest markers`:http://doc.pytest.org/en/latest/example/markers.html
。_` plugin`:http://doc.pytest.org/en/latest/plugins.html
。_` tox`:https://tox.readthedocs.io/en/latest/
。_` pip`:https://pypi.python.org/pypi/pip/
。_` pypi`:https://pypi.python.org/pypi
。_` pypi的稳定版本:https://pypi.org/project/pytest-ansible playbook runner/
。_` python虚拟环境`:https://virtualenv.pypa.io/en/stable/
。_` virtualenvwrapper`:https://virtualenvwrapper.readthedocs.io/en/latest/
。_` pytest ansible`:https://pypi.python.org/pypi/pytest ansible
。_` ansible playbooks`:https://docs.ansibe.com/ansible/playbooks.html
。_` ansible facts`:https://docs.ansibe.com/ansible/playbooks_variables.html从系统事实中发现的信息
。_` ansible inventory`:https://docs.ansibe.com/ansibe/intro_inventory.html
。_` apache许可证2.0`:http://www.apache.org/licenses/license-2.0
…_`上下文管理器:https://docs.python.org/3.6/library/stdtypes.html;上下文管理器类型
。_`作用域":https://docs.pytest.org/en/latest/fixture.html;作用域共享-a-fixture-instance-cross-tests-in-a-class-module-or-session
_` pytest不希望fixture有标记:https://github.com/pytest dev/pytest/issues/3664

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在列表视图中插入调用按钮   java公开类别ID   java在使用JSch通过jumphost连接到远程主机时“拒绝主机密钥”   java连接。在Hibernate中为每个select查询调用getMetaData()   java如何在安卓 studio的文本监听器上突出显示过滤列表视图中的文本?   安卓应用程序、进程和Java虚拟机之间的对应关系是什么?   java如何使用Android在应用程序标签中添加这两个名称   java框架来衡量花费的时间和内存   java自动将字符串缩放到屏幕的宽度   在eclipse导出中创建jar文件时发生java错误   java Spring Web应用程序已初始化两次   java将数据插入数据库“表产品没有名为accFor(代码1)的列”   运行时如何执行。通过java中的Jruby使用带参数的rb   java Android:将视图从父视图转移到另一个视图   java如何在具有依赖关系的nexus中部署springboot maven项目   Google Java style:checkstyle文件与Visual Studio代码的相应编辑器配置文件   java以exif格式从jpeg或png文件中提取元数据