JMeter與Python的多重交響:從入門到高級應用(上)
在性能測試領域,Apache JMeter已經成為測試專業人士的首選工具,用于模擬用戶行為、測量響應時間、評估系統性能。但在某些情境下,為了滿足特定需求,我們需要更多的靈活性,比如引入Python來進行特定操作或處理復雜邏輯。
Jython
Jython是Python語言的Java實現,它允許您在JMeter中使用Python腳本,不需要額外的JAR包。
一、下載并配置
(1) 官網下載地址:Downloads | Jython
(2) 網盤鏈接:downloads > Jython 提取碼:ux02
(3) 將下載的jar包放到Jmeter的安裝路徑/lib,如: D:\application\apache-jmeter-5.1.1\lib
() 切記,重啟 jmeter
二、使用技巧
新增一個JSR223,選擇語言為“jython”;
注意:由于這個包使用的python版本為 2.7,所以寫代碼的時候不能全搬python3的語法過來玩。
示例一:前后置腳本中寫python代碼。
# jsr223 前置代碼中編寫:
"""該腳本用于加密登錄信息"""
import hashlib
import sys
import time
import json
def password_srt(pubkey, password):
time_str = str(time.time())
sign_str = str(pubkey) + time_str + str(password)
sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest()
res = {'sign': sign, 'pubkey': pubkey, 'password': password}
res = json.dumps(res)
return res
result = password_srt(1234,5678)
log.info(result)
vars.put("secrity",result) # 設置到變量,為后續取樣器使用。
貼圖:
示例二:后置腳本中寫python代碼
# jsr223 后置腳本代碼
import json
result = prev.getResponseDataAsString(); # 固定寫法,獲取響應結果
log.info("------"+result) # 這里使用print 會打印不到日志里面來顯示。
json_data = json.loads(result) # 轉python識別的字典對象
token = json_data.get("token") # 獲取token值
log.info(token)
vars.put("token",token)
貼圖:
添加一個debug sample來檢查結果:
最終執行結果:
一些小Tips:
- 性能流淚: 使用 Python 腳本會引入性能問題,因為 Python 是一種解釋型語言,相比于 JMeter 自帶的 Java 腳本,Python 腳本的執行效率可能會稍低,勇哥踩過這個坑!!!
- 維護想哭: 邏輯分散在 JMeter 的測試計劃和 Python 腳本之間時,會導致維護困難;也不利于團隊協作!
- 依賴一坨翔: Python是2.7版本且難以支持第三方python庫使用,要寫復雜的代碼也是很頭疼的!
- 調試難上天: JMeter 中調試 Python 腳本真是看花眼,因為你看的信息都是jmeter輸出的,定位問題一言難盡!