一、測試計划
二、添加線程組
setUp線程組:執行測試計划時,在普通線程組前執行
tearDown線程組:執行測試計划時,在普通線程組后執行
線程組:普通線程組,組與組之間獨立運行
示例:
線程設置
取樣器錯誤后要執行的動作
繼續:忽略錯誤,繼續執行
啟動下一進程循環: 忽略錯誤,線程當前循環終止,執行下一個循環。
停止線程:當前線程停止執行,不影響其他線程正常執行。
停止測試:整個測試會在所有當前正在執行的線程執行完畢后停止
立即停止測試:整個測試會立即停止執行,當前正在執行的取樣器可能會被中斷。
線程屬性
線程數:並發測試,每個線程獨立完成測試計划;常用與模擬對服務器的並發訪問
Ramp-Up時間:啟動所有線程數 所需要的的時間,上一個線程與下一個線程啟動間隔時間=Ramp-Up時間/未總線程數 [僅在線程數>1時有效]
(示例:線程數5 Ramp-Up時間50 第二次線程在第一次線程啟動10s后啟動
循環次數:全部線程結束后的循環次數
Tips:壓測qps - 線程數設置30,請求10s,再請求20s,再請求30s,分別看下吞吐量
調度器配置
調度配置:循環次數勾選 永遠 時可以通過調度器控制線程執行時間
持續時間(秒):控制測試執行的持續時間(啟動線程后的執行時間),以秒為單位。(循環次數 優先級高於 持續時間)
啟動延遲(秒):控制測試在多久后啟動執行(例:30s,則啟動測試計划30s后執行此線程,循環次數永遠時延遲后啟動線程開始計算持續時間),以秒為單位。
三、添加參數變量的方法
說明:調試取樣器:線程組- 右鍵 - 添加 - 取樣器 - 調試取樣器(常用來查看Jmeter運行前后 的參數值是否為預期數據)
1、用戶參數:線程組 - 右鍵 - 添加 - 前置處理器 - 用戶參數
運行效果:
2、隨機變量:線程組 - 右鍵 - 添加 - 配置元件 - 隨機變量
運行結果:
3、用戶定義的變量:線程組 - 右鍵 - 添加 - 配置元件 - 用戶定義的變量
4、CSV 數據文件設置:線程組 - 右鍵 - 添加 - 配置元件 - CSV 數據文件設置 (從本地文件(格式:.csv .txt等)讀取)
運行結果:
5、BeanShell 設置變量
//設置變量 vars.put("case_id","case_00001");
執行結果
四、連接數據庫
1、引用jar包
oracle :引用JDBC驅動jar包;ojdbc14.jar 放到lib/ext下
mysql :引用mysql驅動jar包; mysql-contentor-java-8.0.18.jar 放到lib/ext下
2、連接Oracle
添加 JDBC Connection Configuration(線程組--右鍵--添加--配置元件--JDBC Connection Configuration)並配置
Database URL:
oracle:jdbc:oracle:thin:@IP:端口/名稱
mysql:jdbc:mysql:// 數據庫IP:端口/名稱
JDBC Driver Class:
Oracle:oracle.jdbc.driver.OracleDriver
mysql:com.mysql.jdbc.Driver;
3、添加JDBC Reques(線程組--右鍵--添加--取樣器--JDBC Request)
運行結果
五、http請求
1、 http請求默認值
用於設置其作用范圍內的所有HTTP的默認值,可被設置的內容包括HTTP請求的host、端口(不填寫默認為80)、協議等
-
-
- 作用范圍內,添加任一或多個http請求時可以省略web服務器的配置,獲取默認值
-
- 作用范圍內,如果其中http請求 有不一樣的ip或端口時http請求中的配置值優先獲取)
-
2、 HTTP信息頭管理器
用於定制Sampler發出的HTTP請求的請求頭的內容。不同的瀏覽器發出的HTTP請求具有不同的Agent,訪問某些有防盜鏈的頁面時需要正確的Refer...這些情況下都需要通過HTTP Header Manager來保證發送的HTTP請求是正確的
幾種常見的信息頭

