文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JMeter与Python的多重交响:从入门到高级应用(下)

2024-11-30 07:42

关注

在性能测试领域,Apache JMeter已经成为测试专业人士的首选工具,用于模拟用户行为、测量响应时间、评估系统性能。但在某些情境下,为了满足特定需求,我们需要更多的灵活性,比如引入Python来进行特定操作或处理复杂逻辑。

一、OS Process Sampler

在OS Process Sampler中,可以直接执行系统命令,这也包括执行Python脚本以及其他乱七八糟的脚本或者文件,但是我们这里只介绍关于调用python脚本的知识。

1.梳理步骤

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]  # 待加密数据
    # data = '1915'  # 待加密数据
    password = '5544223414143242332423423423423'  # 16,24,32位长的密码(密钥)
    password = add_to_16(password)
    encrypt_data = encrypt(data, password)
    # print('加密前数据:{}\n======================='.format(data))
    print(f"sign={encrypt_data}")

    # decrypt_data = decrypt(encrypt_data, password)
    # print('解密后的数据:{}'.format(decrypt_data))

上述代码的大概逻辑就是接收传进来的待加密字符串,然后进行AES加密,最后打印加密后的数据结果。

接着我们开始步骤二的操作用

windows举例,.bat 文件内容如下:

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

上面文件内容就是在命令行执行python文件,由于前面的python文件接收参数,我们这里使用 %1 这个占位来接收jmeter传进去的参数,我们把文件命名为 :execute_python_script.bat

接着我们开始步骤三的操作

添加一个OS Process Sampler:

我们看下这个界面该如何配置:

这会调用外部Python脚本,并传入参数input_param。

最后一步操作

添加一个正则表达式提取器,编写正则,看看能不能提取到结果:

最后我们用debug sample檢測最终结果:

这样整个流程完成了,也就可以很方便的调用外部文件做接口自动化了。

二、其他方案

这里再简单介绍两种能够处理python代码的方案:

使用函数助手[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); //把结果赋值给变量 ,方便后面调用

By the way,很多小伙伴反馈说既然用jmeter了,干嘛还往里整python代码,不是多此一举嘛?这里勇哥谈谈自己的几点愚见:

总之jmeter既然可以这样玩,那么给到用户也就多一种使用体验,多一种解决问题的可能性。

来源:测试玩家勇哥内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