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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 在性能测试领域,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命令
相关文章
|
1月前
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
73 20
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
1天前
|
开发者 Python
Python入门:8.Python中的函数
### 引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始,逐步讲解 Python 中的函数及其高级特性。
Python入门:8.Python中的函数
|
1天前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
1天前
|
程序员 UED Python
Python入门:3.Python的输入和输出格式化
在 Python 编程中,输入与输出是程序与用户交互的核心部分。而输出格式化更是对程序表达能力的极大增强,可以让结果以清晰、美观且易读的方式呈现给用户。本文将深入探讨 Python 的输入与输出操作,特别是如何使用格式化方法来提升代码质量和可读性。
Python入门:3.Python的输入和输出格式化
|
1天前
|
机器学习/深度学习 人工智能 算法框架/工具
Python入门:1.Python介绍
Python是一种功能强大、易于学习和运行的解释型高级语言。由**Guido van Rossum**于1991年创建,Python以其简洁、易读和十分工程化的设计而带来了庞大的用户群体和丰富的应用场景。这个语言在全球范围内都被认为是**创新和效率的重要工具**。
Python入门:1.Python介绍
|
1天前
|
缓存 算法 数据处理
Python入门:9.递归函数和高阶函数
在 Python 编程中,函数是核心组成部分之一。递归函数和高阶函数是 Python 中两个非常重要的特性。递归函数帮助我们以更直观的方式处理重复性问题,而高阶函数通过函数作为参数或返回值,为代码增添了极大的灵活性和优雅性。无论是实现复杂的算法还是处理数据流,这些工具都在开发者的工具箱中扮演着重要角色。本文将从概念入手,逐步带你掌握递归函数、匿名函数(lambda)以及高阶函数的核心要领和应用技巧。
Python入门:9.递归函数和高阶函数
|
1天前
|
存储 SQL 索引
Python入门:7.Pythond的内置容器
Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器:字符串(str)、列表(list)、元组(tuple)、字典(dict)和集合(set)。
Python入门:7.Pythond的内置容器
|
1天前
|
存储 Linux iOS开发
Python入门:2.注释与变量的全面解析
在学习Python编程的过程中,注释和变量是必须掌握的两个基础概念。注释帮助我们理解代码的意图,而变量则是用于存储和操作数据的核心工具。熟练掌握这两者,不仅能提高代码的可读性和维护性,还能为后续学习复杂编程概念打下坚实的基础。
Python入门:2.注释与变量的全面解析
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12

热门文章

最新文章

推荐镜像

更多