效能工具之Jmeter一個指令碼的編寫與除錯案例
引言
最近接到一個任務,需要寫一個Jmeter指令碼,指令碼需要“登入”後從返回值獲取Cookies,然後從第一個介面的返回引數中提取有用的id,在第二個介面請求的時候使用這個id,從而完成測試。然而這個看似簡單的測試用例的編寫並不是很容易,還經歷了一些有趣的除錯。
第一個問題
開始,完成了登入介面的編寫,但是返回非常奇怪,我把JMeter返回的內容存入HTML中,頁面如下:

報錯的原因是json的字串沒有經過規格化,如: json.loads() ,後嘗試做了如下操作:
-
Multipart/form-data的基礎方法是POST,也就是說是由POST方法來組合實現的。
-
Multipart/form-data與POST方法的不同之處在於請求頭和請求體。
-
Multipart/form-data的請求頭必須包含一個特殊的頭資訊 : Content-Type , 且其值也必須規定為multipart/form-data,同時還需要規定一個內容分割符用於分割請求體中的多個POST的內容,如檔案內容和文字內容自然需要分割開來,不然接收方就無法正常解析和還原這個檔案了。
-
Multipart/form-data的請求體也是一個字串 , 不過和post的請求體不同的是它的構造方式 , post是簡單的name=value值連線,而Multipart/form-data則是添加了分隔符等內容的構造體。
請求的頭部資訊如下:

這裡因為 Content-Type 已經有要求了,需要把這一項去掉。
這樣登入介面就除錯成功了。
第二個問題
剛鬆了一口氣,結果第二個問題出現了,第二個請求返回報錯,如下:這明顯是一個長連線的問題。

正常的客戶端訪問,不會出現這樣的情況,因為正常通訊的情況下,服務端主動關閉,客戶端連線也會釋放掉。但是JMeter中,服務端主動關閉,他根本就不理會。那麼有沒有JMeter中實時主動關閉的辦法那?
去掉勾選Use KeepAlive,連線就不會複用,這樣也就不存在空閒超時,被服務端幹掉的情況了。但帶來的是效能的開銷,因為tcp每次都要關閉然後重建。

到此為止,這個Jmeter指令碼就調通了,從中學習到了不少的知識,感謝左澤位同學提供的線上幫助。
【宣告】:上文為本站編輯轉載,文章版權歸原作者所有。文章內容為作者個人觀點,本站只提供轉載參考,目的在於傳遞更多專業資訊,普惠測試相關從業者,開源分享,推動行業交流和進步。如涉及作品內容、版權和其它問題,請原作者及時與本站聯絡,我們將第一時間進行處理。本站擁有對此宣告的最終解釋權!