我的团队创作了大量厨师食谱。我想知道我应该研究哪些方法和框架,以便我们可以开始创建测试以确保我们的节点配置正确?
automated-testing testing configuration-management chef chef-solo
我正在使用iptables. 我想为断言以下内容的配置编写验收测试:
一个古老的 FAQ暗示了一个iptables -C选项,它允许人们提出类似这样的问题,“给定一个从 X 到 Y,在端口 Z 上的数据包,它会被接受还是被丢弃?” 尽管 FAQ 建议它是这样工作的,因为iptables(但可能不像ipchains它在示例中使用的那样)该-C选项似乎没有模拟运行所有规则的测试数据包,而是检查是否存在完全匹配的规则。这作为测试的价值不大。我想断言规则具有预期的效果,而不仅仅是它们存在。
我已经考虑过创建更多的测试 VM 和一个虚拟网络,然后使用诸如nmap效果之类的工具进行探索。但是,由于创建所有这些额外虚拟机的复杂性,我避免使用此解决方案,这对于生成一些测试流量来说确实是一种非常繁重的方法。拥有一种自动化测试方法也很好,它也可以在生产中的真实服务器上运行。
我还能如何解决这个问题?我是否可以使用某种机制来生成或模拟任意流量,然后知道它是否被(或将被)丢弃或接受iptables?
我一直在使用 puppet 来部署基础设施,而且我所做的大部分工作都是与 Web 2.0 公司合作的,这些公司热衷于为他们的 Web 应用程序进行测试驱动的开发。这里有没有人使用测试驱动的方法来开发他们的服务器配置?你使用什么工具来做到这一点?你的测试有多深?
作为配置服务器的一部分,我们运行 HP 的 Insight Diagnostics 来测试硬件。这是一个手动过程。有没有办法自动运行 Insight Diagnostics?
hpdiags 软件带有选项“-rd:”“运行所有可诊断设备的诊断”。从我的测试来看,这并没有多大作用(它只是从磁盘读取 SMART 信息)。有没有人有更好的运气?
硬件:BladeCenter c7000 与 HP ProLiant BL460c 刀片、DL360s。
操作系统:ESXi 和 Ubuntu。
全部,
我们正在尝试在我们的 Jenkins 设置中进行自动化测试,以在我们的 salt 状态文件 ( .sls) 中运行“smoke”和“lint”类型的测试。到目前为止,所有 google-foo 都产生了很少的信息。有一种test=True在命令行中进行测试的方法,但这不适用于无外壳帐户(就像 Jenkin 的帐户通常那样)。
我还没有遇到过对 SaltStack 状态进行这种自动测试的人。所以:
1)有没有可能
2)任何人都知道我可以查看的好资源
TIA。
考虑一个期望脚本,它生成一个命令并等待一系列事件。我们用它来测试软件。当超时时,我总是试图从脚本中获取失败返回值。
spawn some-command
set timeout 10
expect "First message"
expect "Other message"
Run Code Online (Sandbox Code Playgroud)
即使超时,此脚本也始终返回 0(成功)。处理超时的唯一方法是将每个 Expect 语句转换为:
expect {
timeout { exit 1 }
eof { exit 1 }
"First message"
}
Run Code Online (Sandbox Code Playgroud)
但这很快就会变得笨拙。有任何简化吗?是否有一个期望选项会导致早期超时/ eof 致命错误?
关于资源类型的serverspec 指南没有解释如何测试文件的缺失,而不是它的存在。这是我能想到的最好的:
describe command('/bin/bash -c "[[ ! -e /var/foo ]]"') do
its(:exit_status) { should eq 0 }
end
Run Code Online (Sandbox Code Playgroud)
这看起来非常笨拙,但比利用内置函数要好:
describe file('/var/foo') do
it { should_not be_file }
it { should_not be_directory }
it { should_not be_socket }
it { should_not be_symlink }
end
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
我目前正在工作的一个小型测试农场工作,尤其是在运行测试后重置机器的部分让我有些头疼。
在我们决定获得几台具有不同硬件配置的专用测试机器之前,计划是在一台使用 Hyper-V 的机器上运行测试,因此之后的清理只是删除实际 VM 的问题。
不幸的是,重置整台机器在时间上要贵一些,而且如果你经常这样做的话,我猜多年来硬件也会磨损。
我相信仅仅卸载已安装的软件是不够的,因为系统上可能会留下一些文件/可再发行文件,这使得后续的测试运行不太有用。
我还相信在测试机器上运行 Hyper-V 虚拟机会对测试结果产生不利影响,尤其是在较弱的硬件配置上。
我真的很想知道是否有一些现有的解决方案可以解决这个问题,以及最聪明的方法是什么。
只是在黑暗中试一试,但我想我会问,以防万一有人有一些想法:
我有一个测试场景,其中一些(无 GUI/嵌入式)IPv6 设备将临时插入托管以太网交换机的端口,以及一个控制程序(在单独的 Linux PC 上运行,也连接到交换机) 将检测这些设备之一何时出现在 LAN 上,并自动运行测试以确保设备正常工作。
通常会同时连接十几个这样的设备(因此我们可以并行运行测试),并且设备将由不一定了解网络的人定期连接和断开连接;他们只知道如何插入以太网电缆,然后(几个小时后)查看 PC 的屏幕以查看测试是否通过。
当前的问题是如何在特定设备未通过测试时向测试人员指示。一种选择是错误日志/消息包含设备的 MAC 地址(源自其本地链路 IPv6 地址),这在紧要关头可能就足够了,但如果测试程序也可以说类似的话会更好“连接到端口 #5 的设备工作不正常,看看那个”。这样一来,测试人员就可以沿着以太网电缆找到故障设备,而不必弄清楚每个设备的 MAC 地址是什么,直到他/她找到匹配的设备。
我认为Linux 计算机不可能知道特定设备连接到哪个交换机端口(如果我错了,请告诉我)。但假设是这种情况,下一个最好的事情是,如果我可以对交换机进行编程以进行 MAC 地址转换,例如,插入到端口 #n 的任何设备总是出现(对 Linux 计算机),就好像它有 MAC地址 foo:bar:baz:n,因此显示为 IPv6 地址 fe80::2foo:bar:baz:n。如果交换机像这样进行 MAC 地址转换,那么控制软件可以通过查看虚假 MAC 地址的最后一部分来确定设备连接到哪个端口。
所以我的问题是,任何托管以太网交换机都支持这种行为吗?如果是这样,这个功能叫什么(所以我可以找到一个开关)?如果没有,是否有更好的方法来解决我应该考虑的这个问题?
testing ×3
automation ×2
deployment ×2
chef ×1
chef-solo ×1
expect ×1
hardware ×1
hp ×1
hp-proliant ×1
iptables ×1
ipv6 ×1
linux ×1
mac-address ×1
nat ×1
saltstack ×1
windows ×1