当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-09-25 10:39:51 319观看
导读接上文《JMeter与Python的多重交响:从入门到高级应用(上)》在性能测试领域,Apache JMeter已经成为测试专业人士的首选工具,用于模拟用户行为、测量响应时间、评估系统性能。但在某些情境下,为了满足特定需求,我们需要更多

接上文《JMeter与Python的多重交响:从入门到高级应用(上)》Qhj28资讯网——每日最新资讯28at.com

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

Qhj28资讯网——每日最新资讯28at.com

一、OS Process Sampler

在OS Process Sampler中,可以直接执行系统命令,这也包括执行Python脚本以及其他乱七八糟的脚本或者文件,但是我们这里只介绍关于调用python脚本的知识。Qhj28资讯网——每日最新资讯28at.com

1.梳理步骤

  • 先编写python脚本,可以接收参数也可以不接收参数,但是一定要使用 print 打印结果出来
  • 如果是windows系统,编写一个.bat 文件,让jmeter直接执行文件,如果linux文件,则编写shell文件
  • 启动jmeter,添加一个os process sample ,然后配置里面的信息
  • 添加一个正则提取器,提取调用外部文件返回的结果就完成我们的所有操作了。

2.演练开始

下面开始步骤一的操作

如下:加密文件中的python代码:Qhj28资讯网——每日最新资讯28at.com

import base64import sysfrom Crypto.Cipher import AESimport binasciidef add_to_16(text):    while len(text) % 16 != 0:        text += '/0'    return textdef 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加密,最后打印加密后的数据结果。Qhj28资讯网——每日最新资讯28at.com

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

windows举例,.bat 文件内容如下:Qhj28资讯网——每日最新资讯28at.com

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

上面文件内容就是在命令行执行python文件,由于前面的python文件接收参数,我们这里使用 %1 这个占位来接收jmeter传进去的参数,我们把文件命名为 :execute_python_script.batQhj28资讯网——每日最新资讯28at.com

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

添加一个OS Process Sampler:Qhj28资讯网——每日最新资讯28at.com

Qhj28资讯网——每日最新资讯28at.com

我们看下这个界面该如何配置:Qhj28资讯网——每日最新资讯28at.com

Qhj28资讯网——每日最新资讯28at.com

这会调用外部Python脚本,并传入参数input_param。Qhj28资讯网——每日最新资讯28at.com

最后一步操作

添加一个正则表达式提取器,编写正则,看看能不能提取到结果:Qhj28资讯网——每日最新资讯28at.com

Qhj28资讯网——每日最新资讯28at.com

最后我们用debug sample檢測最终结果:Qhj28资讯网——每日最新资讯28at.com

Qhj28资讯网——每日最新资讯28at.com

这样整个流程完成了,也就可以很方便的调用外部文件做接口自动化了。Qhj28资讯网——每日最新资讯28at.com

二、其他方案

这里再简单介绍两种能够处理python代码的方案:Qhj28资讯网——每日最新资讯28at.com

使用函数助手[jmeter-functions-execute-python-script-1.0.jar]链接:https://pan.baidu.com/s/1JrPW723es9rFbp18mNAvug?pwd=thjp 提取码:thjp这个就直接放入到:/lib/ext 下面就行,然后重启jmeter使用如图:Qhj28资讯网——每日最新资讯28at.com

Qhj28资讯网——每日最新资讯28at.com

使用BeanShell Sampler组件这个需要一定的java代码能力,大伙可以自行看着玩,因烦不建议,前面的os process sample 舒服,也就是说,既然都要写beanshell了,直接java代码干就完事了,哈哈!。示例代码,不保证能用:Qhj28资讯网——每日最新资讯28at.com

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代码,不是多此一举嘛?这里勇哥谈谈自己的几点愚见:Qhj28资讯网——每日最新资讯28at.com

  • 现有代码复用:有时候可能我们有一些现成的python代码用特定的操作或者业务逻辑,嵌入这些python代码就可以避免重复造轮子了
  • 代码能力:很多测试人员的技术栈是偏python的,在使用jmeter做自动化测试时,利用python的灵活及强大的库工具就很容易入手了。
  • 集成其他工具:可能有一些自己的python工具很好用,但是想集成到一起就可以考虑这样的偏方了

总之jmeter既然可以这样玩,那么给到用户也就多一种使用体验,多一种解决问题的可能性。Qhj28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-11289-0.htmlJMeter与Python的多重交响:从入门到高级应用(下)

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 编程新境界:从入门到精通Python中eval()函数的魔力

下一篇: C++11中auto关键字的使用详解

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • .NET 程序的 GDI 句柄泄露的再反思

    .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 虚拟键盘 API 的妙用

    虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 2023年,我眼中的字节跳动

    2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的“头腾
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • 回归OPPO两年,一加赢了销量,输了品牌

    回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • AI艺术欣赏体验会在上海梅赛德斯奔驰中心音乐俱乐部上演

    AI艺术欣赏体验会在上海梅赛德斯奔驰中心音乐俱乐部上演

    光影交错的镜像世界,虚实幻化的视觉奇观,虚拟偶像与真人共同主持,这些场景都出现在2019世界人工智能大会的舞台上。8月29日至31日,“AI艺术欣赏体验会”在上海
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
Top
Baidu
map