1. 程式人生 > 其它 >二、jmeter-基本操作及場景設計--jmeter基本操作

二、jmeter-基本操作及場景設計--jmeter基本操作

指令碼設計前提:

    1.jmeter中,做功能測試、自動化測試時,你可以使用 Beanshell元件,但是,在**效能測試**中,能不用,堅決不要用帶有任何Beanshell。如果你要寫java指令碼,也不要使用Beanshell任何元件,JSR223 開頭元件,jmeter可以支援: java、jython、python、groovy、js
       beanshell   元件替換,為何替換:相比於BeanShell 取樣器,JSR223取樣器+groovy指令碼具有可大大提高效能的功能(編譯),同時支援更多的指令碼語言,其中包括BeanShell指令碼,所以在編寫指令碼時不建議使用BeanShell 取樣器
    2.效能測試,要儘可能的降低jmeter**工具自身**對資源消耗
    3.為何自動化指令碼不能做效能:介面測試、自動化測試指令碼,一定會新增**斷言**,斷言的目的是判斷,是否有bug,斷言這個元件在執行時,資源消耗,來自jmeter工具的資源,這個時間和資源的消耗,都是本機的,不是伺服器消耗的時間和資源      

常用操作:

    1.變數:

         使用者定義變數:  位置:配置元件—新增;作用域:作用於整個‘**測試計劃**’,全域性變數,可跨執行緒組;在啟動執行時,獲取一次值,在執行過程中,不會動態獲取值,在執行過程中,值一直都不變(不可實時變化,可用於值不變的引數)
         使用者引數:     位置:前置處理器–新增; 作用域:作用於當前執行緒組或當前的取樣器,區域性變數;在啟動執行時,獲取一次值,在執行過程中,還會動態獲取值(區域性變數不可跨取樣器)----怎樣修改為全域性變數,參考下文
         格式:         定義格式:var_user: 1888888888;     引用變數格式: ${var_user}  -----$字串的拼接

    2.函式:
         Tools–函式對話方塊,如果一個函式引數包含一個逗號,那麼一定要用”\”來轉義,否則JMeter將把它作為一個引數分隔符。
         備註:下文只介紹幾個常用函式,其餘函式自行查詢學習
                       
          ${__setProperty(set_per,${per},)}:作用:設定**屬性函式**,設定jmeter的動態屬性;在第一個執行緒組獲取資料,轉為公共資料,第二個執行緒組呼叫上面的公共資料                
            2.引數全域性變數設定:https://blog.csdn.net/BaiXuePrincess/article/details/103933969                                                 

                例項:解決問題:變數值如何跨執行緒組使用
                解決方案:${__setProperty(global_cooike,${set-cooike},)}  將set-cooike設定為全域性變數,名稱為global_cooike                                                                                               
                適用場景:跨執行緒組呼叫引數值,將上一個執行緒組值通過函式設定為全域性變數,通過—P函式獲取使用
                關聯操作:取樣器:BeanShell 取樣器:將set-cooike設定為全域性屬性,做功能測試可使用該取樣器,做效能測試不可使用該取樣器,太耗效能
                JSR223 Sampler:  將set-cooike設定為全域性屬性,做效能測試可使用該取樣器
                涉及函式:${__property(global_cooike,)};${__P(global_cooike,)}                                    

          ${__P(,)} **獲取屬性函式**
          ${__property(,,)} **獲取屬性函式**,可以簡單理解,P 只是property這個函式的簡寫
           
        
                               

                           

          ${__V(,)拼接函式 :  例項:V(可變)功能返回評估可變名稱表示式的結果
                           解決問題:${var_${__counter(,)}}  -----通過函式拼接計數器,我們**期望**它得到過程是${var_1}  ${var_2} ${var_3} ,但是僅僅2個函式拼接達不到預期結果                                                                                         
                           解決方案:${__V(var_${__counter(,)},)}   通過__V函式拼接
                           使用場景:var_1  var_2  字首相同,字尾是遞增數字的變數名稱,常見於 jdbc從資料庫中獲取資料時

                                                                



     3.邏輯控制器:邏輯控制器可以控制取樣器(samplers)的執行順序。由此可知,控制器需要和取樣器一起使用,否則控制器就沒有什麼意義了。放在控制器下面的所有的取樣器都會當做一個整體,執行時也會一起被執行。
                 效能測試指令碼中,會使用邏輯控制器,但是,使用了邏輯控制器,並不是混合場景。混合場景,是 不同數量的併發使用者,發起不同介面請求
                 分為2類:控制測試計劃執行過程中節點的邏輯執行順序;
                         對測試計劃中的指令碼進行分組、方便JMeter統計執行結果,以及進行指令碼的執行時控制等

                 常用控制器:簡單控制器(Simple Controller),迴圈控制器(Loop Controller),僅一次控制器(Once Only Controller)可與迴圈控制器一起使用 ,ForEach控制器(ForEach Controller),
                           事務控制器(Transaction Controller),if條件控制  ,Critical Section Controller 臨界控制器,吞吐量控制器  ,swith 控制器 ,隨機控制器,隨機順序控制器

     4. 屬性:以.properties結尾的檔案,都是jmeter的屬性配置檔案;屬性是什麼?是jmeter**工具自身**帶有的標籤
            jmeter工具屬性:jmeter屬性:可能被改變;+ 靜態屬性: 寫在properties檔案中屬性資訊,都是靜態屬性;    + 動態屬性:執行過程中,動態定義屬性;動態屬性,是在執行過程中產生的,關閉jmeter,就是自動釋放了。
                                                  系統屬性: os、jdk  ===這個系統屬性資訊,**是不可改變**
            屬性  vs 引數 \ 變數  區別:屬性是jmeter工具具有,所有,jmeter中的執行緒組要使用屬性,都可以使用;    + 引數、變數,有侷限訪問
            順序:+ jmeter中,多個啟用執行緒組,在執行時,**預設是並行執行**,先到先執行;檢視結果樹中的顯示順序是,根據**收到響應的先後順序**顯示,jmeter中**取樣器的執行順序**:在沒有邏輯控制器控制時,
                  順序是**從上往下**,不管多少人併發,每個執行緒使用者都是從上往下執行。會出現 取樣器的執行順序與 檢視結果樹中的顯示順序不一致。

         
     5. 響應值提取:Json提取:1.在取樣器上右鍵 > 後置處理器 > json提取器;
                            2. 當確定響應資訊為json格式時,我們**優先**選擇用 json提取器提取我們響應的資訊,+ $.根路徑.二級路徑 json提取式 ----絕對路徑寫法+ $..末梢節點名稱 -----相對路徑寫法, **推薦**(防止路徑名寫錯)

                  正則提取:     如果想要提前請求中內容、響應的頭部內容、或者響應體格式非json格式,這些使用 優先選擇 **正則提取器**
                               提取方式:在取樣器上右鍵 > 後置處理器 > 正則提取器;+ 正則提取式: 左邊界(正則式)右邊界 萬能正則式: .*?       
                                       + 除換行符之外,都可以匹配    參考文件:響應頭資料  https://blog.csdn.net/QWERTY55555/article/details/96428481

                                                                                  
     6.資料引數化-ddt
                                  1)  CSV 資料檔案設定   讀取csv,txt 檔案資料作為引數                   每迴圈一次讀取一次資料(設定併發數/迴圈控制器–進行遍歷資料)

                                                 

                                   2)連結資料庫讀取資料                          2.1執行sql語句–不帶傳參                           2.2執行sql語句–帶傳參

                                                                



        

      7.fiddle 如何執行執行python指令碼
             1)執行指令碼python指令碼: BeanShell 取樣器:通過cmd命令執行python指令碼
                String command = "cmd /c start python D:\\test.py";   
                Runtime rt = Runtime.getRuntime();
                Process pr = rt.exec(command);
            2)執行python程式碼—只支援python2                                                         
               JSR223 Sampler------執行程式碼                                                           正則表示式提取器------獲取對應值
                                               
                           3)執行python指令碼,獲取對應值

                              OS程序取樣器 ------通過執行  .bat檔案,執行程式碼

                              test.py  需要將獲取的值打印出來

                              print("222222")



                                .bat檔案      @echo off    -----作用:https://blog.csdn.net/fly_as_tadpole/article/details/85177379

                                 cd C:\Users\huixiaoer\Desktop\jmeter\ &python test.py



                           正則表示式提取器------獲取對應值       ----正則詳解:https://blog.csdn.net/u011391839/article/details/107406836

                            * 匹配0次或多次,如圖應該為(.+)匹配1次或多次,確保有數值

                         

    8.fiddle抓jmeter包:https://www.cnblogs.com/wintest/p/11779186.html