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

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

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

一、OS Process Sampler

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

梳理步骤:
  1. 先编写python脚本,可以接收参数也可以不接收参数,但是一定要使用 print 打印结果出来

  2. 如果是windows系统,编写一个.bat 文件,让jmeter直接执行文件,如果linux文件,则编写shell文件

  3. 启动jmeter,添加一个os process sample ,然后配置里面的信息

  4. 添加一个正则提取器,提取调用外部文件返回的结果就完成我们的所有操作了。

演练开始

下面开始步骤一的操作
如下:加密文件中的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代码的方案:

  1. 使用函数助手[jmeter-functions-execute-python-script-1.0.jar]
    链接:https://pan.baidu.com/s/1JrPW723es9rFbp18mNAvug?pwd=thjp 提取码:thjp
    这个就直接放入到:\lib\ext 下面就行,然后重启jmeter
    使用如图:
  1. 使用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代码,不是多此一举嘛?这里勇哥谈谈自己的几点愚见:

  1. 现有代码复用:有时候可能我们有一些现成的python代码用特定的操作或者业务逻辑,嵌入这些python代码就可以避免重复造轮子了

  2. 代码能力:很多测试人员的技术栈是偏python的,在使用jmeter做自动化测试时,利用python的灵活及强大的库工具就很容易入手了。

  3. 集成其他工具:可能有一些自己的python工具很好用,但是想集成到一起就可以考虑这样的偏方了

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

总结

以上就是勇哥今天为各位小伙伴准备的内容,如果你想了解更多关于Python自动化测试的知识和技巧,欢迎关注我:公众号\博客\CSDN\B站:测试玩家勇哥;我会不定期地分享更多的精彩内容。感谢你的阅读和支持!


题外话,勇哥打算把新建的技术交流群,打造成一个活跃的高质量技术群。工作中遇到的技术问题,都可以在里面咨询大家,还有工作内推的机会。有兴趣的小伙伴,欢迎加我(记得备注是进群还是报名学习)👇👇👇**

**👆**👆**👆长按上方二维码2秒,关注我**


勇哥,10年落魄测试老司机,技术栈偏python,目前在一家超大型房产公司担任自动化测试主管,日常工作比较繁杂,主要负责自动化测试,性能测试、软件质量管理及人员管理。工作之余专注于为粉丝进行简历修改、面试辅导、模拟面试、资料分享、一对一自动化测试教学辅导等副业发展。目前已服务十多位小伙伴,取得高薪offer。

关注公众号,测试干货及时送达

往期精选文章👇:
接口自动化测试项目2.0,让你像Postman一样编写测试用例,支持多环境切换、多业务依赖、数据库断言等
揭秘抓包利器:Python和Mitmproxy让您轻松实现接口请求抓取与分析!
构建高效的接口自动化测试框架思路
Pytest 快速入门
接口自动化之测试数据动态生成并替换
requests模块该如何封装?
接口自动化如何封装mysql操作
一文看懂python如何执行cmd命令
最通俗易懂python操作数据库
python-Threading多线程之线程锁
python正则一篇搞掂
性能测试之必备知识

性能分析思

Python + ChatGPT来实现一个智能对话的钉钉机器人
一文看懂python如何执行cmd命令
相关文章
|
2月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
372 7
|
3月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
372 1
|
3月前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
265 0
|
4月前
|
API 数据安全/隐私保护 开发者
Python自定义异常:从入门到实践的轻松指南
在Python开发中,自定义异常能提升错误处理的精准度与代码可维护性。本文通过银行系统、电商库存等实例,详解如何创建和使用自定义异常,涵盖异常基础、进阶技巧、最佳实践与真实场景应用,助你写出更专业、易调试的代码。
186 0
|
4月前
|
数据采集 监控 Java
Python 函数式编程的执行效率:实际应用中的权衡
Python 函数式编程的执行效率:实际应用中的权衡
281 102
|
4月前
|
IDE 开发工具 数据安全/隐私保护
Python循环嵌套:从入门到实战的完整指南
循环嵌套是Python中处理多维数据和复杂逻辑的重要工具。本文通过实例讲解嵌套循环的基本用法、常见组合、性能优化技巧及实战应用,帮助开发者掌握其核心思想,避免常见错误,并探索替代方案与进阶方向。
423 0
|
2月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
2月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
571 1
|
3月前
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
226 5

推荐镜像

更多