考虑一个运行SMTP服务器的简单FreeBSD机器 – 我如何自动validation它是否正确(例如,接收某些收件人的传入SMTP连接,并将邮件放入某个Maildir中)?
我们已经使用了服务器监控软件(在这个系统中,Nagios),当然我们也做了手动testing,但是我想知道:有没有一些常用的方法可以在服务器服务上运行自动functiontesting?
我想到的一个例子是:在重新configuration我们的服务器(通常是为了testing而发生在虚拟机内部)时,我正在考虑
我想能够为其他服务执行一系列此类testing(例如,testing可以创build备份,testingIMAP服务器接受某些用户的连接,并列出正确的邮件)可能对testingconfiguration更改有用,或validation还原的系统备份是否按预期工作。
你可以使用期望与服务交互,例如
#!/usr/bin/expect -f set timeout 1 spawn telnet localhost 25 expect "220 *" send -- "helo localhost\n" expect -- "250*Hello\ localhost*" send -- "mail from: root@localhost\n" expect -- "250\ OK" send -- "rcpt to: root@localhost\n" expect -- "250\ Accepted" send -- "data\n" expect -- "354*" send -- "functional test\n.\n" expect -- "250\ OK*" send -- "quit\n" expect "221*closing\ connection"
像这样打电话给上面
/path/to/expect.script | grep -q "250 OK" if [ $? = 0 ] then echo "Message queued successfully" else echo "Message Failed to queue"
然后你可以继续查看消息是否正确地传递到邮件池或Maildir或其他东西。 您可以更改所选远程主机的本地主机,尽pipe如此,复杂的交付检查,但您可以始终使用期望login – 这是一个非常强大的工具。
这种testing可以或多或less容易地写成Nagiostesting(多么容易取决于所讨论的服务)。 请记住,Nagiostesting是一件简单的事情 ,至less是Nagios的接口,它只是一个返回定义明确的答案(返回代码和一些信息文本)的程序或shell脚本。
此外,还有许多模块已经可用于各种服务,请检查Nagios交换 。 你的邮件示例的解决scheme是这样的 。
我使用NAGIOS。
如果我对testing一个单独的函数感兴趣,这个函数构成了提供某种业务服务的链中的一个步骤,我testing:为了testingSMTP服务器,我将使用连接到端口25的SMTP插件,并寻找合适的旗帜; 同上一个IMAP服务器; 等等。
如果我有兴趣testing一个端到端的顺序,整个链条的成功或失败,我会检查它的成功完成。 为了testing你描述的一个链,我可能会有一个cron作业,每30分钟发送一个包含特定testingstring的邮件到一个特定的地址,我将有一个NAGIOS插件,在收件人邮箱中查找这个string,检查它是否定期更新。
通常情况下,我会这样做,所以如果端到端testing进入ALERT状态,我期望看到一个或多个中间步骤也进入了警戒状态 – 可能是SMTP接收器closures了,或者networking两者之间的链接失败了,或者光盘已经填满了接收器 – 这将给我提供调查端到端故障的第一条线索。 通常,我会将单个步骤testing和端到端testing分组到一个服务组中,以便快速方便地查看失败的组件。
但我相信个别的NAGIOS插件应该总是小而轻 。 所以请注意上面的端到端testing是如何testing链的最终成功或失败的; 它没有testing链条的步骤。 单个插件中的复杂性越高,意想不到的失败越多,我越可能从我的监控系统中获得误报(或者更糟糕的是,误报)。