午休時間再來記一記,嗯。。回顧着使用Jmeter的歷程,想着日常都會用到的一些功能、一些組件;敲定了本篇的主題----------是的、腳本優化。
說起腳本優化,為什么要優化?又怎么優化?是個永恆的話題。因為畢竟每個人的精力不同、業務不同、需要不同;但是可以肯定的是,但凡有做自動化之類(騷操作),那么便離不開一個概念。什么呢?-------腳本與數據分離
何謂“腳本與數據分離”?
所謂腳本與數據分離,可以舉一個簡單例子,2016年,具體不清楚是什么時間,在逛微博的時候,看到德國的一條殺雞流水生產線,以一小時殺5000多只雞的速度而聞名(具體是不是世界第一,就不糾結了,只是舉個例子),而工作人員只需要在生產線的開始階段將活雞扔進去,直接就可以去流水線的結束段收獲成果,質量是非常之高,活雞進去,出來的都是一塊一塊的雞腿、雞脖子、雞頭、雞爪(當然是洗干凈的,哈哈);OK,回到本主題,腳本與數據分離也是這個道理,流水線我不動,至於它是怎么工作的,提前設計好就OK,只需要扔原料即可,因此,此處的腳本便可以理解成流水線、而數據源便可以理解成雞啦。怎么動數據無所謂,流水線(腳本)都是按照設計來進行執行的(哈哈、可能舉的例子有點抽象,但是大概意思明白就OK)。
當然,現今,腳本與數據進行分離已經成為自動化的基本要求;除此之外,還有一個“業務與腳本分離”,這個概念以后再記。
那么Jmeter如何實現“腳本與數據分離”呢?
Jmeter經過這么多年的發展,豐富的組件完全可以滿足此要求。
OK,還是百度的例子!
可以看到,我模擬了一個參數user並傳入123進行請求;
請求中user參數以及傳入的123是發過去了,暫時忽略請求的成功與失敗。
那么,我再添加一個請求,baidu--首頁--2;給user的參數傳入321;
其他的協議,服務器名稱,端口號,路徑都一致;
可以看到321也傳成功了;
那么,在請求中那些一直的部分很繁瑣,一個兩個請求可以進行手動寫,那么幾百個呢?
放心、Jmeter有處理這方面的組件。
是的,就是它嘍,可以看到它和HTTP請求的界面幾乎一般無二,但是實現的功能確實完全不一樣的;
我們將baidu--首頁--1和baidu--首頁--2,兩個HTTP請求中共同的地方提取了出來,放入HTTP請求默認值中,唯一沒變的是它的傳參,請求一下試試,看看監聽器的內容
吶、都是POST請求,https://www.baidu.com/
因此,完全可以實現,簡化腳本、簡化工作量的目標。
截止此步,一個http協議的Jmeter腳本優化便完成了。
那么,又回到剛剛的問題,不是“數據與腳本分離”么?這么看來也並沒有實現數據與腳本分離嘛。。
Jmeter讀取本地的文件(支持最好的是csv文件)也有很豐富的插件,暫且提一種方式進行讀取外部文件,其余的后續會做逐一記錄。
是的,就是它CSV Data Set Config
Filename:文件名(包含路徑)
Fileencoding:文件編碼格式
variable name(comma-delimited):變量名---默認以下方的逗號分隔符進行分隔
Ignore first line (only used if variable names is not empty):忽略第一行(僅在變量名稱不為空時使用);忽略CSV文件的第一行,只有在變量名不為空時才使用,如果變量名為空,則第一行必須包含標題。
Delimiter(user【\t】for tab):分隔符
Allow quoted data?:CSV文件是否應該允許引用值?如果啟用,則值可以被括在“ - 雙引號 - 允許值包含分隔符。
Recycle on EOF?:文件是否應該從EOF開始重新讀取?(是否循環讀取)(默認是true)
stop thread on EOF?:在EOF停止線程?如果回收錯誤,則再EOF處停止線程
sharing mode:共享模式;所有線程 - (默認)文件在所有線程之間共享;
當前線程組 - 每個文件為其中顯示該元素的每個線程組打開一次
當前線程 - 每個線程分別打開每個文件
標識符 - 共享相同標識符的所有線程共享相同的文件。因此,例如,如果您有4個線程組,則可以使用兩個或多個組的共同ID來共享它們之間的文件。或者,您可以使用線程號在不同線程組中的相同線程號之間共享文件。
很多人會忽略這部分內容,當然具體的用法,以及場景后續記。
外部csv文件內容
HTTP請求默認值、HTTP請求中引用方式
OK,看運行結果
與上方是完全一致的,如此呢,我們就達到了一個“數據與腳本分離”,雖然說簡單了點,沒有業務邏輯的處理、判斷條件等,但是目的也已經達到了。
服務器配置信息,協議、地址、端口號、請求參數、等等都可以進行在外部文件中進行更改,完全可以不用更改腳本;雖然此處的腳本可能太過於簡單了點,但是無非就是說明一個道理,Jmeter是可以完成這部分工作的,相信在特別大的系統中,你能看到Jmeter這部分效果的。
OK,還有大把大把的工作等着俺處理、、、、今天就先記到這塊。