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 資料庫是一個記憶體資料庫,但是,這個資料庫,不支援多執行緒併發