Accept
作用: 瀏覽器端可以接受的媒體類型
例如: Accept: text/html 代表瀏覽器可以接受服務器回發的類型為 text/html 也就是我們常說的html文檔,
Accept-Encoding
作用: 瀏覽器申明自己接收的編碼方法,通常指定壓縮方法,是否支持壓縮,支持什么壓縮方法。例如:Accept-Encoding: zh-CN,zh;q=0.8
Accept-Language
作用: 瀏覽器申明自己接收的語言。
Connection
例如: Connection: keep-alive 當一個網頁打開完成后,客戶端和服務器之間用於傳輸HTTP數據的TCP連接不會關閉,如果客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的連接
例如: Connection: close 代表一個Request完成后,客戶端和服務器之間用於傳輸HTTP數據的TCP連接會關閉, 當客戶端再次發送Request,需要重新建立TCP連接。
Host(發送請求時,該報頭域是必需的)
作用: 請求報頭域主要用於指定被請求資源的Internet主機和端口號,它通常從HTTP URL中提取出來的
例如: 我們在瀏覽器中輸入:http://www.hzau.edu.cn
瀏覽器發送的請求消息中,就會包含Host請求報頭域,如下:
Host:www.hzau.edu.cn
此處使用缺省端口號80,若指定了端口號,則變成:Host:指定端口號
Referer
當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的,
服務器籍此可以獲得一些信息用於處理。比如從我主頁上鏈接到一個朋友那里,
他的服務器就能夠從HTTP Referer中統計出每天有多少用戶點擊我主頁上的鏈接訪問他的網站。
User-Agent
作用:告訴HTTP服務器, 客戶端使用的操作系統和瀏覽器的名稱和版本.
我們上網登陸論壇的時候,往往會看到一些歡迎信息,其中列出了你的操作系統的名稱和版本,
你所使用的瀏覽器的名稱和版本,這往往讓很多人感到很神奇,實際上,
服務器應用程序就是從User-Agent這個請求報頭域中獲取到這些信息User-Agent請求報頭域允許客戶端將它的操作系統、瀏覽器和其它屬性告訴服務器。
cookie
Cookie是用來存儲一些用戶信息以便讓服務器辨別用戶身份的(大多數需要登錄的網站上面會比較常見),
比如cookie會存儲一些用戶的用戶名和密碼,當用戶登錄后就會在客戶端產生一個cookie來存儲相關信息,
這樣瀏覽器通過讀取cookie的信息去服務器上驗證並通過后會判定你是合法用戶,從而允許查看相應網頁。
當然cookie里面的數據不僅僅是上述范圍,還有很多信息可以存儲是cookie里面,比如sessionid等。
Cache-Control
用來指定當前的請求/回復中的,是否使用緩存機制。
Content-Type
請求體的MIME類型 (用於POST和PUT請求中)
Expect
表示客戶端要求服務器做出特定的行為
3、HTTP Cookie管理器
用於管理Test Plan運行時的所有Cookie。像Web瀏覽器一樣存儲和發送Cookie。如果您有HTTP請求並且響應包含cookie,則Cookie管理器會自動存儲該cookie,並將其用於將來對該特定網站的所有請求。
JMeter檢查收到的cookie是否對URL有效,這意味着不存儲跨域cookie。
如果您有行為錯誤或希望使用跨域cookie,請定義JMeter屬性“ CookieManager.check.cookies = false ”
如果收到的Cookie可以存儲為JMeter線程變量。要將cookie保存為變量,請定義屬性“ CookieManager.save.cookies = true ”
cookie名稱在存儲之前以“ COOKIE_ ” 為前綴 要恢復原始行為;(這可以避免意外損壞局部變量),請定義屬性“ CookieManager.name.prefix = ”(一個或多個空格)。eg:引用變量時格式:$ {COOKIE_TEST}
您可以手動將Cookie添加到Cookie管理器;cookie將由所有JMeter線程共享
默認情況下,將忽略 具有空值的Cookie 。這可以通過設置JMeter屬性來更改:CookieManager.delete_null_cookies = false。(這也適用於手動定義的cookie - 任何此類cookie將在更新時從顯示中刪除)
cookie名稱必須是唯一的 - 如果第二個cookie使用相同的名稱定義,則它將替換第一個cookie
1、手動添加cookie到Cookie管理器
運行結果
2、cookie設置為Jmeter線程變量
定義屬性“ CookieManager.save.cookies = true ”
4、固定定時器
設定每個線程請求之前的等待時間(固定定時器的延時不會計入當前sampler 的響應時間里,但是會計入事務控制器的時間(相當於模擬用戶的思考時間))
5、BeanShell 后置處理程序
編寫代碼時注意每行代碼以分號結尾

