问题标签 [testinfra]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
6998 浏览

python - 在 testinfra 中使用 Ansible 变量

将 TestInfra 与 Ansible 后端一起用于测试目的。一切都很好,除了在运行测试时使用 Ansible 本身

测试.py

其中 zabbix_agent_version 是来自 group_vars 的 Ansible 变量。可以通过运行这个 playbook 来获得

命令执行测试

ansible.cfg

我得到的输出是

知道为什么 Ansible 在运行 testinfra 的 Ansible 模块时看不到这个变量,而在单独运行 Ansible 时可以看到它吗?

0 投票
2 回答
363 浏览

pytest - 在 pytest 中收集时使用固定装置

我将 testinfra 与 ansible 传输一起使用。它提供了host具有的夹具ansible,所以我可以做到host.ansible.get_variables()

现在我需要根据该库存中的值创建测试的参数化。

存货:

我想编写一个测试,测试清单中每个主机的 somedata 中的每个“数据”。“每个主机”部分由 testnfra 处理,但我正在努力进行测试的参数化:

我尝试了两种方式:

  • @pytest.fixture(params=somedata)->TypeError: 'function' object is not iterable
  • @pytest.fixture(params=somedata())->Fixture "somedata" called directly. Fixtures are not meant to be called directly...

我怎样才能做到这一点?我知道我不能在测试时更改测试次数,但我很确定我在收集时有相同的库存,所以,理论上,它是可行的......

0 投票
0 回答
2984 浏览

ansible - 在分子测试中访问 Ansible 变量,TestInfra

我在研究 inspec 以及如何在 ansible 中使用它时拿起了分子。我发现分子很酷并采用了它。我想以两种方式使用它。

在第 1点:我在 stackoverflow 上发现了这个非常有用的问题/回复,这帮助我塑造了我的想法。我将角色 kafka 的变量文件放在 group_vars/all 下,如 stackoverflow 帖子中所建议的那样

test_default.py

group_vars/all.yml

分子验证

验证程序成功完成。但是,该方法host.ansible.get_variables()无法解析另一个变量中的变量,例如 : kafka_final_path: "/usr/local/kafka/{{ kafka_version }}"

我最终使用了以下内容:

获取 kafka_final_path 的值。

问题 1.1:看看在使用所有需要的插值检索变量的变量之前如何需要进行一些操作,我想知道有没有更好的方法来编写这些测试?

问题 2.1:在第 2 点上,我想创建一个不同的测试场景,例如 AWS 上的 EC2。在这些剧本上,我使用传递给 ansible-playbook 的外部变量文件,因为它们具有更高的优先级。我想知道在这种情况下如何从 testinfra 中的外部 vars_files 访问这些变量?

0 投票
1 回答
1567 浏览

ansible - 在 Molecule 中使用 testinfra 作为验证器时如何调试测试

使用分子工具测试 ansible 角色并使用 testinfra(pytest) 验证结果时,我无法打印或调试某些输出或 ansible 变量。

有没有办法做到这一点?

0 投票
0 回答
209 浏览

ansible - pytest - 忽略测试,而不仅仅是跳过

我正在使用testinfra来测试某些服务是否在不同的节点上运行/启用。Testinfra 可以使用 ansible 让节点进行测试,它还将使 ansible 组可用。Testinfra 使用pytest

我只想在极少数的 ansible 组上测试服务,代码如下所示。

这很好用,除了调用我passing每次得到 1 个测试的pytest 东西test_service_running(这是很多,因为这是一个参数化测试)。我尝试添加一个pytest.skip(),但随后 pytest 将测试显示为已跳过(黄色s)。

目标是忽略输出中的测试,而不仅仅是跳过它。所以不是绿色或黄色.,我什么都不想要。

我已经阅读了 api-docs 和源代码,但如果可能的话,我找不到任何信息。

我会提出拉取请求,但想先检查是否有人知道解决方案。

0 投票
0 回答
131 浏览

testing - 如果任何参数化测试通过,如何使 pytest 通过测试?

