2013-10-28 138 views
1

因此,我編寫了一個簡單的電子郵件服務,使用smtplib在用戶首次登錄時發送歡迎電子郵件。我想知道測試我的代碼的最佳方式是什麼。測試python smtp電子郵件服務

def send_email(nickname, email): 
    msg = MIMEMultipart('alternative') 

    config = read_config_file(MAIL_CONFIG_PATH) 
    sen = config.get('gmail_credentials', 'email') 
    pwd = config.get('gmail_credentials', 'password') 

    server = None 
    try: 
     server = smtplib.SMTP('smtp.gmail.com', 587) 
     server.ehlo() 
     server.starttls() 
     server.login(sen, pwd) 
     server.sendmail(sen, [email], msg.as_string()) 
     return 'Sent!' 

    finally: 
     if server: 
     server.quit() 

我發現,你可以使用一個假的SMTP服務器:

sudo python -m smtpd -n -c DebuggingServer localhost:25 

但是,我還是不知道我應該如何實現這樣的事情在我的代碼。如何更改我的API,以便在測試過程中運行SMTP服務器並連接到GMAIL服務器以進行實際調用?是否有初始化腳本會在我們的服務器上運行SMTP服務器(這將部署在AWS EC2上)。

回答

1

免責聲明:我工作的產品有問題,請注意這個答案可能包含偏見。

我共同創建了一個名爲Mailosaur的託管服務,允許開發人員(包括我們)在真實環境中(即通過網絡使用SMTP)測試此類流程。

你得到一個SMTP端點(也是無限的測試電子郵件地址,但你使用SMTP,所以不需要這個)。

該服務然後將電子郵件轉換爲JSON representation,您可以通過HTTP API獲取該電子郵件。

爲了使查詢更容易一些,可以使用客戶端綁定(可用於Java,.NET和Ruby),但您可以使用常規curl或任何其他HTTP客戶端(或者聯繫我們,我們很樂意放在一起的Python客戶端)。

最後的測試過程是: -

  1. 通過SMTP發送郵件至smtp.mailosaur.in(沒有必要改變從/到地址)
  2. 查詢該API:

    curl https://mailosaur.com/v2/emails?mailbox={mailbox}&key={api_key} 
    
  3. 你的定期斷言(僞代碼):

    assert.equal(3, email.attachments.length, 'Expected 3 attachments'); 
    assert.contains('https://verify-url', email.html.links, 'Expected link to verification url'); 
    
0

我有同樣的問題:發送電子郵件應用程序,我要檢查他們這樣做正確沒有濫發一羣真實的人有各種形式incompletenese的電子郵件。

我使用PostHoc它使用SMTP接收電子郵件,但只是顯示在Web瀏覽器中發送的電子郵件。

這是在GitHub上的:https://github.com/agilepro/posthoc

這裏是一個博客帖子是這樣描述的:https://agiletribe.wordpress.com/2017/07/24/posthoc-testing-apps-that-send-email/

我不跑一個真正的SMTP服務器的原因是,這些服務器被設計成真正找到並將郵件發送給收件人。我想用真實的電子郵件地址和真正的郵件列表來測試應用程序。我希望看到真實情況能夠得到處理,並且我想驗證發送的每封電子郵件是否應該如此。我想要所有這些,但我想成爲當然沒有電子郵件實際交付。

多年來,我在應用程序中切換到將電子郵件重定向到不同的地址,我可以在那裏看到電子郵件。但是,由於應用程序的運行方式與生產中的不同,因此這仍然存在問題。使用PostHoc,應用程序將運行,正如一樣,我仍然可以安全地查看發送的所有電子郵件。

PostHoc要求TomCat運行它,但沒有別的。

我喜歡5天后自動刪除所有舊郵件的方式。 5天之後,我從來沒有必要看到其中的一封電子郵件,所以我從來不需要對它進行清理。

相關問題