DDT資料驅動效能測試(一)

無名。。。發表於2022-04-24

DDT資料驅動效能測試(一)

一、csv資料檔案設定

1、使用場景:測試過程中需要使用手機號碼等大量資料時,用random函式隨機生成數字;也可以使用Excel拖動生成一批手機號,也有可以從資料庫中匯出一批手機號,把準備好的資料,放到txt檔案,或者csv檔案中,使用csv資料檔案設定直接呼叫。

2、txt檔案、csv檔案:都是文字檔案,只是csv檔案是用逗號分割列的文字檔案

3、使用csv資料檔案設定,建議使用 txt檔案,有兩點原因

  3.1 csv檔案被開啟時,佔用的系統資源要多於txt,從效能測試角度分析,要儘可能使用不會影響到效能得檔案

  3.2 csv檔案預設使用Excel來編輯,Excel的預設儲存檔案編碼不是utf8,那麼,在檔案中有中文的時候,可能就會出現中文亂碼

 

4、檔名:線上程組中新增csv資料檔案設定後,必須匯入檔案,因為檔名為空,jmeter工具就會報錯,整個指令碼就不能執行

  4.1 相對路徑:相對的起始點

    4.1.1 jmeter的bin資料夾 ----這個是jmeter的指令碼預設的儲存路徑

    4.1.2 jmx指令碼儲存的路徑

  4.2 csv檔案放置位置:放在jmx路徑相同的位置,相對路徑使用'.\'反斜槓

    4.2.1 這個.\ 可以在linux系統中被使用------也就是說,這個路徑可以跨平臺(相容window、 mac、linux)

    4.2.2 做效能測試時,我們的jmx指令碼可能要放到linux 系統中來執行,所以,我們建議這個相對路徑的 斜槓 用 '.\'

  4.3 在使用CLI命令進行效能測試時,建議把csv的檔案放在 jmeter命令執行的位置

 

5、變數名稱:定義的變數名稱,會接收對應列的值,啟動執行,就會從第一行開始取值,預設: 如果你啟動執行之後,會迴圈執行多次,那麼,就會自動的從第一行開始往下取值,如果總的執行次數,超過我們檔案行數量,就會從第一行開始,再從上往下取值。 多個變數名稱之間,用固定逗號來分割

 

6、忽略首行:選擇 false不忽略首行; true忽略首行,從第二行開始

 

7、分隔符: 預設為“,”這個是csv的預設分割符合 這個可以根據你自己的檔案中的分割符來改變。

 

8、遇到檔案結束符再次迴圈?(T1):預設為TRUE

  8.1 檔案結束符:檔案的最後一行的結束標記

  8.2 true:是的,我會繼續迴圈,從頭開始迴圈,檔案第一行;false:停止迴圈

 

9、遇到檔案結束符停止執行緒?(T2):預設false

  9.1 停止迴圈:停止做某件事情,不再從檔案開頭進行迴圈

  9.2 false 不,我不會停止指令碼的執行;true 是的,我會停止指令碼的執行

 

10、T1+T2

  10.1 T1 true + T2 false == 不會停止執行,繼續執行,又從頭開始取值。

  10.2 T1 true + T2 true === 發生衝突,導致T2無效,會繼續執行,從頭開始迴圈

  10.3 T1 false + T2 true ===我會停止執行,T1也沒用了

  10.4 T1 false + T2 false ===不會停止執行,T1就一直在最後一個空值 上迴圈

 

11、執行緒共享模式

  11.1 所有執行緒: 所有的併發使用者都共享一個csv檔案,所有執行緒取這個檔案中的值的時候,迴圈取值

  11.2 當前執行緒組: 只在這個執行緒組內共享檔案資料

  11.3 當前執行緒: 執行緒組中每個執行緒都有一個獨立csv檔案

  11.4 後置處理器、csv資料檔案設定等等一些元件中定義的變數,都是 jmeter 的引數變數,不能直接跨執行緒組。

 

二、邏輯控制器

1、邏輯控制器是用來控制指令碼執行的邏輯順序,控制的主體為取樣器

2、if條件控制:if條件滿足才會去執行下面的取樣器

  2.1 預設請求下,必須使用jexl3 或 groovy這個函式,把表示式的結果計算出來,為真,才執行邏輯控制器下的取樣器,如果為假,則不執行,輸入框填寫計算式:${__groovy(${jcode} == 0,)}

  2.2 去掉 Interpret condition as variable expression的核取方塊,輸入框填寫表示式{jcode} == 0

3、foreach控制器:對一個明確列表資料來進行迴圈

  3.1 使用場景一:後置處理器提取出多個值的時候,多個值,就會自動帶上_數字

  3.2 使用場景二:用一個變數來接收,從資料庫中返回資料,當這個變數的值有 多個時,這個變數名稱後面也會跟上_數字,你要用這些值。

4、迴圈控制器:控制取樣器執行次數

5、僅一次控制器:啟動執行之後,每個執行緒只會執行一次

