自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JMeter與Python的多重交響:從入門到高級應(yīng)用(下)

開發(fā) 測試
在性能測試領(lǐng)域,Apache JMeter已經(jīng)成為測試專業(yè)人士的首選工具,但在某些情境下,為了滿足特定需求,我們需要更多的靈活性,比如引入Python來進行特定操作或處理復(fù)雜邏輯。

接上文《JMeter與Python的多重交響:從入門到高級應(yīng)用(上)

在性能測試領(lǐng)域,Apache JMeter已經(jīng)成為測試專業(yè)人士的首選工具,用于模擬用戶行為、測量響應(yīng)時間、評估系統(tǒng)性能。但在某些情境下,為了滿足特定需求,我們需要更多的靈活性,比如引入Python來進行特定操作或處理復(fù)雜邏輯。

一、OS Process Sampler

在OS Process Sampler中,可以直接執(zhí)行系統(tǒng)命令,這也包括執(zhí)行Python腳本以及其他亂七八糟的腳本或者文件,但是我們這里只介紹關(guān)于調(diào)用python腳本的知識。

1.梳理步驟

  • 先編寫python腳本,可以接收參數(shù)也可以不接收參數(shù),但是一定要使用 print 打印結(jié)果出來
  • 如果是windows系統(tǒng),編寫一個.bat 文件,讓jmeter直接執(zhí)行文件,如果linux文件,則編寫shell文件
  • 啟動jmeter,添加一個os process sample ,然后配置里面的信息
  • 添加一個正則提取器,提取調(diào)用外部文件返回的結(jié)果就完成我們的所有操作了。

2.演練開始

下面開始步驟一的操作

如下:加密文件中的python代碼:

import base64
import sys
from Crypto.Cipher import AES
import binascii

def add_to_16(text):
    while len(text) % 16 != 0:
        text += '\0'
    return text

def encrypt(data, password):
    if isinstance(password, str):
        password = password.encode('utf8')
    bs = AES.block_size
    pad = lambda s: s + (bs - len(s) % bs) * chr(bs - len(s) % bs)
    cipher = AES.new(password, AES.MODE_ECB)
    data = cipher.encrypt(pad(data).encode('utf8'))
    encrypt_data = binascii.b2a_hex(data)  # 輸出hex
    # encrypt_data = base64.b64encode(data)         # 取消注釋,輸出Base64格式
    return encrypt_data.decode('utf8')

if __name__ == '__main__':
    data = sys.argv[1]  # 待加密數(shù)據(jù)
    # data = '1915'  # 待加密數(shù)據(jù)
    password = '5544223414143242332423423423423'  # 16,24,32位長的密碼(密鑰)
    password = add_to_16(password)
    encrypt_data = encrypt(data, password)
    # print('加密前數(shù)據(jù):{}\n======================='.format(data))
    print(f"sign={encrypt_data}")

    # decrypt_data = decrypt(encrypt_data, password)
    # print('解密后的數(shù)據(jù):{}'.format(decrypt_data))

上述代碼的大概邏輯就是接收傳進來的待加密字符串,然后進行AES加密,最后打印加密后的數(shù)據(jù)結(jié)果。

接著我們開始步驟二的操作用

windows舉例,.bat 文件內(nèi)容如下:

c:
cd C:\Users\chenyongzhi11\Desktop\
python .\do_AES.py %1

上面文件內(nèi)容就是在命令行執(zhí)行python文件,由于前面的python文件接收參數(shù),我們這里使用 %1 這個占位來接收jmeter傳進去的參數(shù),我們把文件命名為 :execute_python_script.bat

接著我們開始步驟三的操作

添加一個OS Process Sampler:

我們看下這個界面該如何配置:

這會調(diào)用外部Python腳本,并傳入?yún)?shù)input_param。

最后一步操作

添加一個正則表達式提取器,編寫正則,看看能不能提取到結(jié)果:

最后我們用debug sample檢測最終結(jié)果:

這樣整個流程完成了,也就可以很方便的調(diào)用外部文件做接口自動化了。

二、其他方案

這里再簡單介紹兩種能夠處理python代碼的方案:

使用函數(shù)助手[jmeter-functions-execute-python-script-1.0.jar]鏈接:https://pan.baidu.com/s/1JrPW723es9rFbp18mNAvug?pwd=thjp 提取碼:thjp這個就直接放入到:\lib\ext 下面就行,然后重啟jmeter使用如圖:

使用BeanShell Sampler組件這個需要一定的java代碼能力,大伙可以自行看著玩,因煩不建議,前面的os process sample 舒服,也就是說,既然都要寫beanshell了,直接java代碼干就完事了,哈哈!。示例代碼,不保證能用:

import java.io.BufferedReader;
import java.io.InputStreamReader;

//1. 命令里的路徑改成自己腳本的路徑  
String command = "/opt/homebrew/bin/python3 /Users/xxx/Code/python-mysql/gen_id.py";

Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(command);
 
pr.waitFor();
  
BufferedReader b = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line = "";
StringBuilder response = new StringBuilder();
while ((line = b.readLine()) != null) {
    response.append(line);
}
  
String response_data = response.toString();
  
System.out.println(response_data);
log.info(response_data);
b.close();

// 2. 定義Jmeter中引用的變量名
vars.put("xxx",response_data); //把結(jié)果賦值給變量 ,方便后面調(diào)用

By the way,很多小伙伴反饋說既然用jmeter了,干嘛還往里整python代碼,不是多此一舉嘛?這里勇哥談?wù)勛约旱膸c愚見:

  • 現(xiàn)有代碼復(fù)用:有時候可能我們有一些現(xiàn)成的python代碼用特定的操作或者業(yè)務(wù)邏輯,嵌入這些python代碼就可以避免重復(fù)造輪子了
  • 代碼能力:很多測試人員的技術(shù)棧是偏python的,在使用jmeter做自動化測試時,利用python的靈活及強大的庫工具就很容易入手了。
  • 集成其他工具:可能有一些自己的python工具很好用,但是想集成到一起就可以考慮這樣的偏方了

總之jmeter既然可以這樣玩,那么給到用戶也就多一種使用體驗,多一種解決問題的可能性。

責(zé)任編輯:趙寧寧 來源: 測試玩家勇哥
相關(guān)推薦

2023-09-16 19:33:45

JMeter性能測試

2024-04-11 14:00:28

2023-10-27 08:42:56

Python字典

2024-04-01 09:32:23

AccumulatePython工具

2025-01-07 14:42:09

2023-09-20 00:08:37

2024-10-17 09:57:30

2024-07-09 09:33:18

2021-12-12 18:15:06

Python并發(fā)編程

2024-02-26 08:52:20

Python傳遞函數(shù)參數(shù)參數(shù)傳遞類型

2020-07-07 10:50:19

Python丄則表達文本

2024-06-07 08:51:50

OpenPyXLPythonExcel文件

2017-06-26 09:15:39

SQL數(shù)據(jù)庫基礎(chǔ)

2025-03-28 06:01:00

TypeScript泛型開發(fā)

2023-05-09 08:34:51

PythonWith語句

2024-01-11 09:35:12

單元測試Python編程軟件開發(fā)

2012-02-29 00:49:06

Linux學(xué)習(xí)

2025-02-24 10:07:10

2024-06-18 08:21:31

2024-11-27 15:49:46

字符串Python
點贊
收藏

51CTO技術(shù)棧公眾號