FileWriter fstream=new FileWriter("D:\\testdata\\case.txt",true); BufferedWriter out=new BufferedWriter(fstream); out.write("打印數據" + vars.get("name_id")); out.close(); fstream.close();
6、響應斷言
對某個請求的結果進行判定
··
六、響應中提取信息
1、正則表達式提取

正則說明: . 表示除“\r\n”之外的任意字符 * 表示匹配前面的子表達式任意次 + 表示匹配前面的子表達式1次或多次 ? 表示匹配前面的子表達式0次或1次 .*:貪婪匹配原則,即匹配到不能匹配為止 .*?:非貪婪匹配,即在匹配成功的情況下盡可能少的匹配
2、邊界值提取
左邊界數據盡量唯一,否則會提取到重復數值
運行結果
七、控制器
1、循環控制器
控制控制器下內容的循環次數
運行結果
2、if控制器
判斷該控制器下的內容是否執行
運行結果
3、簡單控制器
沒有邏輯及運行判斷校驗,可當做分組、分類使用
4、僅一次控制器
在一個線程多次循環時,僅一次控制器中的內容只會執行1次
5、ForEach控制器
6、事務控制器
八 監聽器
1、查看結果樹
2、聚合報告
樣本:請求的次數,計算公式是線程數*循環次數,如果線程組配置勾選了永遠,那么就是你停止測試時實際發送的請求數 平均值:響應時間的平均用時,單位是毫秒。比如這里的平均響應時間是38毫秒 中位數:響應時間的中位數,單位是毫秒。 90%百分位:90%的響應時間小於該數值,單位是毫秒。這里有90%的響應時間小於22毫秒 95%百分位:含義和90%類似 99%百分位:含義和90%類似 最小值:本輪測試最小響應時間,單位是毫秒。 最大值:本輪測試最大響應時間,單位是毫秒。 異常%:本輪測試出現異常的請求比例。 吞吐量:可以理解為QPS,即是我們測試的接口處理請求的能力。比如這里是平均每秒可以處理2.2次請求 接收KB/Sec:響應數據的接收速率 發送KB/Sec:請求數據的發送速率

