不同環境的效能測試計劃
阿新 • • 發佈:2021-06-20
不同環境下的 JMeter 效能測試,設定基本一致,只是地址,賬戶等資訊不同,本文利用 Shell 指令碼和 JMeter 變數進行統一處理
安裝 JMeter
wget https://mirror.cogentco.com/pub/apache//jmeter/binaries/apache-jmeter-5.4.1.tgz
tar -zxvf apache-jmeter-5.4.1.tgz -C /opt
把執行目錄加入 PATH
export PATH="$PATH:/opt/apache-jmeter-5.4.1/bin"
- 這樣就可以從任何地方執行 jmeter 命令了
設定測試計劃
執行 JMeter GUI
jmeter
常規設定
- 右鍵單擊 Test Plan,把滑鼠移至 Add,再移至 Threads(User),點選 Thread Group,設定合適的 Number of Threads (users) 值
- 右鍵單擊 Test Plan 下新增的 Thread Group,把滑鼠移至 Add,再移至 Config Element,點選 HTTP Request Default,設定 Server Name or IP 為
${__P(HOST)}
,Port Number 為${__P(PORT)}
- 右鍵單擊 Thread Group,把滑鼠移至 Add,再移至 Sample,點選 HTTP Request,設定 Name 為 Frontend,Path 為 /
- 右鍵單擊 Thread Group,把滑鼠移至 Add,再移至 Sample,點選 HTTP Request,設定 Name 為 Backend,Path 為 /api/currentUser
- 右鍵單擊 Thread Group,把滑鼠移至 Add,再移至 Assertion,點選 Response Assertion,設定 Field to Test 為 Response Code,Patten Matching Rules 為 Equals,點選下方的 Add,輸入 200
__P
為 JMeter 獲取命令列引數的函式
許可權處理
以上的後端介面是需要先登入才能有許可權訪問的,許可權認證方式為 cookies 或 Authorization Header 中的 token,所以需要先獲取這個 token, 並在每次訪問時帶上
- 右鍵單擊 Test Plan,把滑鼠移至 Add,再移至 Threads(User),點選 setUp Thread Group
- 右鍵單擊 Test Plan 下新增的 setUp Thread Group,把滑鼠移至 Add,再移至 Sample,點選 HTTP Request,設定 Name 為 Login,Server Name or IP 為
${__P(HOST)}
,Port Number 為${__P(PORT)}
,HTTP Request 的方法為 POST,Path 為 /api/login/account,點選 下方的 Add,分別增加 Name 為 username 和 password,Value 為${__P(USERNAME)}
和${__P(PASSWORD)}
- 右鍵單擊 setUp Thread Group,把滑鼠移至 Add,再移至 Post Processors,點選 Regular Expression Extractor,設定 Name of created variable 為 token,Regular Expression 為
"token":"(.+?)"
,Template 為$1$
- 右鍵單擊 setUp Thread Group,把滑鼠移至 Add,再移至 Sample,點選 BeanShellSampler,設定 Name 為 Token,Script 為
${__setProperty(token, ${token})}
- 右鍵單擊 Thread Group,把滑鼠移至 Add,再移至 Config Element,點選 HTTP Cookie Manager,點選下方的 Add,設定 Name 為 token,Value 為
${__property(token)}
,Domain 為${__P(HOST)}:${__P(PORT)}
,Path 為 /
"token":"(.+?)"
將返回結果中的 token 的值捕捉為$1$
__setProperty
為 JMeter 設定全域性變數的函式__property
為 JMeter 獲取置全域性變數的函式
執行測試計劃
直接執行
以上的計劃設定,把地址和賬戶資訊都作為變數,可以在命令列傳遞,形如:
mkdir report
HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"
jmeter -n -t test.jmx \
-J HOST=127.0.0.1 \
-J PORT=80 \
-J USERNAME=USERNAME \
-J PASSWORD=PASSWORD \
-l log/local-20210620095700.txt \
-e -o report/local-20210620095700
report
資料夾必須存在,才能寫入報告目錄,所以首次需用mkdir
新建- 以上命令使用了 jmeter 的命令選項
-n
,-t
,-J
,-l
,-e
和-o
- local-20210620095700 裡面的 html 格式的測試報告,包括表格資料和視覺化圖表,如下圖所示
指令碼處理
以上命令相對繁瑣,而且不同環境需要重新設定每個引數,所以通過 Shell 指令碼簡化
設定變數
export LOCAL_HOST=127.0.0.1
export LOCAL_PORT=80
export LOCAL_USERNAME=USERNAME
export LOCAL_PASSWORD=PASSWORD
export TESTING_HOST=192.168.1.10
export TESTING_PORT=80
export TESTING_USERNAME=USERNAME
export TESTING_PASSWORD=PASSWORD
export PRODUCT_HOST=192.168.1.100
export PRODUCT_PORT=80
export PRODUCT_USERNAME=USERNAME
export PRODUCT_PASSWORD=PASSWORD
呼叫變數
#!/bin/sh
time=$(date "+%Y%m%d%H%M%S")
server=${1:-"local"}
prefix=$(echo $server | tr 'a-z' 'A-Z')_
HOST=${prefix}HOST
PORT=${prefix}PORT
USERNAME=${prefix}USERNAME
PASSWORD=${prefix}PASSWORD
if ! [ -d "report" ]
then
mkdir report
fi
HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"
jmeter -n -t test.jmx \
-J HOST=${!HOST} \
-J PORT=${!PORT} \
-J USERNAME=${!USERNAME} \
-J PASSWORD=${!PASSWORD} \
-l log/$server-$time.txt \
-e -o report/$server-$time
$(echo $VAR | tr 'a-z' 'A-Z')
表示全部大寫,等效於版本 4.0 以上的 Bash 的${VAR^^}
- 如果
report
資料夾存在就不同再重新建立,所以先通過-d
判斷 ${!HOST}
表示$HOST
的值為另一變數的名稱,最後解析出來的是這另一個變數的值
執行指令碼
本地環境
./test.sh
測試環境
./test.sh testing
正式環境
./test.sh product
- 在不設環境的時候,
${1:-"local"}
把預設環境設定為 local
總結
以上計劃和指令碼可以在此 GitHub 倉庫 下載,主要實現了:
- JMeter 通過接收命令列輸入的引數進行動態設定測試計劃
- 通過啟動執行緒組進行登入處理,並將 token 設定為全域性變數
- 通過 Shell 指令碼簡化命令並進行不同環境的統一處理