性能自動化測試之Jmeter性能測試(一)

說明:該篇博客是博主一字一碼編寫的,實屬不易,請尊重原創,謝謝大家!

一、相關術語

1.JMeter 是做什麼的

jmeter可用於測試軟件的性能,同時也可以用於測試軟件接口。

2.線程組

線程數:虛擬用戶數

3.Sampler 取樣器

  • 用來模擬用戶操作,向服務器(被測系統)發出請求。
  • http 請求
    ✔     發送 http 請求
  • 跟隨重定向
    ✔     會沿用之前的 sessionid。
  • Debug Sampler
    ✔     用於顯示正則表達式、參數等的結果。
  • Beanshell Sampler
    ✔     於輸出參數值。

4.斷言

  • 用來驗證結果是否正確,相當於檢查點。
    ✔     常用響應斷言。

5.前置處理器

✔     請求發送前可能會做一些環境或者參數的準備工作,比如在對數據庫進行操作前需要先建立一個數據庫連接。

6.後置處理器

  • 一般放在取樣器之後,用來處理服務器的返回結果。
  • 正則表達式處理器
    ✔     用於解決關聯問題;
    ✔     要放在請求以下。

7.配置元件

  • CSV Data Set Config(CSV 數據集配置)
    ✔     用於參數化。
  • http cookie 管理器
    ✔     錄製之前添加,用於解決 sessionid 存儲於 cookie 中的情況。
  • 用戶自定義變量

8.邏輯控制器

  • 事務控制器
    ✔     用於添加事務。
  • 循環控制器
    ✔     用於設置迭代次數。

9.定時器

  • Synchronizing Timer(同步計時器)
    ✔     用於設置集合點。
  • 固定定時器、Uniform Random Timer
    ✔     可用於設置思考時間,需要每一次思考時都加此定時器,不常用。
  • 高斯隨機定時器
    ✔     產生服從正態分佈的隨機時間間隔,一般用於模擬思考時間,需要每一次思考時都加此定時器,不常用。

10.監聽器

  • 用於對測試進行監控,查看運行結果,常用察看結果樹。

二、搭建 Jmeter 環境

  • 控制機上安裝 JDK 並配置環境變量(不能僅使用 JRE,負載機可以)
  • 複製 jmeter 文件夾到計算機
  • 安裝 badboy
    ✔     與 jmeter 無關。
    ✔     用於錄製腳本。
    ✔     常用於導出腳本到 jmeter。

1.安裝JDK

  • 首先博主準備windows 7純淨版操作系統中進行演示,加載Jmeter環境所需鏡像
    在這裏插入圖片描述
  • 安裝JDK
    在這裏插入圖片描述
  • 安裝完成
    在這裏插入圖片描述

2.配置Java環境

說明: 博主這裏進行兩種配置(可自我定位使用哪一種)

2.1 第一種配置(系統變量)

  • 在系統變量上新建 JAVA_HOME 變量,路徑值選擇你的JDK安裝目錄
    在這裏插入圖片描述
  • 點擊系統變量尋找 Path變量,編輯%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(注意原來Path的變量值末尾有沒有; 如果沒有則先輸入; 再輸入上面的代碼)
    在這裏插入圖片描述
  • 新建CLASSPATH系統變量,變量值填寫爲.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一點)
    在這裏插入圖片描述
  • 完成後,在cmd輸入以下命令如果出現如下顯示,則表示java環境配置成功
    在這裏插入圖片描述

2.2 第二種配置(用戶變量)

  • 首先刪除上一步在系統變量中配置的Path和CLASSPATH值,選擇新建用戶變量Path,將JDK安裝路徑下的bin目錄路徑設置爲變量值C:\Program Files (x86)\Java\jdk1.8.0_121\bin;
    在這裏插入圖片描述
  • 新建ClassPath用戶變量,變量值爲JDK目錄下的lib目錄下的tools.jar值即C:\Program Files (x86)\Java\jdk1.8.0_121\lib\tools.jar;
    在這裏插入圖片描述
  • 檢驗配置也是沒有問題的
    在這裏插入圖片描述
  • 還有一種測試,則是直接創建一個java文件,編寫打印hello代碼,然後進行編譯再打印
    在這裏插入圖片描述

3.拷貝Jmeter安裝Badboy

  • 將鏡像文件中的Jmeter程序拷貝到C盤中
    在這裏插入圖片描述
  • 安裝Badboy
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 最後將Badboy和Jmeter發送快捷方式到桌面,方便以後使用
    在這裏插入圖片描述

