我想爲一些自定義的Django電子郵件後端編寫unittests,並測試它對「真正的」smtp服務器,我試圖使用Python的內置smtpd調試服務器運行:如何從Python的smtp調試服務器捕獲輸出
python -m smtpd -n -c DebuggingServer localhost:1025
我的單元測試基本上是這樣的:
class Tests(TestCase):
@override_settings(EMAIL_BACKEND='mycustombackend')
@override_settings(EMAIL_HOST='localhost')
@override_settings(EMAIL_PORT='1025')
def test_backend(self):
from django.core import mail
mail.send_mail(
subject='Subject here',
message='Here is the message.',
from_email='[email protected]',
recipient_list=['[email protected]'],
fail_silently=False,
)
,當我運行此,該smtpd的過程中,電子郵件的內容正確輸出。
但是,當我嘗試捕獲它,以便我可以在我的單元測試中確認它時,我什麼也得不到。我試過使用subprocess
包來啓動進程並通過管道讀取輸出,但它從來沒有收到任何輸出。
我想我是用錯誤的子進程,所以作爲最後的手段,我試着啓動過程有:
python -m smtpd -n -c DebuggingServer localhost:1025 > /tmp/smtpd.log
和讀取日誌文件。但是,即使如此,也沒有輸出寫入文件。
這是怎麼回事嗎?