JMeter與Python的多重交響:從入門到高級(jí)應(yīng)用(上)
在性能測(cè)試領(lǐng)域,Apache JMeter已經(jīng)成為測(cè)試專業(yè)人士的首選工具,用于模擬用戶行為、測(cè)量響應(yīng)時(shí)間、評(píng)估系統(tǒng)性能。但在某些情境下,為了滿足特定需求,我們需要更多的靈活性,比如引入Python來(lái)進(jìn)行特定操作或處理復(fù)雜邏輯。
Jython
Jython是Python語(yǔ)言的Java實(shí)現(xiàn),它允許您在JMeter中使用Python腳本,不需要額外的JAR包。
一、下載并配置
(1) 官網(wǎng)下載地址:Downloads | Jython
(2) 網(wǎng)盤鏈接:downloads > Jython 提取碼:ux02
(3) 將下載的jar包放到Jmeter的安裝路徑/lib,如: D:\application\apache-jmeter-5.1.1\lib
() 切記,重啟 jmeter
二、使用技巧
新增一個(gè)JSR223,選擇語(yǔ)言為“jython”;
注意:由于這個(gè)包使用的python版本為 2.7,所以寫代碼的時(shí)候不能全搬python3的語(yǔ)法過來(lái)玩。
示例一:前后置腳本中寫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) # 設(shè)置到變量,為后續(xù)取樣器使用。
貼圖:
示例二:后置腳本中寫python代碼
# jsr223 后置腳本代碼
import json
result = prev.getResponseDataAsString(); # 固定寫法,獲取響應(yīng)結(jié)果
log.info("------"+result) # 這里使用print 會(huì)打印不到日志里面來(lái)顯示。
json_data = json.loads(result) # 轉(zhuǎn)python識(shí)別的字典對(duì)象
token = json_data.get("token") # 獲取token值
log.info(token)
vars.put("token",token)
貼圖:
添加一個(gè)debug sample來(lái)檢查結(jié)果:
最終執(zhí)行結(jié)果:
一些小Tips:
- 性能流淚: 使用 Python 腳本會(huì)引入性能問題,因?yàn)?Python 是一種解釋型語(yǔ)言,相比于 JMeter 自帶的 Java 腳本,Python 腳本的執(zhí)行效率可能會(huì)稍低,勇哥踩過這個(gè)坑?。?!
- 維護(hù)想哭: 邏輯分散在 JMeter 的測(cè)試計(jì)劃和 Python 腳本之間時(shí),會(huì)導(dǎo)致維護(hù)困難;也不利于團(tuán)隊(duì)協(xié)作!
- 依賴一坨翔: Python是2.7版本且難以支持第三方python庫(kù)使用,要寫復(fù)雜的代碼也是很頭疼的!
- 調(diào)試難上天: JMeter 中調(diào)試 Python 腳本真是看花眼,因?yàn)槟憧吹男畔⒍际莏meter輸出的,定位問題一言難盡!