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命令
相关文章
|
2天前
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
在数字时代,网络应用成为连接世界的桥梁。Python凭借简洁的语法和丰富的库支持,成为开发高效网络应用的首选。本文通过实时聊天室案例,介绍Python Socket编程的基础与进阶技巧。基础篇涵盖服务器和客户端的建立与数据交换;进阶篇则探讨多线程与异步IO优化方案,助力提升应用性能。通过本案例,你将掌握Socket编程的核心技能,推动网络应用飞得更高、更远。
18 1
|
5天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从零基础到实战应用
【9月更文挑战第15天】本文将引导读者从零开始学习Python编程,通过简单易懂的语言和实例,帮助初学者掌握Python的基本语法和常用库,最终实现一个简单的实战项目。文章结构清晰,分为基础知识、进阶技巧和实战应用三个部分,逐步深入,让读者在学习过程中不断积累经验,提高编程能力。
|
4天前
|
开发框架 缓存 数据库
探索Python中的装饰器:从入门到实践
【8月更文挑战第48天】本文将引导你进入Python装饰器的奇妙世界。不同于传统的“摘要”格式,我们将通过一段代码的演变,直观展示装饰器的魅力。文章不仅介绍基础概念,还将通过实例演示如何自定义装饰器,并探讨其在实际应用中的强大用途。让我们开始吧,一起深入理解这个改变函数行为的强大工具!
|
2天前
|
人工智能 数据挖掘 开发者
Python编程入门:从基础到实战
【9月更文挑战第18天】本文将带你走进Python的世界,从最基本的语法开始,逐步深入到实际的项目应用。无论你是编程新手,还是有一定基础的开发者,都能在这篇文章中找到你需要的内容。我们将通过详细的代码示例和清晰的解释,让你轻松掌握Python编程。
15 5
|
3天前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
4天前
|
存储 机器学习/深度学习 数据挖掘
深入浅出:Python编程入门与实践
【9月更文挑战第16天】本文以“深入浅出”的方式,引领读者步入Python编程的世界。从基础语法到实际应用,我们将一步步探索Python的魅力所在。无论你是编程新手,还是希望拓展技能的老手,这篇文章都将为你提供有价值的信息和指导。通过本文的学习,你将能够编写出简单而实用的Python程序,为进一步深入学习打下坚实的基础。让我们一起开始这段编程之旅吧!
|
10天前
|
存储 人工智能 数据挖掘
Python编程入门:从基础到实战
【9月更文挑战第10天】本文将引导你进入Python编程的世界,从基本语法到实际项目应用,逐步深入。我们将通过简单的例子和代码片段,帮助你理解并掌握Python编程的精髓。无论你是编程新手还是有一定经验的开发者,都能在这篇文章中找到有价值的信息。让我们一起开始Python编程之旅吧!
|
4天前
|
机器学习/深度学习 数据挖掘 程序员
Python编程基础:从入门到实践
【9月更文挑战第16天】本文是一篇Python编程的入门教程,旨在帮助初学者理解Python的基本概念和语法。文章首先介绍了Python的历史和特点,然后详细讲解了Python的基本语法,包括变量、数据类型、运算符、控制结构等。接着,文章通过一些实例代码,展示了如何使用Python进行基本的编程操作,如输入输出、条件判断、循环等。最后,文章还提供了一些学习资源和建议,帮助读者进一步学习和掌握Python编程。
|
7天前
|
SQL JavaScript 前端开发
用Java、Python来开发Hive应用
用Java、Python来开发Hive应用
18 6
|
8天前
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【9月更文挑战第13天】在开发Python Web应用时,安全性至关重要。本文通过问答形式,详细介绍如何防范SQL注入、XSS及CSRF等常见威胁。通过使用参数化查询、HTML转义和CSRF令牌等技术,确保应用安全。附带示例代码,帮助读者从入门到精通Python Web安全。
28 6