Jmeter

零、 一些亂七八糟的廢話

性能關鍵指標
多 - 并發量 能夠支持最大的用戶訪問量
快 - 響應時間 有多快
好 - 穩定性 (長時間運行)
省 - 資源使用率
加上 思考時間

  • 響應時間 - 普遍接受響應時間 2、5、8秒 好,可以接受,上限
  • 并發用戶數 影響最大的是內存
    并發用戶數C計算:C = nL/T
    C - 平均并發用戶數
    n - 平均每天訪問用戶數
    L - 一天內用戶從登錄到退出的平均時間
    T - 是考察時間長度(一天內多長時間有用戶使用系統)
    并發用戶數峰值C^計算
    C^ 約等于 C + 3 根號C
    系統用戶數 - 注冊用戶量 影響的是磁盤空間
    初始化性能環境 warm up 熱機*也就是說 模擬實際使用場景,用戶量之類的 磁盤到內存的過程
    關于 異地訪問服務器 響應時間的差異 找運維 - 在兩個防火墻之間注入網絡延時
  • 吞吐量 -
  • 系統性能計數器 -
  • 思考時間 - 更加真實的模擬用戶使用


    用戶300的時候出現拐點,說明飽和了,性能瓶頸,這種平直線多數是因為網絡問題,需要增加帶寬,丟包了
    平直線部分如果是波浪線需要加服務器,內存滿了,還是cpu滿了

每臺機器能創建多少個用戶 由1. 機器的內存(物理內存)和
2.jmeter 是一個java進程 - 進程需要一定的內存資源-堆內存
3.端口號,占用端口號分布不均 需要用主從機-分布式-負載均衡

一、 安裝

mac版本
http://www.lxweimin.com/p/bce9077d883c

  • 下載 pache-jmeter-5.0.tgz 放網盤了
  • 需要java8的環境 java環境看前邊的筆記
  • 配置PATH 使得終端 輸入jmeter就可以打開
    open ~/.bash_profile
export JMETER_HOME=/Users/lxr/apache-jmeter-5.0
export PATH=$JAVA_HOME/bin:$PATH:.:$JMETER_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar

source ~/.bash_profile

然后就可以在終端輸入 jmeter 打開jmeter程序了

  • 設置jmeter語言



    通常是寫http的請求,寫不了解的請求時,可以用這個模板
  • 關于jmeter的屬性設置
    (1)/Users/lxr/apache-jmeter-5.0/bin/jmeter.properties
#language=en  -> language=zh_CN

(2)分布式 remote_hosts ip地址逗號隔開

二、 jmeter 使用

1.配置元件
HTTP請求默認值
HTTP消息頭管理
HTTPCookie管理器
HTTPCache管理器
2.監聽器
①察看結果樹※
I:分析某個請求明細、詳情:請求頭、請求體;響應頭、響應體
II:性能場景 分析請求錯誤原因 之類的
②聚合報告 匯總統計:請求數、響應時間(平均、90%、95%、min、max 毫秒)、錯誤率、吞吐量(越高越好)、發送/接受量(帶寬)
③用表格查看結果(能體現起始時間)
④圖形結果
3.其他元件
①前置處理器(發送請求前執行的元件。比如加密、)
②后置處理器(比如:提取數據)
③定時器(1.思考時間-固定定時器;2.同步定時器-集合點幾點搶購;3.隨機定時器;4.吞吐量定時器)

  1. 創建測試計劃 選擇保存位置
  2. 創建線程組 不做負載就線程數之類的全部 輸入1


  3. 增加HTTP請求 - 保存
    測試環境正式環境 需要來回切換之類的所以 要有一個 HTTP請求默認值,里頭弄好了,其他的請求 一樣 就不用寫了
    增加HTTP請求 - 保存
    填寫接口

    4.察看結果樹 看接口請求結果 線程組 右鍵 添加 監聽 查看結果樹
    新建一個Excel文件 將后綴改成.csv,圖中文件寫入選擇它,運行結果就會保存到這個路徑下的csv文件中

    用表格查看結果 添加 - 監聽器 -
  4. HTTP Cookie管理器 - 有些需要有cookie作為參數的接口需要 添加配置元件 HTTP Cookie管理器 添加了 放在這里就成了 自己就存起來了


  5. Token獲取
    添加 http請求 返回token的
    添加后置處理器 JSON提取器 提取參數詳細文章https://www.cnblogs.com/tudou-22/p/12579575.html
    用Debug PostProcessor檢查json提取器是否成功取到了值(查看完了 要禁用它)詳細文章 https://www.cnblogs.com/fengpingfan/p/5894020.html
    從查看結果書中 這個請求出現小三角可以打開看
    用變量的時候 ${token}
  1. 響應斷言 - 在要執行斷言的 請求下添加 注意作用域,可以拖拽過去


  2. 線程組下 右鍵 添加 監聽器 斷言結果 ,然后運行 綠三角
  3. 聚合報告
  4. 生成HTML報告