4.安裝被測軟件webtours

  • 首先安裝ActivePerl,也就是perl腳本解釋器
    在這裏插入圖片描述
  • 安裝完成
    在這裏插入圖片描述
  • 將webtours網站拷貝到C盤目錄下,併發送服務器快捷方式到桌面
    在這裏插入圖片描述
  • 測試webtours網站正常訪問
    在這裏插入圖片描述
  • 博主註冊一個用戶,並查看用戶數據
    在這裏插入圖片描述

三、錄製腳本

1.badboy 錄製腳本

1.1 腳本錄製

  • 輸入 url 地址後,單擊綠色箭頭
    ✔     紅色原點表示“開始錄製”,默認已選中;
    ✔     黑色四方塊:停止錄製,需要手工停止。
    在這裏插入圖片描述
  • 輸入完網站地址後,點擊綠色箭頭或回車,則進入網站,那麼就可以操作起來,因爲默認就在錄製,但是該錄製只會錄製與數據交互的,博主這裏先錄製一個註冊
    在這裏插入圖片描述
  • 錄製完成,點擊停止錄製
    在這裏插入圖片描述

1.2 badboy回放腳本

  • 回放腳本
    ✔     右擊 step1→Play All,或使用工具欄按鈕。

  • 首先先刪除錄製時,註冊的cdtaogang1用戶,然後進行回放
    在這裏插入圖片描述

  • 用戶cdtaogang1註冊成功
    在這裏插入圖片描述

1.3 腳本導出

  • 將腳本導出爲.jmx 格式
    ✔     File→Export to Jmeter
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 說明一點,在badboy上點擊保存,則是保存爲badboy的腳本
    在這裏插入圖片描述

1.4 Jmeter導入jmx腳本

  • jmeter 導入 jmx 腳本
    ✔     打開 jmeter
           ★     \apache-jmeter-3.0\bin\jmeter.bat
    ✔     文件→打開
    在這裏插入圖片描述
  • 展開線程組,就能看到我們在badboy中錄製的腳本數據了
    在這裏插入圖片描述

1.5 Jmeter回放腳本

  • jmeter 回放腳本
    ✔     右擊 ThreadGroup 下的 Step1→添加→監聽器→察看結果樹
    在這裏插入圖片描述
    ✔     單擊“察看結果樹”,單擊工具欄中的綠色播放圖標則是執行腳本(代碼)
    在這裏插入圖片描述
    ✔     查看圖形方式的回放結果
           ★     單擊“察看結果樹”→選擇下拉列表中的“HTML”→選中某個 url“→點擊“響應數據”
    在這裏插入圖片描述
  • 如果想要查看HTML頁面,則進行選擇即可
    在這裏插入圖片描述
  • 刪除cdtaogang1用戶數據,然後清空察看結果樹,不然再次跑腳本則會接着在當前腳本下寫入腳本的
    在這裏插入圖片描述
  • 清除過後,再次運行
    在這裏插入圖片描述
  • 顯示成功
    在這裏插入圖片描述

2.jmeter 代理錄製腳本

2.1 腳本錄製

  • 爲計算機設置 IP
    在這裏插入圖片描述
  • 在瀏覽器中設置代理服務器
    ✔     打開瀏覽器→工具→Internet 選項→連接→局域網設置→勾選"爲 LAN 設置代理服務器",地址輸入 Jmeter 的 IP,端口 8888(jmeter 默認)
    在這裏插入圖片描述
  • 添加線程組到測試計劃
    ✔     添加"配置元件"→http cookie 管理器,否則影響關聯效果
    在這裏插入圖片描述
  • 在工作臺下添加"非測試元件"→HTTP 代理服務器
    ✔     目標控制器:測試計劃→線程組
    ✔     分組:不對樣本分組
    在這裏插入圖片描述
  • 啓動,操作軟件後開始錄製
    ✔     需要使用真實 IP,不能使用 localhost
    在這裏插入圖片描述
  • 點擊啓動後,直接打開ie瀏覽器,輸入http://192.168.88.207:1080/webtours進行註冊
    在這裏插入圖片描述
  • 錄製完成後,停止
    在這裏插入圖片描述

2.2 腳本回放

  • 首先添加察看結果數
    在這裏插入圖片描述
  • 刪除錄製腳本時註冊成功的cdtaogang1用戶數據,點擊回放
    在這裏插入圖片描述
  • 腳本執行成功
    在這裏插入圖片描述