1、Lable:Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這里顯示的就是 Name 屬性的值;
2、#Samples:表示這次測試中一共發出了多少個請求,如果模擬10個用戶,每個用戶迭代10次,那么這里顯示100;【我的是用戶有100,只迭代一次,因此也是100】
3、Average:平均響應時間——默認情況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,也可以以Transaction 為單位顯示平均響應時間;
4、Median:中位數,也就是 50% 用戶的響應時間;
5、90% Line ~ 99% Line:90% ~99%用戶的響應時間;
6、Min:最小響應時間;
7、Maximum:最大響應時間;
8、Error%:本次測試中出現的錯誤率,即 錯誤的請求的數量/請求的總數;
9、Throughput:吞吐量——默認情況下表示每秒完成的請求數(Request per Second),當使用了 Transaction ;
10、Received KB/src:每秒從服務器端接收到的數據量;
11、Sent KB/src:每秒從客戶端發送的請求的數量。
3、圖形結果
樣本數目:總共發送到服務器的請求數.
最新樣本:代表時間的數字,是服務器響應最后一個請求的時間.
吞吐量:服務器每分鍾處理的請求數.
平均值:總運行時間除以發送到服務器的請求數.
中間值:時間的數字,有一半的服務器響應時間低於該值而另一半高於該值.
偏離:服務器響應時間變化、離散程度測量值的大小,或者,換句話說,就是數據的分布.
拓展
查看異常原因
連接數據庫遇到的問題
1、運行提示:Name for DataSoure must not be empty in JDBC Request
解決方法:檢查JDBC Connection Configuration和JDBC Request下的:Variable Name Bound to Pool是否一致
2、運行提示:Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'
解決方法:檢查或導入jar包( jar包只需要導入一次 )
ojdbc14.jar 或 ojdbc6-1.0.jar
3、錯誤代碼解釋
"100" : Continue "101" : witching Protocols "200" : OK "201" : Created "202" : Accepted "203" : Non-Authoritative Information "204" : No Content "205" : Reset Content "206" : Partial Content "300" : Multiple Choices "301" : Moved Permanently "302" : Found "303" : See Other "304" : Not Modified "305" : Use Proxy "307" : Temporary Redirect HTTP 400 - 請求無效 HTTP 401.1 - 未授權:登錄失敗 HTTP 401.2 - 未授權:服務器配置問題導致登錄失敗 HTTP 401.3 - ACL 禁止訪問資源 HTTP 401.4 - 未授權:授權被篩選器拒絕 HTTP 401.5 - 未授權:ISAPI 或 CGI 授權失敗 HTTP 403 - 禁止訪問 HTTP 403 - 對 Internet 服務管理器 (HTML) 的訪問僅限於 Localhost HTTP 403.1 禁止訪問:禁止可執行訪問 HTTP 403.2 - 禁止訪問:禁止讀訪問 HTTP 403.3 - 禁止訪問:禁止寫訪問 HTTP 403.4 - 禁止訪問:要求 SSL HTTP 403.5 - 禁止訪問:要求 SSL 128 HTTP 403.6 - 禁止訪問:IP 地址被拒絕 HTTP 403.7 - 禁止訪問:要求客戶證書 HTTP 403.8 - 禁止訪問:禁止站點訪問 HTTP 403.9 - 禁止訪問:連接的用戶過多 HTTP 403.10 - 禁止訪問:配置無效 HTTP 403.11 - 禁止訪問:密碼更改 HTTP 403.12 - 禁止訪問:映射器拒絕訪問 HTTP 403.13 - 禁止訪問:客戶證書已被吊銷 HTTP 403.15 - 禁止訪問:客戶訪問許可過多 HTTP 403.16 - 禁止訪問:客戶證書不可信或者無效 HTTP 403.17 - 禁止訪問:客戶證書已經到期或者尚未生效 HTTP 404.1 - 無法找到 Web 站點 HTTP 404 - 無法找到文件 HTTP 405 - 資源被禁止 HTTP 406 - 無法接受 HTTP 407 - 要求代理身份驗證 HTTP 410 - 永遠不可用 HTTP 412 - 先決條件失敗 HTTP 414 - 請求 - URI 太長 HTTP 500 - 內部服務器錯誤 HTTP 500.100 - 內部服務器錯誤 - ASP 錯誤 HTTP 500-11 服務器關閉 HTTP 500-12 應用程序重新啟動 HTTP 500-13 - 服務器太忙 HTTP 500-14 - 應用程序無效 HTTP 500-15 - 不允許請求 global.asa Error 501 - 未實現 HTTP 502 - 網關錯誤