先介紹一下郵件協議SMTP的工作機制(連接和發送過程),用wireshark工具抓包進行分析,如下:
SMTP協議的工作機制(連接和發送過程):
1.建立TCP連接,並將郵件服務器地址給客戶端;
2.客戶端發送EHLO命令以標識發件人自己的身份,然后客戶端登錄郵件服務器;
3.客戶端先標示電子郵件的發件人發送MAIL命令,服務器端以OK作為響應,表明准備接收;
4.客戶端發送RCPT 命令,以標識該電子郵件的計划接收人,可以有多個RCPT行, 服務器端以OK作為響應,表示願意為收件人接收郵件;
5.客戶端用命令DATA發送數據;
6.以.表示結束輸入內容一起發送出去,服務器端並以OK作為響應;
7.客戶端結束發送,用QUIT命令退出,服務器端以Bye作為響應,表示結束;
了解了郵件協議SMTP的工作機制后,下面開始進行性能測試:
一、先安裝好郵件客戶端FoxMail,被配置好郵件服務器等信息;
二、使用LoadRunner錄制腳本
三、生成腳本,並優化腳本
Tasks目錄:
接收郵件腳本:
發送郵件腳本:
腳本分析:
1)整體上的分析,接收郵件操作和發送郵件操作在Tasks目錄分別生成一對.dat文件,打開.dat文件可以查看到附件的信息(附件類型、內容等);
2)接收郵件和發送郵件的腳本函數是一樣的,郵件協議的工作過程是:登錄到郵件服務器à發送消息à退出郵件服務器à釋放郵件服務器;
3)腳本優化(參數化)
四、執行測試
1)在Contorller場景壓力過程中,出現大量的報錯,如圖1:
查看日志,是由於用戶多登陸時,session連接數已經滿了,郵件服務器不允許重復登錄。當連接數滿的時候,需要清理一下。
2)在Contorller場景過程中,出現大量的報錯,如圖2,3:
這是由於郵件處理的原理是以隊列的形式發送的,當多用戶並發時,隊列阻塞,發送請求和服務響應會出現大量報錯信息,場景運行到12分30秒時響應時間沒了,此時所有的用戶已經處理完成。
3)啟動LR錄制時,工具先會判斷郵件服務器和客戶端之間的連接,是否有未接收的郵件顯示(因郵件客戶端設置不是時時接收郵件),錄制日志如圖4:
附錄:
附錄:
SMTP常用的響應
501——參數格式錯誤
502——命令不可實現
503——錯誤的命令序列
504——命令參數不可實現
211——系統狀態或系統幫助響應
214——幫助信息
220<domain>——服務器就緒
221<domain>——服務關閉
421<domain>——服務器未就緒,關閉傳輸信道
250——要求的郵件操作完成
251——用戶非本地,將轉發向<forward-path>
450——要求的郵件操作未完成,郵箱不可用
550——要求的郵件操作未完成,郵箱不可用
451——放棄要求的操作,處理過程中出錯
551——用戶非本地,請嘗試<forward-path>
452——系統存儲不足,要求的操作未執行
552——過量的存儲分配,要求的操作未執行
553——郵箱名不可用,要求的操作未執行
354——開始郵件輸入,以“.”結束
554——操作失敗
函數
使用SMTP函數
函數名 |
描述 |
smtp_logon[_ex] |
登錄到SMTP服務器 |
smtp_translate[_ex] |
轉換SMTP消息 |
smtp_send_mail[_ex] |
發送SMTP消息 |
smtp_free[_ex] |
釋放SMTP服務器,使其不處理命令 |
smtp_logout[_ex] |
從SMTP服務器注銷 |
|
|
使用POP3函數
每個POP3函數都以pop3前綴開頭
函數名 |
描述 |
pop3_logon[_ex] |
登錄到POP3服務器 |
pop3_command[_ex] |
想POP3服務器發送命令 |
pop3_retrieve[_ex] |
檢索POP3服務器上的郵件 |
pop3_list[_ex] |
列出POP3服務器上的郵件 |
pop3_delete[_ex] |
刪除服務器上的郵件 |
pop3_free[_ex] |
釋放POP3服務器,使其不處理命令 |
pop3_logoff[_ex] |
從POP3服務器注銷 |