我有以下场景:
正在使用 selenium 对应用程序进行功能测试。在界面上执行的一个操作会导致将电子邮件发送到特定地址,该地址可以手动设置为某个值。效果很好。现在,我希望我的 Selenium 测试能够检查该电子邮件。如何在不使用真实服务器的情况下实现这一点?我的意思是这必须是一个真正的服务器,但它必须监听本地主机并从 java 启动。我认为像 dumbster 或 greenmail 这样的工具不适合这里,是吗?根据我在文档中读到的内容,它们在运行的应用程序之外无法访问。
有这样的工具吗?
谢谢!
最佳答案
鉴于 SMTP 传送没有“服务质量”保证,应用程序的功能测试只需证明远程 MTA 接受了有效的 SMTP 消息,或者在最终重试后接受了有效的 SMTP 消息。一旦被 MTA 接受,应用程序就无法再控制多长时间或者是否可以将其交付到可由 MUA 获取或读取的商店。
也就是说,此测试最重要的部分是检查 MTA SMTP 响应。许多(但不是全部)5xx 响应可能被视为应用程序故障。同样,大多数 2xx 响应可能会成功。无论哪种方式都必须考虑 4xx 代码。不同的 MTA 响应消息的方式多种多样。更不用说某些代码是邮件传输聊天的一部分,应用程序可能需要稍后重试;从技术上讲,这并不是一个错误,除非在几个小时内进行了多次重试。
功能或发布测试可能更好地包括将测试消息发送到不止一种类型的 MTA,因为 SMTP 标准在 MTA 中以奇怪的方式实现,并且 SMTP 支持的应用程序可能必须采用这些 考虑到特性,而不是证明某些邮件确实已到达邮箱。
虽然您可以使用小型 SMTP 服务器将收到的电子邮件转储到文件中,您的测试框架将检查这些文件以确保其存在且“正确”,但问题在于这些消息到底如何呈现给测试的细节 - - 您最终不仅需要在应用程序和测试框架中实现 MTA 聊天,还需要一些 MUA 部分来根据某些标准验证消息。我不喜欢这个,因为无论如何你都不会真正测试这个应用程序。相反,您将测试 MTA 和测试支持代码!
关于java - 需要一个 SMTP 测试服务器进行集成测试(selenium),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25448425/