3.自己編寫腳本

  • 添加HTTP請求
    在這裏插入圖片描述
  • 配置參數
    在這裏插入圖片描述
  • 添加監聽器,運行後,察看結果能正常訪問說明配置無誤
    在這裏插入圖片描述
  • 接下來還需要繼續添加HTTP請求,因爲webtours頁面由如下三個框架組成,分別爲三個不同的地址
    在這裏插入圖片描述
  • 右擊查看網頁源碼,可以查看到組成頁面的url地址
    在這裏插入圖片描述
  • 在添加HTTP請求之前,先將之前的HTTP請求命名爲主頁index
    在這裏插入圖片描述
  • 然後添加header頁面、nav頁面以及home頁面
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 清空再運行察看結果樹,查看添加的頁面,是否能夠正常訪問
    在這裏插入圖片描述

四、增強 Jmeter 腳本

1.添加斷言

  • 【例 1】檢查註冊是否成功
    ✔     先根據“結果樹”中的“HTML”中的“響應數據”,找到需要檢查的網頁中的文本
    ✔     複製上述內容,根據“結果樹”中的“Text”中的“響應數據”,確定最終確定要檢查的文本(可能含有標記)
    ✔     在線程組下找到需要檢查的 url,右擊“添加”→斷言→響應斷言
           ★     要測試的響應字段:響應文本
           ★     模式匹配規則:包括
           ★     要測試的模式:添加
                   ■     預期結果如“Thank you, <b>zhsan1”
           ★     注意
                   ■     找不到會報錯,找到無反應

  • 首先打開之前保存到桌面的badboy轉換的jmeter註冊腳本
    在這裏插入圖片描述

  • 展開Step1,將以下的HTTP請求名稱前面加上數字標識,方便查看(在Jmeter中記得隨時隨地的進行保存)
    在這裏插入圖片描述

  • 添加監聽察看結果樹,刪除cdtaogang1用戶數據,運行查看結果註冊用戶成功
    在這裏插入圖片描述

  • 因要對打開網站、點擊註冊鏈接、提交註冊數據添加斷言,所以這裏博主對名稱進行命名
    在這裏插入圖片描述

  • 刪除cdtaogang1用戶數據,清除結果,重新跑一遍
    在這裏插入圖片描述

  • 添加檢查點這裏跟在前面的loadrunner中不一樣,需要切換到text篩選條件,根據返回的響應數據中使用Ctrl+C進行復制,如果是html篩選條件查看的響應數據顯示爲頁面,如果是出現html語言如<b>則不會顯示在頁面中
    在這裏插入圖片描述

  • 右擊打開網站,添加響應斷言
    在這裏插入圖片描述

  • 斷言配置如下
    在這裏插入圖片描述

  • 右擊打開註冊鏈接,添加響應斷言
    在這裏插入圖片描述

  • 右擊提交註冊數據,添加響應斷言
    在這裏插入圖片描述

  • 接下來刪除cdtaogang1用戶,清空結果,運行後全部通過,即表示斷言成功
    在這裏插入圖片描述

  • 再運行一遍,則會在提交註冊數據顯示斷言失敗
    在這裏插入圖片描述

2.事務

  • 首先將Step1 下的數據全選鼠標拖動到線程組下,然後刪除Step1
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 右擊線程組→添加→邏輯控制器→事務控制器,添加以下三個事務
    在這裏插入圖片描述
  • 拖動事務位置,將 url 拖動到合適的事務中
    在這裏插入圖片描述
  • 拖動完成如下
    在這裏插入圖片描述
  • 運行後,事務全部通過
    在這裏插入圖片描述

3.參數化

  • 配置元件→CSV Data Set Config
    ✔     Filename:參數文件名
           ★     可用相對或絕對路徑,相對路徑須在…\jmeter 安裝位置\bin 中;
           ★     當前目錄下使用./;參數文件中不能使用列名。
    ✔     File encoding:文件編碼格式
           ★     常用且建議 UTF-8
    ✔     Variable Names(comma-delimited)
           ★     以英文逗號間隔的列名,與數據的間隔符可以不一致
    ✔     Delimiter(use ‘\t’ for tab)
           ★     指定數據間隔符,Tab 用’\t’(不加引號),默認逗號
    ✔     Allow quota data
           ★     表示數據中是否有分隔符
    ✔     Recycle on eof
           ★     參數不夠用時,是否從頭開始重新循環
  • 【例 1】註冊 200 個賬號,客戶名使用用戶名。
    ✔     手動編輯參數文件,寫入參數,但不要寫列名
    在這裏插入圖片描述
    ✔     找到需要參數化的輸入數據的 url
           ★     在前面的位置,右擊“添加”→配置元件→CSV Data Set Config
           ★     將參數的“值”改爲“${參數名}”
                   ■     使用參數時不加引號
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    ✔     負載測試
           ★     單擊“Thread Group”,設置“線程數”爲併發人數
                   ■     一個線程對應一個模擬用戶
           ★     Ramp-Up Period(in second)
                   ■     線程啓動開始運行的時間間隔,單位是秒,即所有線程在多長時間內開始運行。
                   ■     如設置線程數爲 200,數據爲 75 秒,相當於 15s 加載 40 個用戶。
    在這裏插入圖片描述
  • 刪除cdtaogang1用戶數據,清空結果樹
    在這裏插入圖片描述
  • 運行完成
    在這裏插入圖片描述
  • 200個用戶註冊成功
    在這裏插入圖片描述