我们有一个集群,其中只有一个服务器(主服务器)可以返回有意义的结果。主人是自动选择的,在测试时我不知道谁是主人,谁不是。在我们的测试中,我们使用了 testinfra,它为集群中的每个主机提供了一个夹具“主机”。

我们有一个看起来像这样的测试:

问题是有N台主机,只有一台能返回OK,别人说“我不是高手”。

正常输出如下所示:

test_cluster如果任何测试通过(如果所有测试都失败,则失败),我想找到一种方法将测试标记为通过。

如果 testinfra 对于测试来说太多了,这里只有 pytest 的更简洁的例子:

1如果“num”夹具中至少有一个,我需要 pytest 才能通过。

0 投票
1 回答
318 浏览

unit-testing - 使用 testinfra_hosts 数组,您可以控制测试中用于每个主机的参数化值吗?

我正在尝试编写一个测试套件来使用 testinfra 验证某些服务器的状态。

这是我第一次使用 python/testinfra/pytest。

作为一个简短的伪代码示例

测试文件.py

每个服务器都有自己独特的 params yaml 文件。我希望每台服务器都通过相同的测试,但是我需要每台服务器使用其各自 .yml 文件中的参数化值运行测试。

上面代码的问题在于,它将尝试针对服务器 2 和 3 执行所有 server1 的唯一参数,然后将再次启动服务器 2 对服务器 1-3 唯一参数运行。

我找不到一种干净的方法来基本上以 server1 作为主机和 server 1 参数运行一次测试,然后对 server2 和 server2 参数等再次执行相同的操作。

我尝试在测试文件本身中使用 for 循环,将每个 instance_params.yml 读入字典,其中键是服务器名称和包含所有服务器参数的值 - 但这闻起来不太好,因为断言是在循环内部,如果该服务器的参数之一失败,则循环退出并且不会尝试该服务器的任何其他参数。

我已经研究了 pytest_collection_modifyitems 但我无法完全理解如何让它做我想做的事。我觉得我可能缺少一个简单的解决方案。

我最后的手段是将测试和参数化参数单独分开为

不过,这种方法对我来说并不合适。

对新的大三学生的任何帮助将不胜感激,在此之前我从未在这里问过任何问题希望这是有道理的:)

更新:@ajk 找到了解决方案!pytest_generate_tests 函数正是我所需要的——而且我在此过程中加深了对 pytest 的理解。

谢谢阿克!我欠你一个:D

0 投票
1 回答
201 浏览

python-3.x - testinfra - ansible 变量未正确解释

对于testinfra,我正在使用 get_variables()来自testinfra.modules.ansible.Ansible的方法,但似乎testinfra 无法评估我的 Ansible 变量

让我们描述一下我的 poc。

我定义了 2 个变量:

inventory.ini是一个简单的 localhost :

我创建了一个非常简单的测试,如下所示:

当我运行 pytest 时,这是我的 sdtout :

如您所见,one在 variable 中使用时不会解释 variable two

那么,这有可能做到这一点以及如何做到这一点?

感谢您的反馈意见 !:)

0 投票
1 回答
206 浏览

python-3.x - 如何通过模块 testinfra 修复文本?

写了一个dockerfile。在其中,我使用模块 testinfra 运行测试。镜像模块,用于dockerile FROM alpine:3.11

有这样的错误

由于某种原因,它不想检查nginx是否正在运行以及是否启用,据我了解,它没有找到服务功能本身

测试代码看起来像这样

dockerfile

0 投票
0 回答
79 浏览

testing - 如何在测试中切换到不同的 Testinfra 主机?

我试图在同一个测试中,首先在机器 A(又名主机)上执行代码,做出断言,然后在机器 B(又名 SNIC)上执行代码,在那里做出断言,然后执行代码再次在机器 A 上。

这是我使用 Testinfra 和 Ansible 的 PyTest 测试文件:

这是我的 Ansible 清单的相关部分:

现在,Testinfra 文档含糊地提到我可以一次使用多个主机。因此,我可以替换这一行:

有了这个:

但是,它并没有说明如何在测试过程中切换到第二个 testinfra 主机并返回到第一个。这正是我的问题。这就是我想要做的,但我无法为我的生活弄清楚如何去做。任何帮助将不胜感激。