jmeter腳本語言
A. 技巧分享-12周-Jmeter和Gatling體驗結果
以前公司壓力測試都不使用Jmeter和Gatling工具測試,最近需要尋找更加好用壓力測試工具。所以有了半天的體驗結果
通過自己學習和實踐來跟大家分享Jmeter和Gatling的使用體驗
一天使用過程,可能很多地方沒有涉及到。
但是Gatling花了好幾個小時才成功發起壓力測試,Jmeter只花不到1個小時就搞定。
所以最後還是主推Jmeter。
Jmeter
所有操作和配置都在UI界面上操作即可,不需要學習其他內容。而且支持中文。
Gatling
基本是通過gatling.sh/bat執行Scala腳本來完成壓力測試。
壓力測試所有設置都需要通過scala腳本設置
scala腳本如下
注意: 網路很多教程的語法都就舊版本,執行會報錯。主要是以下幾個點
1、baseURL 重新命名為 baseUrl
2、silentURI 重新命名為 silentUri
3、asJSON 重新命名為 asJson
3、over 重新命名為 ring
Jmeter
通過插件Jmeter可以支持以下最主要功能
結果分析
TPS
響應時間
硬體資源監控
報文響應結果
Gatling
Gatling跟Jmeter對比缺少TPS和硬體資源監控,提供如下數據
交易響應時間、平均每秒吞吐量、最大/最小/平均響應時間
響應時間分布圖
百分比響應時間分布
每秒請求次數
每秒響應次數
總體來說
1、Jmeter分析結果會更加符合目前測試需求(查閱資料,TPS目前好像沒有),而且不需要單獨學習另外一份腳本語言
2、目前gatling中文資料還是比較少,主要去看官網的。
B. jmeter和Loadrunner 對比
jmeter和Loadrunner一樣,都是通過中間代理,監控和收集從客戶端發出的指令,生成腳本,發送到應用伺服器,再監控伺服器反饋結果的 一個過程。
Lr:商業工具,基於C語言,檢查點通過 web_reg_find,關聯web_reg_save_param,參數化每次迭代,每次更新,唯一,same line as ,date/time uniqnumber interator number ,vuser id,可以手動設置事務,支持IP欺騙,分布式把依賴包和文件放到腳本根目錄,自動發送到agent
jmeter,開源工具,基於java語言,關聯 後置處理器正則提取器,參數化 CSV jdbc request,用戶自定義 ,random randomstring group counter timer,斷言,不支持IP欺騙,分布式是把jmeter文件到agent上
C. JMeter 腳本技術(參數化)
前面我們已經學習過用 Badboy 錄制 webtours 網站 的注冊腳本,錄制下來的腳本可以直接回放並注冊成功一個新用戶(前提是錄制腳本時創建的用戶要先清除,系統用戶名有唯一性)。
如果我們想保留之前注冊成功的用戶,然後繼續創建新的用戶,這種情況應該如何操作呢?大家可能想到去改腳本,把之前注冊用戶時填寫的用戶信息改成新用戶的信息。一個用戶可以這樣操作,但要注冊10個,100個,1000個新用戶呢?
大家想想都應該知道不可能每注冊一個用戶時都去修改一次腳本,這樣牛都會累死的。
我們平時錄制的腳本內容都是固定死在腳本里的,每次運行腳本時使用的是同樣的數據。那我們有沒有辦法把這些「死」的腳本救「活」呢?這個就是我們接下來要學習的腳本參數化。
在操作之前我們先來看看提交用戶注冊信息的請求。
上圖圈出來的內容就是用戶注冊時填寫的信息,我們需要對這部分的內容進行參數化。參數化其實就是把腳本里具體的內容改成調用變數的方式。
既然我們知道了操作的方向,那如何調用變數呢?變數我們現在還沒創建,創建變數有多種方式,可以在測試計劃下創建全局變數,也可以在用戶參數下創建用戶變數,還可以在配置元件下創建數據 CSV 數據文件導入變數。
在這里,我們只學習平時用得比較多的一種方式,在配置元件下添加 CSV 數據文件導入變數。下面我們來看一下配置選項:
名稱: 自定義,給該元件起個名字。
注釋: 自定義,一般寫改元件的作用。
文件名: 表示參數文件存放的路徑,文件不一定是 CSV 格式文件,可以是 CSV 文件 ,也可以是 txt 文件,如 d: est.txt 。這個配置項在 JMeter 一些低的版本裡面是沒有右邊的 瀏覽 按鈕選擇文件的,只能手寫文件路徑。
文件編碼: 讀取文件時的編碼格式,如果為空的話則為本地系統默認的編碼方式,Windows 默認是 GBK,Linux 默認是 UTF-8。
變數名稱: 參數名字,如果有多個就用英文狀態下的逗號分隔,如 name,password 。如果參數名稱為空, JMeter 會默認將參數文件的第一行值作為參數名字,從第二行開始調用參數值 。
忽略首行: 忽略 CSV 文件的第一行,只在上一項變數名稱不為空時使用,如果變數名為空,則第一行必須包含頭信息。
分隔符: 一般標準的 CSV 文件都是採用的逗號作為列分隔符,這里只需要和參數文件的分割方式匹配即可。
是否允許帶引號?: 是否允許參數中包含被引用的值。這個是什麼意思呢?其實 JMeter 允許引用欄位中包含 分隔符 ,如逗號,但引用的欄位要用雙引號括起來。舉個栗子: 1,"2,3",4 ,這樣表示1是一個整體,2,3是一個整體,4是一個整體。另外, JMeter 還允許引用欄位中包含雙引號,如果要包含雙引號請使用 兩個 雙引號 。再舉栗子: "5""6",7 ,這樣表示5"6是一個整體,7是一個整體。
遇到文件結束符再次循環?: 當讀取到參數文件的最後一個值時,是否允許循環取值?
遇到文件結束符停止線程?: 當讀取到參數文件的最後一個值時,是否停止線程?這個配置項和上一個配置項只能有一個是 true。
線程共享模式: 共享模式,設置線程或者線程組對於參數文件的共享方式。有四種共享方式,默認是所有線程共享一個參數文件。
學習了上面的配置操作後,我們來創建一個 CSV 文件並且把腳本中要使用的數據都准備好。
接著,把 CSV 數據文件設置選項設置好。
設置完成後,接下來要做的是導入 CSV 文件並且調用數據到腳本中使用,在 JMeter 裡面調用變數格式是 ${變數名稱} 。
設置腳本循環運行4次,看看能否調用到 CSV 文件數據。
從上圖可以看出,腳本居然能調用到 CSV 文件的數據,說明腳本已經實現了參數化。
D. jmeter 支持python語言嗎
python可以調度運行,但不能直接開發jmeter腳本
E. 使用jmeter做介面測試,怎麼驗證,核對響應結果中json的內容
Json 作為一種數據交換格式在網路開發,特別是 Ajax 與 Restful 架構中應用的越來越廣泛。而 Apache 的 JMeter 也是較受歡迎的壓力測試工具之一,但是它本身沒有提供對於 Json 數據的響應處理。本文中假設需要從 HTTP 的響應頭中返回的 Json 格式的數據流中抽取某些特定的數據,數據格式如下:{"name":"Simpsons family","members":[{"firstName":"Homer", "lastName":"Simpson"},{"firstName":"Marge", "lastName":"Simpson"},{"firstName":"Bart", "lastName":"Simpson"},{"firstName":"Lisa", "lastName":"Simpson"},{"firstName":"Maggie", "lastName":"Simpson"}]}下面我們使用不同的方法來進行數據的抽取工作:正則表達式提取JMeter 安裝了正則表達式插件之後,可以按照固定的格式從字元串中提取數據,而本例中正則表達式如下所示:"firstName":"(.+?)"使用了該表達式之後會返回所有服從表達式的字元串,但是只有一個表達式是我們所關注的。可以使用$1$ 來作為模板,而 3 則會返回第三個數據。當偶爾需要對Json數據進行處理時,正則表達式是一個合適的選擇,它的一個優勢在於JMeter本身就內置了Json處理模塊。但是,閱讀處理正則表達式卻是比較復雜的,特別是對於某些復雜的Json數據。JMeter JSON 插件另一種處理 Json 數據的方法是使用 JMeter 的插件,該插件可以使用 JSONPath 來獲取 JSON 數據中特定位置的數據。類似於 XML 文件中的 XPath , JSONPath 可以使用簡單的表達式來操作 Json 對象。 JSON Path Extractor 是一個開源的增加了 post處理器的插件,可以將該插件的 Lib 文件拷貝到 JMeter 的 lib 目錄下即可。而上文中提及的需要定位的數據可以使用如下的JSONPath 進行描述:$.members[2].firstName在 JMeter 中,只需要從 PostProcessor 菜單中打開 JSON Path Extractor 然後輸入變數名與默認值即可,如下所示:JSONPath 表達式較短並且易於閱讀,能夠有效提高測試腳本的易維護性,該插件並不隨著標準的 JMeter 一起安裝。BeanShell Post Processor最後一種方法即是借用了 JMeter 的對於 BeanShell 支持的特性, BeanShell 是一個輕量級的面向 Java 的腳本語言。 BeanShell Post Processor 允許使用標準的 Java 語法來處理 Json 數據,使用方法如下圖所示:總結本文列舉出了三種可用的從 Json 格式的返回值中提取數據的方法,正則表達式對於簡單的 Json 格式的數據的快速標准化非常占優勢。而 JsonPath 插件可以用於創建能夠被維護修改的腳本,但是需要額外的插件安裝工作。而最後的帶 JSON 庫的BeanShell 確實非常詳細並且依賴於 Java 語言的靈活性可以進行進一步的開發。
F. selenuim,qtp,loadrunner,jmeter有何區別,想學個腳本語言python和測試工具應該從哪裡入門呢。
selenium和qtp是 功能的自動化測試,loadrunner和jmeter是性能的自動化測試
selenium要求代碼能力比較高,適合用python,QTP一般用VBS,loadrunner一般用C,但是現在也可以用java等語言.
現在功能自動化用的工具最多的是QTP,但是selenium的趨勢在增長,建議用這個工具
G. JMeter之代理伺服器錄制腳本
在JMeter中可以使用自身就帶的HTTP代理伺服器組件錄制腳本,可以錄制在WEB上的操作,也可以錄制在手機App上的操作。
1、測試計劃內包含的元件
添加元件操作步驟:
創建測試計劃
創建線程組:選中「測試計劃」右鍵 —> 添加 —> 線程(用戶) —> 線程組。
在線程組中,添加配置原件「HTTP Cookie管理器」組件:選中「線程組」右鍵 —> 添加 —> 配置元件 —> HTTP Cookie管理器。
說明:如果錄制的操作包括 用戶登錄操作 ,則需要添加「HTTP Cookie管理器」,添加之後不需要任何配置,錄制後,腳本中便保存用戶登錄的相關信息。
在測試計劃下,添加非測試元件「HTTP代理伺服器」組件:選中「測試計劃」右鍵 —> 添加 —> 非測試元件 —> HTTP代理伺服器。
在HTTP代理伺服器組件下,添加監聽器「察看結果樹」組件:選中「HTTP代理伺服器」右鍵 —> 添加 —> 監聽器 —> 察看結果樹。
最終測試計劃中的元件如下:
點擊運行按鈕,會提示你先保存該腳本,腳本保存完成後會直接自動運行該腳本。
2、HTTP代理伺服器的設置內容
在HTTP代理伺服器組件中,我們需要編輯:
埠: 默認8888,一般使用默認即可。主要不能與本地其他服務的埠號沖突,否則啟動不了。
HTTPS Domains: 我的理解就是,設置代理伺服器的主機IP地址或者域名。因為在我們本地使用,一般就是 localhost 或者127.0.0.1即可,當然不填寫也是可以的。(此填寫的地址一定要能夠連接外網)
設置目標控制器: 也就是錄制的組件存儲到什麼位置。這個一定要選,下圖中選擇了存儲到目標線程組中。
配置完的界面內容,如上圖所示。
3、設置瀏覽器的代理伺服器
每個瀏覽器都可以設置伺服器的代理,以Chrome瀏覽器為例。【設置需要區分是否為區域網】
點擊右上角的設置 —> 高級 —> 系統 —> 最下面的『』打開您計算機的代理設置『』,點擊右側圖標,就可以進入到代理伺服器的設置頁面了。
選要選中手動配置代理伺服器,然後輸入代理伺服器的地址或者域名,還有埠號。
這里的配置,要和上面JMeter的HTTP代理伺服器中的埠和HTTPS Domains的配置要對應上。
這樣的話,瀏覽器中的操作,會先發送到JMeter中的HTTP代理伺服器,在通過網路進行傳輸。這樣JMeter中就可以錄制下我們的操作,生成腳本了。
如下圖所示:
4、錄制腳本
以上內容設置完畢後,在瀏覽器地址欄中輸入要錄制腳本的地址。
然後在JMeter中的HTTP代理伺服器界面,點擊啟動按鈕。
提示:在HTTP代理伺服器界面點擊「啟動」時,Meter將生成自己的證書。證書生成可能需要一些時間,在此期間,GUI將無響應。證書生成完成後,GUI將顯示一個彈出對話框,其中包含根CA證書的詳細信息,證書有效期為7天。該證書需要由瀏覽器安裝,以便接受JMeter生成的主機證書。
如下圖所示:
瀏覽器配置證書: 瀏覽器中導入證書 ,jmeter安裝目錄下的ApacheJMeterTemporaryRootCA.crt
之後開始在網站上進行操作,所有操作發出的請求,都會錄制到JMeter腳本中。
操作完成之後,到JMeter的HTTP代理伺服器中點擊「停止」,然後將瀏覽器的代理設置恢復原樣即可。
不恢復的話,會導致你無法使用瀏覽器訪問外網。
如下圖所示:【錄制時彈出的控制器,不用進行設置,關閉時 點擊 停止 即可】
5、查看錄制的腳本
在JMeter中我們可以看到已經 記錄 了許多請求對應的信息,包括PHP、js、.jpg、.png、.txt等請求。
如下圖所示:
我們可以看到,我們只進行了簡單的幾步操作,卻錄制這么的請求。是因為JMeter錄制很多非關鍵性的請求,這就需要我們進行一些優化。
錄制腳本的優化有兩個步驟:
在錄制的時候,做一些過濾和排除操作。
在錄制後的腳本中手動優化,刪除不需要的組件,增加自己需要的組件。
1)伺服器名稱或IP與目標網站不同的、無關的,可以刪除。
2)js/css/png/jpeg等這類請求刪掉。
3)沒有傳遞任何數據的請求可以屏蔽掉,等流程能回放成功了,這些再刪除。如果回放不成功,再一個一個打開,進行檢查。
6、HTTP代理伺服器的排除模式
在測試腳本中有一些錄制的信息是沒有任何作用的,所以我們在錄制腳本的時候,就可以通過HTTP代理伺服器的排除模式,排除一些不需要的請求信息,如css、gif、png等請求。
例如:
在包含模式添加填上 .*\.jsp,只在請求JSP文件時錄制腳本。
這里通常都是設置JSP或者HTML,可以根據具體情況進行填寫。
在排除模式處填上.*\.js ,在請求js文件時不錄制腳本。
這里通常都是設置js、jpg、png、gif、css等,這些類型文件請求都是不需要錄制的。
當然我們也可以點擊添加建議排除按鈕,會自動生成一個過濾的正則表達式。
如下圖所示:
添加上這些時候,錄制出來的腳本,多餘的累贅會減少很多。
7、保存腳本
腳本錄制完成後,需要進行腳本的保存。
把腳本保存到本地,可以分享給其他成員,進行查看、編輯、回放等操作。
H. http返回的數據是json格式 jmeter怎麼斷言
如我們要斷言返回值的json中
{"name":"Simpsons family","members":[{"firstName":"Homer", "lastName":"Simpson"},{"firstName":"Marge", "lastName":"Simpson"},{"firstName":"Bart", "lastName":"Simpson"},{"firstName":"Lisa", "lastName":"Simpson"},{"firstName":"Maggie", "lastName":"Simpson"}]}
中members的第三條firstName的值等於Bart
則添加一個jp@gc - JSON Path Assertion斷言
JSON Path 輸入框填寫$.members[2].firstName
Expected Value 輸入框填寫 Bart
I. 如何用java代碼實現一個類似,jmeter的beanshell腳本/postman運行腳本的功能(解析字元串運行代碼)
beanshell是可以自由適用的腳本語言啊,你可以在你的項目中引入,具體方式請閱讀
beanshell官方文檔