4.關聯

  • 後置處理器→正則表達式提取器
    ✔     引用名稱
           ★     根據指定規則找到的字符串存放到此名錶示的參數中。
    ✔     正則表達式
           ★     一個用( )表示一個模式;left(?)right:?表示遇到行中的第一個 right 就作爲右邊界,然後不斷向後尋找。
    ✔     模板
           ★     $1$指第一個模板(模式),$2$第二個…,此項必填;
           ★     允許$1$ $2$ 的寫法。
    ✔     匹配數字
           ★     找到的第某項,1 爲第 1 項,-1 爲所有項,0 是隨機
                   ■     參數名_matchNr(區分大小寫)中存着找到幾項,必寫-1
                   ■     參數名_gi 表示找到的第 i 項,i 從 1 開始,g0 表示包含左右邊界在內的整個字符串
                           ●     g 是關鍵字
                   ■     有多個模板時,參數名_i_gj 表示找到的第 i 行第 j 列數據
  • 正則表達式案例
    ✔     網頁內容
    在這裏插入圖片描述
  • 將test.html文件拷貝到xitami服務器目錄下,使其在webtours網站地址下可以進行訪問
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 將之前的項目保存後關閉,新建線程組配置HTTP請求
    在這裏插入圖片描述
  • 運行後,確保能正常訪問test.html頁面
    在這裏插入圖片描述
  • 然後添加正則表達式提取器
    在這裏插入圖片描述
    ✔     正則表達式:<tr><td>hello</td><td>(.*)</td><td>(.*)</td>
    在這裏插入圖片描述
  • 【例 1】模板:$1$,匹配數字:1
    在這裏插入圖片描述
  • 添加Debug Sampler獲取匹配出的打印結果
    在這裏插入圖片描述
  • 運行結果數,查看Debug Sampler顯示出匹配的cdtaogang
    在這裏插入圖片描述
  • 【例 2】模板:$1$,匹配數字:2
    在這裏插入圖片描述
  • 運行後匹配出zhnagsan沒有問題
    在這裏插入圖片描述
  • 【例 3】模板:$2$,匹配數字:1
    在這裏插入圖片描述
  • 運行查看結果
    在這裏插入圖片描述
  • 【例 4】模板:$2$,匹配數字:2
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 【例 5】模板:$1$ $2$,匹配數字:-1
    在這裏插入圖片描述
  • 說明一點,因爲在上一步中模板$1$和$2$之間博主用的,隔開,所以在下面匹配結果中顯示的爲cdtaogang,123以及zhangsan,6789
    在這裏插入圖片描述
  • 【例 6】?的用法
    ✔     正則表達式:<td>(.*)</td>與<td>(.*?)</td>
    ✔     查看正則表達式的結果
  • 首先使用<td>(.*)</td>正則
    在這裏插入圖片描述
  • 運行結果發現,並沒有到第一個</td>就結束,而是找到最後沒有了才結束
    在這裏插入圖片描述
  • 修改正則爲<td>(.*?)</td>,運行結果這纔是想要匹配出的數據,加了?則表示遇到</td>則取,而不是隻取到最後一個</td>
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 在線程組中添加 BeanShell Sampler,移到正則表達式提取器之後,寫入下面的代碼之一
    在這裏插入圖片描述
    ✔     ${參數名};或"字符串${參數名}";
           ★     結果出現在請求中,最後一個數據時不時出現在響應中
           ★     如果省略分號,則數據都不出現在響應中,此外還會報錯,但是數據還會正常顯示
    在這裏插入圖片描述
    在這裏插入圖片描述
    ✔     ResponseMessage=“字符串${參數名}”;
           ★     結果出現在響應中,最後一個數據出現在響應中
    在這裏插入圖片描述
    在這裏插入圖片描述
    ✔     log.error(數據);
           ★     向日志中寫數據
           ★     點擊“警告”圖標可以清除日誌
    在這裏插入圖片描述
    在這裏插入圖片描述
    ✔     log.info(數據);
           ★     向日志中寫數據
    在這裏插入圖片描述
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章