AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 479865
Accepted
Frerich Raabe
Frerich Raabe
Asked: 2013-02-19 00:48:10 +0800 CST2013-02-19 00:48:10 +0800 CST 2013-02-19 00:48:10 +0800 CST

(如何)您自动对您的服务运行“功能”测试?

  • 772

考虑一台运行 SMTP 服务器的简单 FreeBSD 机器——我如何自动验证它是否在做正确的事情(例如,接受某些收件人的传入 SMTP 连接,并将邮件放入某个 Maildir)?

我们已经使用了服务器监控软件(在这个 cas 中,Nagios),当然我们会进行手动测试,但我想知道:是否有一些通用的方法可以对服务器服务运行自动功能测试?

我在想什么的一个例子:当重新配置我们的服务器时(通常发生在 VM 内部用于测试目的),我正在考虑

  1. 将一些手动制作的 SMTP 会话通过管道传输到 netcat,它连接到我们服务器的 SMTP 端口,然后
  2. 在服务器上运行某种“验证”脚本,确保预期的断言成立(例如:具有预期内容的新文件出现在服务器上,创建日志条目等)。

我想象能够为其他服务执行一系列此类测试(例如,测试是否可以创建备份、测试 IMAP 服务器是否接受某些用户的连接并列出正确的邮件)可能对测试配置更改很有用,或者用于验证还原的系统备份是否按预期工作。

smtp
  • 3 3 个回答
  • 632 Views

3 个回答

  • Voted
  1. Sven
    2013-02-19T01:03:58+08:002013-02-19T01:03:58+08:00

    这种测试或多或少可以很容易地编写为 Nagios 测试(容易程度取决于所讨论的服务)。请记住,Nagios 测试是一件简单的事情,至少是 Nagios 的接口,它只是一个返回定义明确的答案(返回代码和一些信息文本)的程序或 shell 脚本。

    此外,已经有许多模块可用于各种服务,请查看Nagios exchange。您的邮件示例的解决方案是this。

    • 4
  2. Best Answer
    user9517
    2013-02-19T02:34:05+08:002013-02-19T02:34:05+08:00

    您可以使用expect与服务进行交互,例如

    #!/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"
    

    然后您可以继续查看邮件是否已正确传送到 mailspool 或 Maildir 或其他任何地方。您可以为您选择的远程主机更改 localhost,虽然这会使交付检查复杂化,但您始终可以使用 expect 登录 - 这是一个非常强大的工具。

    • 3
  3. MadHatter
    2013-02-19T02:44:50+08:002013-02-19T02:44:50+08:00

    我使用 NAGIOS。

    如果我有兴趣测试一个单独的功能,它形成了提供某些业务服务的链中的一个步骤,我会测试:要测试 SMTP 服务器,我将使用连接到端口 25 的 SMTP 插件并寻找一个合适的横幅;同上 IMAP 服务器;等等。

    如果我对测试端到端序列、整个链的成功或失败感兴趣,我将检查它是否成功完成。要像您描述的那样测试链,我很可能有一个 cron 作业,每 30 分钟将包含特定测试字符串的邮件发送到特定地址,并且我将有一个 NAGIOS 插件在收件人邮箱中查找该字符串,并且检查它是否定期更新。

    通常,我会两者都做,所以如果端到端测试进入警报状态,我希望看到一个或多个中间步骤也进入警报状态——可能是 SMTP 接收器已关闭,或者网络两者之间的链接失败,或者接收器上的光盘已满 - 这将为我提供调查端到端故障的第一条线索。通常,我会将单独的步骤测试和端到端测试组合到一个服务组中,以便快速轻松地查看失败的组件。

    但我相信单个 NAGIOS 插件应该总是小而轻的。所以请注意上面的端到端测试如何只测试链的最终成功或失败;它对测试链的步骤没有任何作用。单个插件越复杂,就越有可能以意想不到的方式失败,然后我就越有可能从我的监控系统中得到误报(或更糟的是,漏报)。

    • 2

相关问题

  • Postfix 或 exim:自动/程序化和转发电子邮件设置

  • 如何将 SMTP 直接从 IIS 6.0 服务器中继到 Exchange 2003 服务器

  • 使用 telnet 或 netcat 发送带有附件的电子邮件

  • 我应该使用什么策略在 linux 上安装 smtp 服务器?用于多线程服务

  • 适用于 Linux 的 SMTP 服务器,配置简单

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve