接口性能測試工具 - JMeter

1. 下載和運行

JMeter 是由 Java 語言編寫的, 因此 JMeter 的使用依賴于 Java 環境 - JRE.

前往 oracle 官網下載 JMeter 壓縮包.

Mac 用戶解壓完成后, 在包內的 bin 目錄下運行?sh jmeter:

Windows 用戶直接運行 bin 目錄下的 jmeter.bat:

即可進入 JMeter 主頁面:

1.1 添加環境變量

上面的方法雖可以打開 JMeter, 但是過程比較繁瑣(需要手動打開?bin 目錄). 如果我們把 bin 目錄添加至系統環境變量, 那我們就可以直接在終端運行 jmeter 命令, 即可打開?JMeter.

步驟(macOS):

  1. vim?編輯器打開配置文件:
    vim ~/.zshrc
  2. 在編輯器中, 按?i?鍵進入“插入模式”(Insert Mode)
  3. 在文件的末尾, 添加下面這行代碼.?記得替換為自己的 JMeter?bin?目錄路徑:
    # JMeter Environment Variable
    export JMETER_HOME="/Users/shybee/apache-jmeter-5.5"
    export PATH="$JMETER_HOME/bin:$PATH"
  4. 按?Esc?鍵退出插入模式
  5. 輸入?:wq?然后按回車, 保存文件并退出?vim?編輯器
  6. 關閉當前的終端窗口, 然后重新打開一個新的(讓配置立即生效)

  7. 驗證配置是否成功

這樣, 我們可直接在終端輸入?jmeter 命令, 運行 JMeter:

配置語言為簡體中文(修改 bin 目錄下的 jmeter.properties 文件):??

配置編碼為 utf-8(修改 bin 目錄下的 jmeter.properties 文件):??

修改配置后, 重啟 JMeter, 配置生效.

2.?配置 HTTP 請求

2.1 創建線程組

  1. 在測試計劃下, 創建線程組:
  2. 在線程組中進行配置

上述配置, 在 “循環次數” 沒有勾選 “永遠”, 表示指定循環次數.

如果勾選 “永遠”, 那么必須打開 “調度器” 并配置 “持續時間”, 表示在 n 秒內, x 個虛擬用戶不斷的發起請求, 但是具體多少次請求是未知的.

2.2 配置 HTTP 請求

首先在線程組下創建 HTTP 請求:

然后進行數據配置:

需要注意的是, 填寫路徑時, 最開始一定要加上斜杠 “/”

此外: 該 POST 請求的數據為 Json 格式, 除了上圖選擇 "消息體數據" 寫入數據外, 我們該需額外的在請求的 header 中配置 Content-Type 為 application/json(需配置 HTTP 信息頭管理器, 下文會講):

(將 HTTP 信息頭管理器建立在 博客登錄接口 下, 那么這個信息頭管理器, 只對這一個接口生效)

2.3 配置查看結果樹

添加查看結果樹:

添加完結果樹后, 點擊運行, 便可發送所配置的所有請求:

注意: 上圖是將結果樹配置于線程組下, 即: 與所有接口同級, 那么這個結果樹會查詢到該線程組下所有的請求和響應信息.

如果想獲取單一接口的請求結果, 那就可以把結果樹添加在指定的接口下:

2.4 配置 header 信息 - 信息頭管理器

大多數請求的 header 中, 都會攜帶用戶身份驗證信息(如: cookie, token 令牌), 如果不攜帶這些信息, 則請求無法發出.

拿博客系統舉例, 當用戶登錄成功后, 前端會把 "loginUserToken" 存儲到瀏覽器的 localStorage 中, 當用戶再次發送請求時(如獲取博客列表接口), 前端就會把這個 token 放在請求的 header 中, 供后端進行校驗, 若后端發現請求中攜帶 token 且值正確, 就正確返回響應. 若請求的 header 中未攜帶 token, 則被攔截器攔截, 進行強制登錄操作.

使用 postman 訪問接口舉例.?

不攜帶 token:

攜帶 token:

因此, 我們在使用 JMeter 發送請求時, 也要對 header 進行相應的配置, 否則請求根本無法發送成功:

因為只有 獲取博客列表接口 需要 token 信息, 而登錄接口并不需要, 因此, 為了使得這個配置了 token 的信息頭管理器只對 獲取博客列表接口 生效, 我們只需將它建立在?獲取博客列表接口 下即可:

配置完成后, 請求便可發送成功:

2.5 HTTP 請求默認值

對于同一個項目, 存在許多重復的配置, 如:?URL 中的協議類型/IP/端口號.

對于這些重復的配置, 我們就可以創建一個 "HTTP 請求默認值", 將重復的部分管理起來, 這樣就不需要每創建一個接口 都填寫這些重復信息了:

發送請求時, "HTTP 請求默認值" 中的信息, 就會拼接到 URL 中:

因此, 當多個接口發起請求時存在多個重復的 HTTP 配置, 我們就可以將這些重復的配置提取出來, 放到 "HTTP 請求默認值" 中, 后續的 HTTP 取樣器(接口請求) 中, 就無需再添加這些配置, 發起請求時會讀取 "HTTP 請求默認值" 中的配置并進行拼接.

但是, 配置的讀取遵循 "就近原則", 只有當接口請求中沒有配置時, 才會從讀取 "HTTP 請求默認值" 中讀取, 若接口請求中配置了, 則讀取接口請求中的數據.

2.6 提取請求返回值 - JSON 提取器

在開發中, 一個請求的返回值作為另一個請求的參數, 是很常見的時間, 比如: 獲取博客列表請求的 header 中, 需要攜帶 登錄請求 返回的 user_token 信息; 獲取博客詳情請求的參數, 需要攜帶?獲取博客列表請求 的 bolg_id.

此時, 我們就可以使用 Json 提取器, 獲取某個請求的響應中 Json 格式的 body 中的信息.

要提取 Json 格式的數據, 我們需要先了解 Json 操作符.

2.6.1 Json 操作符

獲取 Json 數據, 需要用到 Json 操作符:

OperatorDescription
$表示根元素
@當前元素
*通配符。所有節點
..選擇所有符合條件的節點
.<name>子元素
['<name>' (, '<name>')]括號表示子元素或子元素列表
[<number> (, <number>)]數組索引或索引列表
[start:end]數組切片操作符
[?(<expression>)]過濾器表達式。表達式必須評估為布爾值。

獲取響應 body 中指定字段時, 通常使用: $..字段名

若該字段有多個, 要獲取第一個, 則用: $..[0]字段名

?

如, 獲取?body 中所有的 id 字段(先選擇 JSON Path Tester):

獲取?body 中第一個?id 字段:

2.6.2 配置 Json 提取器

在需要提取返回值的請求下, 添加一個 Json 提取器. 例如, 我們需要提取登錄接口請求返回的 user_token 數據, 則在 登錄接口請求 下建立一個 Json 提取器:

使用 Json Path Tester 進行測試, 可知該 token 數據可用 $..token 表示:

注意: 使用提取出的變量, 需要通過?${變量名} 進行使用:

這樣, 在其他請求發送時,?就會攜帶 登錄接口 返回的 token 字段:

除了上述提取登錄請求的返回值外, 也可以提取博客列表請求的返回值, 作為博客詳情頁請求的參數:

2.7 JSON?斷言

判斷一個請求的結果是否符合預期, 不僅僅是查看狀態碼, 而是要查看響應的數據是否正確, 此時就需要用到 JSON 斷言.

對斷言進行配置:

若請求結果符合斷言, 則請求成功, 若請求結果不符合斷言, 則請求失敗:

常用正則表達式:

  • /d 匹配數字
  • /S 匹配非空字符

未完待續

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93942.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93942.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93942.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Go語言實戰案例-數據庫事務處理