關于腳本錄制,可以用Fiddler抓包,可以導出jmx文件 用jmeter打開

Part2、代理 腳本錄制

  1. 新建線程組
  2. 測試計劃 添加 非測試元件 HTTP代理服務器
  3. 打開瀏覽器(谷歌為例)
    設置 -> 高級 -> 系統 -> 打開您計算機的代理設置


    記得點 保存


    導入證書 設置 - 高級 - 隱私設置和安全性 - 安全 - 下滑 管理證書
  • Windows


    選擇證書
  • Mac

    雙擊點開證書
    添加位置切換成 系統

    在鑰匙串中找到,發現還是不受信任狀態,修改成始終信任即可
  1. Requests Filtering - 包含模式 - 排除模式 設置正則
    .*www\.wanandroid\.com.*
    .*\.(js|css|PNG|jpg|ico|png|gif).*
  2. 啟動HTTP代理服務器
  3. 瀏覽網頁 即可錄制成功,添加 - 察看結果樹 能察看結果

prat3、蘋果電腦 錄制 蘋果手機

  1. PC http代理 系統設置 - 網絡 - 高級 - 代理 - 勾選輸入 - 好 - 應用
  2. jmeter HTTP代理服務器設置 - 點運行 - bin文件夾下生成證書
  3. iPhone 安裝jmeter的信任證書
    cd /Users/lxr/apache-jmeter-5.4/bin
    python3 -m http.server 8080

    訪問 http://[ip地址]:8080下載證書 - 并去設置里安裝信任證書
  1. 手機配置 代理

    設置 - 無線局域網 - ① i - 配置代理 - 電腦iP 剛電腦上網絡頁面就有 - 端口號8888 設置完了,手機連不上網了去檢查jmeterHTTP代理服務器啟動了沒有

  2. 啟動jmeterHTTP代理服務器后 這個彈框不能關閉

Part4、參數化

概要

  1. 參數化流程
  • 找出需要做參數化的數據
  • 準備提供給參數化需要的數據源
  • 關聯數據 把腳本里的常量變成變量(使用前面的數據源數據)
  1. jmeter參數化方式
    ① CSV -- 需要配置的元件
    ② 函數式(隨機數、時間 time、counter計數器)
    ③ 變量
    ④ 編程式

使用場景

  1. CSV 賬號密碼 作用域看這個數據源給誰用



    token 后置 JSON提取器


    添加-后置處理器-JSON提取器
    添加-取樣器-debug調試取樣器
    察看結果樹中 看調試取樣器 中參數,開發完了 給調試器禁用
  2. 函數式
  3. 變量
  4. 編程式
  • 引入外部的jar、java、class包
  • 使用beanshell編程

Part5、Jmeter用正則關聯

  1. 正則表達式
    ()括起來的部分就是要提取的部分
    . 匹配任何字符串
  • 一次或多次
    ? 找到第一個匹配項后就停止

    添加 取樣器 Debug 運行在察看結果樹中來看變量有沒有成功取到

    應用