6、事務控制器

  6.1 jmeter中,預設,一個取樣器執行一次請求,就是一個事務

  6.2 jmeter中,也可以通過事務控制器,把多個介面合併在一起,發起 一次完整的請求,當做一個事務。

  6.3 用jmeter做介面的效能測試, 先對單介面進行效能測試,然後,再 試多介面構成業務進行效能測試, 再多業務一起效能測試,系統的效能測試。

    6.3.1 全鏈路:發起請求的資料流的各個環節都需要測試。

      6.3.1.1 常規理解:使用jmeter先對1個介面進行測試,再擴充套件到2-3個,最後慢慢的把整個產品中, 非常多個多的介面,都進行效能測試,對於中小微企業,或者完全還沒有效能測試部門的公司,這就是全鏈路測試

      6.4.1.2 真正意義上的全鏈路:多個介面都需要做效能測試;對應伺服器的各個環境,都需要進行監控;流量回放;壓測工具 ;全鏈路監控;全鏈路效能分析

 

三、其他協議指令碼編寫

1、soap協議 = = http協議 + xml資料

  1.1 用jmeter寫soap協議指令碼, 使用http取樣器 + xml,資料放在訊息體資料中

  1.2 soap協議介面版本 1.1版本與1.2版本的區別

    1.2.1 訊息頭: 1.1中 SOAPAction, Content-Type不一樣

    1.2.2 請求體中,節點的標籤名不一樣

 

2、jdbc協議:java語言連線資料庫執行sql的api介面協議

  2.1 jmeter呼叫jdbc協議: 需要資料庫的驅動

    2.1.1 瞭解資料庫的型別dbms: mysql、oracle、 postgresql、sqlite

    2.1.2 獲取java語言呼叫資料庫的驅動包:通過maven倉庫

      2.1.2.1 http://mvnrepository.com/ 搜尋mysql

      2.1.2.2 確認自己的mysql的版本:如果自己的mysql版本為5.7.x的版本,你的驅動包,可以選擇大於等於資料庫版本的包;如果你的mysql是8.x的版本, 你選擇的驅動包, 就要與你的資料庫版本一致

    2.1.3 把下載的驅動包,放到jmeter的lib\ext資料夾中,然後,重啟 jmeter

    2.1.4 jmeter連線mysql資料庫

      2.1.4.1 資料庫的ip、port、賬號、密碼

      2.1.4.2 在jmeter中,新增資料庫配置資訊:JDBC Connection Configuration

          Variable Name for created pool: 自定義

          DatabaseURL(mysql寫法):jdbc:mysql://msyql_ip:port/dbname

          JDBC Driver class:當你的資料庫版本為5.7.x版本,可以直接 選擇 com.mysql.jdbc.Drvier;資料庫版本為8.x版本: com.mysql.cj.jdbc.Driver

          使用者名稱,密碼

    2.1.5 執行sql指令碼 -----取樣器

      2.1.5.1 jdbc request

          pool: 填寫Configuration中自定義 pool名稱

          SQL Query: 寫指令碼

            query type: select statement

    2.1.6 SQL Query:在執行查詢語句時不建議查全表,因為jmeter影像介面工具,預設只能支援10m的響應;檢視結果樹中,預設只會顯示最新的500響應,超過了會導致 jmeter卡死,後面程式有部分資料會看不到;在jmeter.properties配置檔案中可以修改但是不建議改,因為,我們效能測試不用影像介面,也不用檢視結果樹。

      2.1.6.1 編寫sql時這個結尾的分號可以不寫,因為,jmeter預設不支援 一個取樣器中寫多個sql

      2.1.6.2 怎麼定義變數來接收資料庫查詢結果:如果想使用特定的引數,則將不使用的引數用一個逗號隔開

      2.1.6.3 在sql中引用變數:1、直接變數引用 ${變數} ---這種用法,可能存在安全風險不建議使用;2、使用 ? 來佔位,佔用一個變數引用的位置:parameter values: 填寫 ${變數};parameter type: 填寫 varchar, 如果要傳入整數 integer;注意: query type 修改為 prepared select statement ;帶有 prepared 開頭是在指令碼中,可以傳入引數;多個變數時,用逗號分割 

  2.2 sqlite資料庫

    2.2.1 是一個關係型資料庫,這個資料庫,只需要你有影像介面系統,然後有瀏覽器, 這個資料庫在你電腦裡已經應用。

    2.2.2 使用:下載jar檔案 mvn倉庫中下載-放入jmeter的lib\ext資料夾, 重啟jmeter

    2.2.3 JDBC Connection Configuration:pool: 自定義;DatabaseURL: jdbc:sqlite:sqlitefile.db;Drvier class: 選擇 org.sqlite.JDBC;賬號密碼: 空

    2.2.4 這個資料庫,不用建庫,只需要建表;sqlite 資料庫是一個記憶體資料庫,但是,這個資料庫,不支援多執行緒併發

 

   

相關文章