在實際業務中&#xff0c;很多操作需要保證 要么全部成功&#xff0c;要么全部失敗&#xff0c;否則可能造成數據不一致。比如&#xff1a;? 用戶轉賬&#xff08;A 賬戶扣款&#xff0c;B 賬戶加款&#xff09;? 下單支付&#xff08;生成訂單、扣減庫存、記錄支付&#xff…

為何vivo做了頭顯,小米卻選擇AI眼鏡

在押注下一代智能終端這件事上&#xff0c;手機廠商為何步調不一致&#xff1f;文&#xff5c;游勇編&#xff5c;周路平在手機銷量和創新都陷入停滯的背景下&#xff0c;主流手機廠商正在探索下一代交互終端&#xff0c;試圖尋找新的增長點。今年6月&#xff0c;小米發布了AI眼…

Day24 目錄遍歷、雙向鏈表、棧

day24 目錄遍歷、雙向鏈表、棧顯示指定目錄下的所有 .h 文件 功能描述 遍歷指定目錄&#xff08;遞歸進入子目錄&#xff09;&#xff0c;查找所有以 .h 為后綴的頭文件&#xff0c;將其完整路徑&#xff08;路徑 文件名&#xff09;存儲到雙向鏈表中&#xff0c;并正向或反向…

JupyterLab 安裝(python3.10)

目錄 一、環境 二、安裝 三、啟動Jupyterlab 四、通過chrome瀏覽器進行訪問 五、打開Jupyter Notebook 六、pandas驗證 JupyterLab 是一個基于 Web 的交互式開發環境&#xff0c;是經典 Jupyter Notebook 的下一代版本。它支持多種編程語言&#xff08;如 Python、R、Juli…

【neo4j】安裝使用教程

一、安裝 1.0 前置條件 安裝配置好jdk17及以上 注意我使用的是neo4j 5.26.10版本&#xff0c;匹配java17剛好 Java Archive Downloads - Java SE 17.0.12 and earlier 無腦安裝即可 配置以下環境變量 1.1 安裝程序 Neo4j Deployment Center - Graph Database & Anal…

AECS(國標ECALL GB 45672-2025)

車載緊急呼叫功能作為車輛遇險時的響應機制&#xff0c;為司機和乘客的安全營救提供通信支持。為了能夠降低通信延遲&#xff0c;提高響應速度&#xff0c;基于4G/5G的下一代緊急呼叫技術&#xff08;NG eCall&#xff09;將在歐盟于2027年起成為強制標準&#xff0c;中國也已經…

week3-[循環嵌套]好數

week3-[循環嵌套]好數 題目描述 如果一個正整數 xxx 只有最左邊一位不是 000&#xff0c;其余都是 000&#xff0c;那么稱其為好數。例如 400040004000 和 222 都是好數&#xff0c;但是 120120120 不是。 給定正整數 nnn&#xff0c;在 111 到 nnn 間有多少個數是好數&#xf…

智能制造加速器:某新能源車智慧工廠無線網絡優化提升方案

隨著工業4.0和智能制造的快速發展&#xff0c;傳統制造工廠的網絡架構正面臨前所未有的挑戰。為了滿足柔性生產、實時數據驅動以及高可靠運營的需求&#xff0c;某新能源車智慧工廠啟動了一項無線網絡優化提升項目。本項目通過部署智能組網設備&#xff0c;構建高效、穩定、智能…

nginx-自制證書實現

nginx-自制證書實現一、 確認nginx是支持https功能的二、生成私鑰三、 根據ca.key生成nginx web服務器使用的證書簽名請求文件nginx.csr四、使用ca.key給nginx.csr進行簽名&#xff0c;生成公鑰證書nginx.crt五、將證書與域名綁定六、添加域名解析并訪問一、 確認nginx是支持ht…

FreeRTOS,事件標注組創建,xEventGroupCreate、xEventGroupCreateStatic

1. xEventGroupCreate ()&#xff1a;動態創建&#xff08;臨時借內存&#xff09; 作用&#xff1a; 向系統&#xff08;FreeRTOS 的堆內存&#xff09;“臨時申請” 一塊內存來存放事件組&#xff0c;不需要我們自己提前準備內存。 例子&#xff08;基于你的代碼修改&#xf…

