零介汹、 一些亂七八糟的廢話
性能關(guān)鍵指標(biāo)
多 - 并發(fā)量 能夠支持最大的用戶訪問量
快 - 響應(yīng)時(shí)間 有多快
好 - 穩(wěn)定性 (長時(shí)間運(yùn)行)
省 - 資源使用率
加上 思考時(shí)間
- 響應(yīng)時(shí)間 - 普遍接受響應(yīng)時(shí)間 2、5、8秒 好啤斗,可以接受跃巡,上限
- 并發(fā)用戶數(shù) 影響最大的是內(nèi)存
并發(fā)用戶數(shù)C計(jì)算:C = nL/T
C - 平均并發(fā)用戶數(shù)
n - 平均每天訪問用戶數(shù)
L - 一天內(nèi)用戶從登錄到退出的平均時(shí)間
T - 是考察時(shí)間長度(一天內(nèi)多長時(shí)間有用戶使用系統(tǒng))
并發(fā)用戶數(shù)峰值C^計(jì)算
C^ 約等于 C + 3 根號C
系統(tǒng)用戶數(shù) - 注冊用戶量 影響的是磁盤空間初始化性能環(huán)境 warm up 熱機(jī)*也就是說 模擬實(shí)際使用場景败明,用戶量之類的 磁盤到內(nèi)存的過程
關(guān)于 異地訪問服務(wù)器 響應(yīng)時(shí)間的差異 找運(yùn)維 - 在兩個(gè)防火墻之間注入網(wǎng)絡(luò)延時(shí) - 吞吐量 -
- 系統(tǒng)性能計(jì)數(shù)器 -
-
思考時(shí)間 - 更加真實(shí)的模擬用戶使用
用戶300的時(shí)候出現(xiàn)拐點(diǎn)液茎,說明飽和了,性能瓶頸乔妈,這種平直線多數(shù)是因?yàn)榫W(wǎng)絡(luò)問題蝙云,需要增加帶寬,丟包了
平直線部分如果是波浪線需要加服務(wù)器路召,內(nèi)存滿了勃刨,還是cpu滿了
每臺機(jī)器能創(chuàng)建多少個(gè)用戶 由1. 機(jī)器的內(nèi)存(物理內(nèi)存)和
2.jmeter 是一個(gè)java進(jìn)程 - 進(jìn)程需要一定的內(nèi)存資源-堆內(nèi)存
3.端口號,占用端口號分布不均 需要用主從機(jī)-分布式-負(fù)載均衡
一股淡、 安裝
mac版本
http://www.reibang.com/p/bce9077d883c
- 下載 pache-jmeter-5.0.tgz 放網(wǎng)盤了
- 需要java8的環(huán)境 java環(huán)境看前邊的筆記
- 配置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程序了
-
設(shè)置jmeter語言
通常是寫http的請求身隐,寫不了解的請求時(shí),可以用這個(gè)模板 - 關(guān)于jmeter的屬性設(shè)置
(1)/Users/lxr/apache-jmeter-5.0/bin/jmeter.properties
#language=en -> language=zh_CN
(2)分布式 remote_hosts ip地址逗號隔開
二唯灵、 jmeter 使用
1.配置元件
HTTP請求默認(rèn)值
HTTP消息頭管理
HTTPCookie管理器
HTTPCache管理器
2.監(jiān)聽器
①察看結(jié)果樹※
I:分析某個(gè)請求明細(xì)贾铝、詳情:請求頭、請求體早敬;響應(yīng)頭忌傻、響應(yīng)體
II:性能場景 分析請求錯(cuò)誤原因 之類的
②聚合報(bào)告 匯總統(tǒng)計(jì):請求數(shù)、響應(yīng)時(shí)間(平均搞监、90%、95%镰矿、min琐驴、max 毫秒)、錯(cuò)誤率、吞吐量(越高越好)绝淡、發(fā)送/接受量(帶寬)
③用表格查看結(jié)果(能體現(xiàn)起始時(shí)間)
④圖形結(jié)果
3.其他元件
①前置處理器(發(fā)送請求前執(zhí)行的元件宙刘。比如加密、)
②后置處理器(比如:提取數(shù)據(jù))
③定時(shí)器(1.思考時(shí)間-固定定時(shí)器牢酵;2.同步定時(shí)器-集合點(diǎn)幾點(diǎn)搶購悬包;3.隨機(jī)定時(shí)器;4.吞吐量定時(shí)器)
- 創(chuàng)建測試計(jì)劃 選擇保存位置
-
創(chuàng)建線程組 不做負(fù)載就線程數(shù)之類的全部 輸入1
- 增加HTTP請求 - 保存
測試環(huán)境正式環(huán)境 需要來回切換之類的所以 要有一個(gè) HTTP請求默認(rèn)值馍乙,里頭弄好了布近,其他的請求 一樣 就不用寫了
4.察看結(jié)果樹 看接口請求結(jié)果 線程組 右鍵 添加 監(jiān)聽 查看結(jié)果樹.csv
,圖中文件寫入選擇它丝格,運(yùn)行結(jié)果就會保存到這個(gè)路徑下的csv文件中
用表格查看結(jié)果 添加 - 監(jiān)聽器 - -
HTTP Cookie管理器 - 有些需要有cookie作為參數(shù)的接口需要 添加配置元件 HTTP Cookie管理器 添加了 放在這里就成了 自己就存起來了
- Token獲取
添加 http請求 返回token的${token}
-
響應(yīng)斷言 - 在要執(zhí)行斷言的 請求下添加 注意作用域撑瞧,可以拖拽過去
-
線程組下 右鍵 添加 監(jiān)聽器 斷言結(jié)果 ,然后運(yùn)行 綠三角
-
聚合報(bào)告
-
生成HTML報(bào)告
關(guān)于腳本錄制显蝌,可以用Fiddler抓包预伺,可以導(dǎo)出jmx文件 用jmeter打開
Part2、代理 腳本錄制
- 新建線程組
-
測試計(jì)劃 添加 非測試元件 HTTP代理服務(wù)器
-
打開瀏覽器(谷歌為例)
設(shè)置 -> 高級 -> 系統(tǒng) -> 打開您計(jì)算機(jī)的代理設(shè)置
導(dǎo)入證書 設(shè)置 - 高級 - 隱私設(shè)置和安全性 - 安全 - 下滑 管理證書
-
Windows
-
Mac
雙擊點(diǎn)開證書
- Requests Filtering - 包含模式 - 排除模式 設(shè)置正則
.*www\.wanandroid\.com.*
.*\.(js|css|PNG|jpg|ico|png|gif).*
-
啟動HTTP代理服務(wù)器
- 瀏覽網(wǎng)頁 即可錄制成功,添加 - 察看結(jié)果樹 能察看結(jié)果
prat3骆撇、蘋果電腦 錄制 蘋果手機(jī)
-
PC http代理 系統(tǒng)設(shè)置 - 網(wǎng)絡(luò) - 高級 - 代理 - 勾選輸入 - 好 - 應(yīng)用
-
jmeter HTTP代理服務(wù)器設(shè)置 - 點(diǎn)運(yùn)行 - bin文件夾下生成證書
- iPhone 安裝jmeter的信任證書
cd /Users/lxr/apache-jmeter-5.4/bin
python3 -m http.server 8080
訪問http://[ip地址]:8080
下載證書 - 并去設(shè)置里安裝信任證書
-
手機(jī)配置 代理
設(shè)置 - 無線局域網(wǎng) - ① i - 配置代理 - 電腦iP 剛電腦上網(wǎng)絡(luò)頁面就有 - 端口號8888 設(shè)置完了瞒御,手機(jī)連不上網(wǎng)了去檢查jmeterHTTP代理服務(wù)器啟動了沒有
-
啟動jmeterHTTP代理服務(wù)器后 這個(gè)彈框不能關(guān)閉
Part4、參數(shù)化
概要
- 參數(shù)化流程
- 找出需要做參數(shù)化的數(shù)據(jù)
- 準(zhǔn)備提供給參數(shù)化需要的數(shù)據(jù)源
- 關(guān)聯(lián)數(shù)據(jù) 把腳本里的常量變成變量(使用前面的數(shù)據(jù)源數(shù)據(jù))
- jmeter參數(shù)化方式
① CSV -- 需要配置的元件
② 函數(shù)式(隨機(jī)數(shù)艾船、時(shí)間 time葵腹、counter計(jì)數(shù)器)
③ 變量
④ 編程式
使用場景
-
CSV 賬號密碼 作用域看這個(gè)數(shù)據(jù)源給誰用
token 后置 JSON提取器
-
函數(shù)式
-
變量
- 編程式
- 引入外部的jar、java屿岂、class包
- 使用beanshell編程
Part5践宴、Jmeter用正則關(guān)聯(lián)
- 正則表達(dá)式
()括起來的部分就是要提取的部分
. 匹配任何字符串
- 一次或多次
? 找到第一個(gè)匹配項(xiàng)后就停止
應(yīng)用
獲取公眾號列表https://wanandroid.com/wxarticle/chapters/json
https://wanandroid.com/wxarticle/list/408/1/json
方法:GET
參數(shù):
公眾號 ID:拼接在 url 中,eg:405
公眾號頁碼:拼接在url 中爷怀,eg:1
用美元符號來應(yīng)用該變量
Part5阻肩、集合點(diǎn)技術(shù)
eg:到點(diǎn)搶購
給登錄請求 添加 - 定時(shí)器 - Sychronizing Timer (同步定時(shí)器)
兩個(gè)輸入項(xiàng)
模擬用戶組的數(shù)量(Number of simulated Users to Group by):集合夠多少個(gè)用戶/線程后發(fā)一次請求
运授?烤惊??0 就是跟線程組設(shè)置的線程數(shù)一樣吁朦?柒室?但是我的不是這樣 還是差幾毫秒的,填跟線程組設(shè)置 線程一樣的話 就是同時(shí)了
超時(shí)時(shí)間(Timeout):等待集合逗宜,直到超時(shí) ms 毫秒雄右,(設(shè)置值大于線程數(shù)量空骚,或者最后的一批個(gè)數(shù) 不夠一撥了比如 線程數(shù)5 設(shè)置2個(gè)一撥 最后一個(gè)等不齊,就只能等超時(shí)了)
Part6擂仍、實(shí)戰(zhàn)
新的點(diǎn)
-
僅一次控制器 某些請求 只想每個(gè)用戶執(zhí)行一次 添加 - 邏輯控制器 - 僅一次控制器
將請求拖進(jìn)里邊
-
測試計(jì)劃 中有多個(gè)線程組囤屹,默認(rèn)是同事執(zhí)行的 勾選后就是按照順序執(zhí)行,但是不影響setup 和 teardown
- 用戶自定義變量 將項(xiàng)目中用到的會重復(fù)使用會變的 全局的東西拿出來
腳本開發(fā) - 參數(shù)化數(shù)據(jù) 并發(fā)登錄逢渔,多用戶(不同賬號)
- 準(zhǔn)備好數(shù)據(jù)源
- 腳本中的常量 改成 變量 (將用戶名 密碼 用變量代替)
CSV 數(shù)據(jù)文件設(shè)置
Part 7
性能調(diào)優(yōu)https://www.bilibili.com/video/BV1xV411m7eo
- 聚合報(bào)告
- Grafana 性能調(diào)優(yōu)
- 命令行 top
分析過程 - 聚合報(bào)告 響應(yīng)時(shí)間 錯(cuò)誤率 吞吐量 來判斷 問題出現(xiàn)在哪里
eg:響應(yīng)時(shí)間大于預(yù)期值 - Grafana 性能調(diào)優(yōu) 通過Grafana查看是什么東西的問題
eg:發(fā)現(xiàn)CPU爆紅 使用率過高 - 命令行 top 查看具體哪個(gè)進(jìn)程使用CPU高
結(jié)合看
先用python代碼給 100個(gè)賬號密碼 寫入文件
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秒內(nèi)生成100個(gè)用戶肋坚,每秒5個(gè)用戶,持續(xù)執(zhí)行10秒鐘