獲取公眾號列表https://wanandroid.com/wxarticle/chapters/json 
https://wanandroid.com/wxarticle/list/408/1/json
方法:GET
參數:
    公眾號 ID:拼接在 url 中,eg:405
    公眾號頁碼:拼接在url 中,eg:1

請求結果為 提取其中的"id": 408

添加 - 后置處理器 - 正則表達式提取器

用美元符號來應用該變量

Part5、集合點技術

eg:到點搶購

線程數 5 個用戶,Ramp-up 5s 5s生成5個用戶
并發登錄 注意作用域

給登錄請求 添加 - 定時器 - Sychronizing Timer (同步定時器)

兩個輸入項
模擬用戶組的數量(Number of simulated Users to Group by):集合夠多少個用戶/線程后發一次請求
???0 就是跟線程組設置的線程數一樣??但是我的不是這樣 還是差幾毫秒的,填跟線程組設置 線程一樣的話 就是同時了
超時時間(Timeout):等待集合,直到超時 ms 毫秒,(設置值大于線程數量,或者最后的一批個數 不夠一撥了比如 線程數5 設置2個一撥 最后一個等不齊,就只能等超時了)

Part6、實戰

新的點

  1. 僅一次控制器 某些請求 只想每個用戶執行一次 添加 - 邏輯控制器 - 僅一次控制器

    將請求拖進里邊
  2. 測試計劃 中有多個線程組,默認是同事執行的 勾選后就是按照順序執行,但是不影響setup 和 teardown
  3. 用戶自定義變量 將項目中用到的會重復使用會變的 全局的東西拿出來

    腳本開發
  4. 參數化數據 并發登錄,多用戶(不同賬號)
  5. 準備好數據源
  6. 腳本中的常量 改成 變量 (將用戶名 密碼 用變量代替)

CSV 數據文件設置

請求數據替換成變量
線程組 并發設置 設置 1 秒 產生5個用戶 一直循環執行 10秒

Part 7

性能調優https://www.bilibili.com/video/BV1xV411m7eo

  1. 聚合報告
  2. Grafana 性能調優
  3. 命令行 top
    分析過程
  4. 聚合報告 響應時間 錯誤率 吞吐量 來判斷 問題出現在哪里
    eg:響應時間大于預期值
  5. Grafana 性能調優 通過Grafana查看是什么東西的問題
    eg:發現CPU爆紅 使用率過高
  6. 命令行 top 查看具體哪個進程使用CPU高

結合看
先用python代碼給 100個賬號密碼 寫入文件

with open('/Users/lxr/jmeter_file/都市商城賬號.txt', 'w') as file:
    for i in range(1,100):
        num_str = (3-len(str(i)))*'0' + str(i)
        file_str = 'sq'+num_str+','+'123456'+'\n'
        print(file_str,type(file_str))
        file.write(file_str)

20秒內生成100個用戶,每秒5個用戶,持續執行10秒鐘


因為請求太多了,所以要勾選只顯示錯誤日志
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容

  • 1 Jmeter安裝配置 使用Jmeter前首先要安裝JDK,配置JDK環境變量。Jmeter不需要安裝,下載后...
    茶小汐閱讀 2,956評論 0 8
  • 一. 性能測試 1.1. 性能測試是什么 1.1.1 廣義定義 基于協議模擬用戶發出請求,對服務器形成一定負載,...
    KiKi_2005A閱讀 436評論 0 0
  • 1.性能測試 1.性能測試是什么 基于協議模擬用戶發出請求,對服務器形成一定負載,來測試服務器的性能指標是否滿足要...
    連貓都嫌棄我閱讀 567評論 0 0
  • 一. 性能測試 1.性能測試是什么 廣泛定義:基于協議模擬用戶發出請求,對服務器形成一定負載,來測試服務器的性能指...
    c_dab5閱讀 195評論 0 0
  • 彩排完,天已黑
    劉凱書法閱讀 4,267評論 1 3