Jmeter基礎功能回顧
一、創建Jmeter腳本
1、錄制新建
(1)適用群體:初學者
2、手動創建
(1)需要了解Jmeter的常用組件
元件:多個類似功能組件的容器(類似于類)
各元件作用
組件:實現獨立的某個功能(類似于方法)
組件示例
二、接口壓力測試請求的創建
壓測前需要保證接口的功能是正確的,壓測才是有效的。
接口常用請求方式:
- 1、post
- 2、get
- 3、put
- 4、delete
取樣器
三、壓力測試請求中的數據傳遞
在接口請求的過程中,接口之間會有數據傳遞的功能。例如:系統登錄的功能,請求登錄的接口,一般給返回給用戶一個token的字段,token會有有效期,在有效期內,用戶所有的請求帶上這個token字段,服務器 就會知道是哪一個用戶做的請求。
關聯:
當請求之間有依賴關系,比如一個請求的入參是另一個請求返回的數據,這時候就需要用到關聯處理。
Jmeter常用的關聯方法:
1、JSON提取器
JSON提取器
2、XPATH提取器
XPATH提取器
3、正則表達式提取器
正則表達式提取器
四、壓力測試中的結果斷言校驗
斷言:讓程序自動判斷預期結果和實際結果是否一致。
Jmeter常用斷言:
1、Response Assertion
2、JSON Assertion
五、利用Beanshell生成測試數據
1、Beanshell script邏輯生成數據
2、Java代碼邏輯生成數據
六、全局變量與CSV數據導入
1、User Defined Variables
2、CSV Data Set
七、壓測結果數據解讀
1、聚合報告
2、請求/響應結果樹
3、Debug Sampler
被壓測實戰應用簡介與搭建
一、實戰應用簡介
1、被壓測應用:訂餐網(模擬電商應用)
2、常見業務場景:登錄,瀏覽,選擇餐館,添加購物車,下訂單,訂單瀏覽,...,等
3、目標:通過對該網站的壓測,學習、體會實際業務場景中壓測工具的使用方法
4、練習項目源碼位置:https://github.com/princeqjzh/meican
5、運行環境:Java+mysql+maven
6、說明:例子程序中部分功能做了mock,使用的時候不用關注例子程序返回數據的正確性
二、實戰應用設置與啟動
1、例子程序啟動過程:
(1)將git源碼克隆到本地磁盤
(2)將項目中的sql/e_menu.sql導入MySQL數據庫,創建項目數據
(3)在src/main/resources/hibernate.cfg.xml中配置MySQL DB的用戶名、密碼;
(4)項目編譯、構建
(5)啟動、運行Web應用程序
三、實戰應用設置-MySQL
1、使用MySQL客戶端工具(navicate),初始化數據庫
2、執行SQL語句導入功能,運行項目中的e_menu.sql語句
3、Demo-數據導入
導入SQL數據
導入成功
四、實戰應用設置-Java
1、Java配置:版本1.8
2、安裝包
下載路徑:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
3、命令安裝
CentOS:yum install java-1.8.0-openjdk* -y
Ubuntu:apt-get install oracle-java8-installer
Mac:brew cask install java
4、解壓安裝
(1)將JDK運行程序直接解壓縮到本地路徑,然后配置環境變量
(2)JAVA_HOME=<jdk root path>
(3)export PATH=$PATH:$JAVA_HOME/bin
5、Java環境安裝正確驗證
驗證Java是否安裝成功
五、實戰應用設置-Maven
1、Maven:下載依賴與程序編譯、打包、運行
2、下載:
(1)下載位置:http://maven.apache.org/download.cgi
(2)下載文件:zip或者tar格式壓縮包,帶bin字樣的表明是可以直接運行的二進制文件
下載
3、Maven安裝和環境變量配置
(1)將安裝包解壓到本地路徑,然后配置環境變量
(2)export M2_HOME=/xxx/xxx/apache-maven-x.x.x
(3)export PATH=$PATH:$M2_HOME/bin
4、驗證Maven是否安裝成功:
(1)mvn -v
5、 加速依賴包下載方法,在setting.xml中提那家阿里云鏡像
<mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url></mirror>
五、實戰應用設置-開發工具(自行選擇)
1、開發工具?Intellij Idea:
(1)外觀、字體修改
(2)啟動鼠標滾輪放大縮小字體
(3)隱藏顯示一些可以不看的文件或文件夾,比如:target
六、實戰應用設置-參數
1、配置應用中的數據庫連接信息:host,port,user,password
2、參數設定位置:src/main/resources/hibernate.cfg.xml
3、配置參數
<property name="connection.url">
jdbc:mysql://localhost:3306/e_menu?serverTimezone=GMT
</property>
<property name="connection.username">root</property>
<property name="connection.password">ymx0607!</property>
七、實戰應用-啟動項目
1、編譯
若編譯后無run configurations,
2、啟動項目:
若編譯后無run configurations,選擇方法二、三
(方法一)雙擊上圖選中的e_menu,就可啟動項目
(方法二)命令行運行
mvn tomcat7:run
(方法三)直接把編譯后的e_menu.war 放到之前裝好的tomcat的webapps目錄下
3、訪問:http://localhost:8080/e_menu/userlogin/login.jsp(默認密碼:admin admin)
壓測腳本的編寫
一、壓測業務規劃
1、梳理常用業務場景
2、盡量真實的模擬用戶行為,讓壓測結果更貼近真實結果
3、正常與異常用例場景都需要被覆蓋到
4、壓力測試涉及的業務內容:
(1)首頁
(2)登錄
(3)瀏覽飯店列表
(4)選擇飯店
(5)添加購物車
(6)提交訂單
(7)查看訂單
5、業務場景規劃
正常:登錄成功的場景
異常:登錄失敗的場景
二、編寫前準備:
1、被壓測頁面URL獲取方法
(1)問研發(依賴別人)
(2)抓包(依賴自己)
(3)讀代碼(主要依賴自己)
2、組織測試業務參數
(1)新建用戶(添加數據)
(2)梳理測試商戶數據
(3)梳理測試商品數據
3、也測業務流程控制
(1)預計接口訪問次數
(2)不同接口的分流比例
(3)數據傳遞位置(參數?響應payload?Header?Cookie?)
三、編寫壓測腳本
1、抓包獲取壓測接口
四、壓測流程圖
五、構造壓測腳本
注意:
1、先安裝插件:Random CSV Data Set
2、腳本在項目jmx下
腳本
整體設計思路:
1、有兩個場景:登錄成功、登錄失敗,基于對業務的了解,做了分配的數據。分配的比例,是通過rate隨機變量去設置的。假設:60%登錄成功,40%登錄失敗。
2、選擇飯店是隨機循環的,通過循環控制器實現,訪問1次或多次
3、公共信息放在用戶定義的變量中,菜品信息放在Http Cookie管理器
4、查看結果樹和聚合報告查看運行結果
壓測實施簡介與后續安排
一、壓測實施
1、制定壓測策略,不同的并發數10,15,20,25,30...
2、記錄結果
3、測試期望結果
(1)驗證能夠支撐多大并發數,峰值數
(2)驗證錯誤率,定義可接受范圍,<=0.1% or <=0.5% or must=0%
4、驗證壓測目的:尋找系統性能點
二、后續安排
1、壓測具體操作過程
2、實施過程可以配合性能監控平臺進行壓測監控
3、自動化壓測執行并發數的壓測實施
4、測試報告的自動生成
思考
怎么計算單機所能做出的最大并發數呢?
怎么合理進行壓測數據?怎么分時段進行壓測?