1. 程式人生 > 其它 >jmeter非GUI執行介面自動化和效能自動化

jmeter非GUI執行介面自動化和效能自動化

一、 為什麼要非GUI執行jmeter指令碼?

在談論為什麼用非GUI執行jmeter指令碼前,先看看GUI執行指令碼會有什麼缺點?

  1. GUI頁面本身就是圖形介面,會佔用很多系統本身的資源,當長時間執行是,執行的結果佔用的記憶體就會很高。
  2. 既然是GUI介面,那就需要有頁面互動,如果沒有頁面互動,就沒有辦法執行,就會被限制
  3. 持續整合,當我們在jmeter中編寫好指令碼後,可以通過ant整合到jenkins集上,進而通過持續整合,持續部署。但是GUI介面無法做到。

基於以上幾點,在執行指令碼的時候,更多的時候選擇用非GUI執行

二、在GUI介面編寫指令碼

雖說我們執行的時候往往採用在非GUI頁面,但是在編寫指令碼的時候,還是會採用GUI介面,在我們啟動jmeter的時候,dos視窗會彈出一句話Don't use GUI mode for load testing !, only for Test creation and Test debugging.

,意思就是不要用GUI模式進行測試,他僅僅是編寫和除錯用的

  1. 啟動jmeter
    這裡講的啟動jmeter指的是在windows中,當我們下載好以後,不需要安裝jmeter,直接選擇目錄下的jmeter.bat雙擊即彈出上圖介面,如果看不到bat檔案,請把副檔名開啟在檢視
  2. 修改jmeter屬性
    在jmeter的bin目錄檔案下面有一個檔案jmeter.properties,該檔案就是jmeter的屬性檔案,很多需要修改的屬性都在該檔案裡面,比如我們剛開啟的檔案是英文的,將他修改為中文,只需要將language修改為language=zh_CN

    還有如果需要繼承到jenkins上的時候,需要修改輸出檔案的格式:
  3. 認識jmeter元件
    (1)當我們開啟jmeter的時候,預設的只有一個測試計劃,測試計劃可以理解成一個測試專案,整個專案的測試都可以包含在下面,有了測試計劃我們需要建立執行緒組,執行緒組理解為要模擬的使用者陣列成的集合
    (2)建立執行緒組,選擇測試計劃,右擊,選擇新增,選擇執行緒(使用者),選擇執行緒組,在最右邊看到執行緒組上面有很多其他的,除了三個中文的是jemter自帶的,其餘幾個執行緒組都是jmeter的擴充套件包引入進來的,setup執行緒組一般用來處理初始化的工作,比如登入,連結資料庫等,teardown執行緒組用來做收尾工作,斷開連結,退出登入等,其餘的業務操作都線上程組裡面,如果涉及到效能測試,一般選擇名稱為jp@gc - Stepping Thread Group
    執行緒組,本文采用第二種執行緒組

    (3)新增完成執行緒組後,同樣右擊新增,可以看到很多元件,有取樣器,邏輯控制器,前置處理器......一直到監聽器,在每個元件下面有很多元件,比如取樣器下面就有http請求,ftp請求,java請求,DebugSampler等等,在這些取樣器中,帶有jp@gc字樣的都是通過擴充套件包引進來的,jmeter本身不帶這些取樣器

    (4)元件作用域
    配置元件(config elements )
      元件會影響其作用範圍內的所有元件。
    前置處理程式(Per-processors)
      元件在其作用範圍內的每一個sampler元件之前執行。
    定時器(timers )
      元件對其作用範圍內的每一個sampler 有效
    後置處理程式(Post-processors)
      元件在其作用範圍內的每一個sampler元件之後執行。
    斷言(Assertions)
      元件對其作用範圍內的每一個sampler 元件執行後的結果執行校驗。
    監聽器(Listeners)
      元件收集其作用範圍的每一個sampler元件的資訊並呈現
    元件作用域滿足的原則
    1、取樣器元件單獨存在,不和其他元件相互作用
    2、邏輯控制器元件只對其子節點中的取樣器 和 邏輯控制器作用,就是他只管控他下面的部分
    3、除取樣器 和邏輯控制器 元件外,其他6類元件,如果是某個sampler的子節點,則該元件公對其父子節點起作用
    (5)元件執行順序
    在同一作用域的條件下滿足如下要求
    (1)配置元件(config elements )
    (2)前置處理程式(Per-processors)
    (3)定時器(timers )
    (4)取樣器(Sampler)
    (5)後置處理程式(Post-processors
    (6)斷言(Assertions)
    (7)監聽器(Listeners)
    如果在同一作用域範圍內有多個同一型別的元件,則這些元件按照它們在測試計劃中的上下順序一次執行。
    (6)指令碼編寫
    指令碼編寫,我們以3D投注作為例項,涉及到介面有:登入獲取新期獲取playid投注等4個介面,其中前三個介面互不關聯,第四個介面需要前三個介面的返回值作為入參
    a、線上程組右擊選擇取樣器,然後選擇http請求,新增請求後,可以看到什麼都沒有,需要我們自己輸入介面資訊,包括請求方式,請求路徑,請求內容,如下:

    b、再新建一個http請求,輸入我們的獲取新期的介面

    c、再次新建一個http請求,獲取playid的介面

    d、最後我們新增投注的介面

    在上面介面中,我們一定看到一些引數是由${}樣式組成的,這就是下面要講到的引數化
    (7)引數關聯
    登入介面不管在任何系統中,都是我們的入口,往往會返回一個token,或者類似token的值給我們,以方便後續介面拿token去用,執行登入介面,觀察返回值看到有一個data的值,這個值就需要我們把它取出來儲存起來,方便後面介面呼叫
    (8)介面用例的維度

    那麼如何取出這個data呢?取出data值的方法有很多種,比如json提取器,邊界提取器,正則表示式等等。這裡用的是json提取器


    本例中json提取器:

    為了驗證json表示式寫的是否對,能否正確提出data的值儲存到token中,可以新增除錯取樣器

    在除錯取樣器中發現token有值,經核實可以確定就是我們登陸返回的data值,
    jsonpath語法

    (9)斷言
    jmeter中斷言也有很多種方法,最常用的斷言就是json斷言,斷言主要從兩方面去考慮
    1、響應碼斷言,響應斷言就是斷言協議碼,例如響應正確200等
    2、業務碼斷言,例如新增成功的後臺斷言碼是1001,則需要斷言響應結果中是否含有1001
    3、業務斷言,新增一本書籍,則需要斷言這本書籍是否新增成功,就需要查詢資料庫等驗證
    (10)非GUI介面執行
    通過GUI介面執行指令碼,一般是在命令列中輸入命令來執行,命令格式為:
    jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
    但是如果用上述命令執行jmeter,首先必須得配置jmeter的環境變數。
    環境變數新增方法:
    1、在系統變數中新增JMETER_HOME
    JMETER_HOME=D:\Downloads (就是jmeter儲存的路徑)
    2、在系統變數中新增CLASSPATH
    CLASSPATH=%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;
    3、在用系統變數path後面加上%JMETER_HOME%\bin ,儲存即可
    配置好jmeter的環境變數後,則可以通過jmeter直接在命令列啟動jmeter,前提是已配置好JDK環境
    -n: non gui mode,代表非命令列模式
    -t:testplan,代表測試計劃,-t後面的引數就是jmeter指令碼檔案
    -l:儲存測試結果的檔案和路徑
    -e:測試結束後,生成測試報告
    -o:指定測試報告的存放位置,必須不存在 ,否則執行會失敗
    例項:
    jmeter -n -t D:\Downloads\apache-jmeter-5.3\tests\niriliya.jmx -l D:\Downloads\apache-jmeter-5.3\tests\report\jtl\result.jtl -e -o D:\Downloads\apache-jmeter-5.3\tests\report\html
    (11)持續整合
    持續整合需要ant和jenkins工具,ant的環境配置參考文章連結: Jmeter之ant環境配置,接下來就是整合到jenkins中,這裡需要用到build.xml檔案,不再贅述

期待各位支出文章的不足之處,忘各位小夥伴不吝賜教,一起探索測試之旅,vx:806026945