最近在論壇上的一些朋友問腳本方面的問題,比如用lr的winsock協議錄制的腳本遇回放過程中遇到如下錯誤
Action.c(20): Error : callConnect - Can't assign requested address. Error code : 10049.
Action.c(20): Error : Timeout expired while trying to connect. Error code : 9017.
這里的10049是udp協議錯誤,是腳本沒有和服務器同步,這說明什么問題呢。下邊我用一個協議進行分析,來看看到底是什么問題,
smtp協議分析:
1.SMTP工作方式有兩種情況:一是電子郵件從客戶機傳輸到服務器;二是從某一個服務器傳輸到另一個服務器.
2.SMTP是個請求/響應協議,命令和響應都是基于ASCII文本,并以CR和LF符結束。響應包括一個表示返回狀態的三位數字代碼.
3.SMTP在TCP協議25號端口監聽連接請求
4.連接和發送過程:
a.建立TCP連接
b.客戶端發送HELO命令以標識發件人自己的身份,然后客戶端發送MAIL命令
服務器端正希望以OK作為響應,表明準備接收
c.客戶端發送RCPT命令,以標識該電子郵件的計劃接收人,可以有多個RCPT行
服務器端則表示是否愿意為收件人接受郵件
d.協商結束,發送郵件,用命令DATA發送
e. 以.表示結束輸入內容一起發送出去
f.結束此次發送,用QUIT命令退出。
5.另外兩個命令:
VRFY---用于驗證給定的用戶郵箱是否存在,以及接收關于該用戶的詳細信息。
EXPN---用于擴充郵件列表。
6.郵件路由過程:
SMTP服務器基于‘域名服務DNS中計劃收件人的域名來路由電子郵件。SMTP服務器基于DNS中的MX記錄來路由電子郵件,MX記錄注冊了域名和相關的SMTP中繼主機,屬于該域的電子郵件都應向該主機發送。
若SMTP服務器mail.withub.org收到一封信要發到pcl@withub.org
a.Sendmail請求DNS給出主機withub.org的CNAME記錄,如有,假若CNAME到mail.withub.org,則再次請求mail.withub.org的CNAME記錄,直到沒有為止.
b.假定被CNAME到mail.withub.org,然后sendmail請求@withub.org域的DNS給出mail.withub.org的MX記錄,
shmail MX 5 mail.withub.org
10 shmail2.withub.org
c. Sendmail最后請求DNS給出shmail.withub.org的A記錄,即IP地址,若返回值為1.2.3.4
d. Sendmail與1.2.3.4連接,傳送這封給pcl@withub.org的信到1.2.3.4這臺服務器的SMTP后臺程序
這里是協議的一個解析過程,我們要看看,利用lr錄制腳本后然后回放,錄制的過程中mail.withub.org返回客戶端服務器上有多少給用戶的郵件,lr把這個數字保存下來,最為下次回放的時候對比。當你第二次回放的時候,lr模擬客戶端發送請求,這時候服務器上沒有了新郵件,返回可能是0,lr把這個返回值和當時錄制的腳本保存的返回值進行對比(那個時候可能服務器上有3個新的郵件,服務器返回的值是3),明顯這個值是動態變化的。你的腳本如果沒有經過修改,肯定是回返不成功的。
那么上邊提到的錯誤信息,同樣的道理,我們要分析一下到底是什么問題,從協議上分析,從系統環境上分析。
解決方法,動態關聯
1.用同樣的用戶操作同樣的步驟兩次,然后用lr工具wdiff進行腳本對比,找出不同的地方!
2.用lr自動關聯
3.手工關聯,找到要替換的動態數據進行替換
文章來源于領測軟件測試網 http://www.kjueaiud.com/