Linux網絡socket套接字(上)

目錄 前言 1.Socket編程準備 1.理解源IP地址和目的IP地址 2.認識端口號 3.socket源來 4.傳輸層的典型代表 5.網絡字節序 6.socket編程接口 2.Socket編程UDP 1.服務端創建套接字 2.服務端綁定 3.運行服務器 4.客戶端訪問服務器 5.測試 6.補充參考內容 總結 前言…

RK android14 Setting一級菜單IR遙控器無法聚焦問題解決方法

文章目錄 前言 一、問題分析 1.1. 布局文件分析 1.2. Java代碼 二、解決方法 2.1.移除沖突的滾動標志 2.2.解決有問題的初始化調用 2.3.完整補丁 前言 在Android系統Settings應用(packages/apps/Settings)的首頁(SettingsHomepageActivity)中,存在一個 accessibility (無…

iOS 手勢與控件事件沖突解決清單

總結一份「iOS 手勢與控件事件沖突解決清單」&#xff0c;以后你遇到 UIButton / UITableView / UIScrollView 被手勢攔截就能快速排查了&#xff1a;&#x1f4cc; iOS 手勢與控件事件沖突常見解決辦法1?? cancelsTouchesInView&#x1f449; 最常用&#xff0c;決定手勢識別…

筆試——Day45

文章目錄第一題題目思路代碼第二題題目思路代碼第三題題目思路代碼第一題 題目 kanan和高音 思路 雙指針遍歷數組&#xff0c;更新左右端點并計算最大值 代碼 #include<iostream> #include<vector> using namespace std;int main() {int n; cin >> n;vect…

nnDetection網絡結構分析

基于 RetinaNet 框架擴展&#xff0c;核心用于處理 3D 體積數據&#xff08;如醫學影像 CT/MRI&#xff09;&#xff0c;通過 “Encoder-Decoder-Head” 架構實現多任務學習。以下從整體框架、核心模塊細節、技術特點、應用場景四個維度展開分析。一、整體框架概覽首先通過表格…

Torch -- 卷積學習day4 -- 完整項目流程

完整項目流程總結1. 環境準備與依賴導入import time import os import numpy as np import pandas as pd import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from torch.utils.data import Dat…

MTK Linux DRM分析(七)- KMS drm_plane.c

一、簡介在 Linux DRM&#xff08;Direct Rendering Manager&#xff09;子系統中&#xff0c;Plane&#xff08;平面&#xff09;代表了一個圖像源&#xff0c;可以在掃描輸出過程中與 CRTC 混合或疊加顯示。每個 Plane 從 drm_framebuffer 中獲取輸入數據&#xff0c;并負責圖…

OpenHarmony之 藍牙子系統全棧剖析:從協議棧到芯片適配的端到端實踐(大合集)

1. 系統架構概述 OpenHarmony藍牙系統采用分層架構設計&#xff0c;基于HDF&#xff08;Hardware Driver Foundation&#xff09;驅動框架和系統能力管理&#xff08;System Ability&#xff09;機制實現。 1.1 架構層次 ┌─────────────────────────…

探索 Ultralytics YOLOv8標記圖片

1、下載YOLOv8模型文件 下載地址&#xff1a;https://docs.ultralytics.com/zh/models/yolov8/#performance-metrics 2、編寫python腳本 aaa.py import cv2 import numpy as np from ultralytics import YOLO import matplotlib.pyplot as pltdef plot_detection(image, box…

Matplotlib數據可視化實戰:Matplotlib子圖布局與管理入門

Matplotlib多子圖布局實戰 學習目標 通過本課程的學習&#xff0c;學員將掌握如何在Matplotlib中創建和管理多個子圖&#xff0c;了解子圖布局的基本原理和調整方法&#xff0c;能夠有效地展示多個數據集&#xff0c;提升數據可視化的效果。 相關知識點 Matplotlib子圖 學習內容…