在jmeter中有时候需要调用自定义函数进行加密、解密等拓展功能
本文通过识别验证码处理登录验证码为例,通过OS进程取样器,调用python函数实现
识别验证码的python函数源码
import base64
from io import BytesIO
from PIL import Image
import sys
import ddddocr
def Save_captcha_picture(b64_code):
image_base64 = b64_code
# 对base64字符串进行解码
image_data = base64.b64decode(image_base64)
# 使用BytesIO创建一个可读的字节流
image_stream = BytesIO(image_data)
# 使用PIL打开字节流中的图片
image = Image.open(image_stream)
# 保存图片到文件系统
image.save("captcha.png", 'PNG') # 保存为PNG格式,你也可以根据需要选择其他格式
# 识别验证码
def captcha_code_recognition_func(img):
"""
识别验证码的函数
:param img: 图片
:return: 验证码字符串
"""
# 创建DdddOcr对象,show_ad=False可以关闭启动时的广告
ocr = ddddocr.DdddOcr(show_ad=False)
# 打开验证码图片文件并读取
with open(img, 'rb') as f:
img_bytes = f.read() # 读取图片文件的字节数据
# 使用classification方法进行验证码识别
res = ocr.classification(img_bytes)
# 打印识别结果
print({"CaptchaValue": res})
# return res
if __name__ == '__main__':
Save_captcha_picture(sys.argv[1])
captcha_code_recognition_func("captcha.png")
举例的图片是通过base64编码返回的, 所以
-
第一步通
Save_captcha_picture()
函数将Base64编码转换为图片,保存到本地 -
通过
captcha_code_recognition_func()
识别图片中的验证码, 通过ddddocr库进行识别 -
sys.argv[1]
: 接收命令行调用时的参数
将上述代码写入python文件
直接调用python文件
-
命令: 直接使用
python
, 本地已经安装了python环境 -
工作目录: 配置python文件的文件目录,注意:此处可以包含中文路径
-
命令行参数: 传递的第一个参数为python文件的名称, 传递的第二个参数为python文件执行时要传的参数,如果有第二个参数,继续增加参数
实际的执行命令效果是 python py文件 参数1
执行结果
识别出的验证码
结果可通过json提取器提取
通过.bat文件调用
第一步:创建一个 test.bat文件,指定执行py文件的命令
python C:\Users\74212\Desktop\temp\test\Base64_img.py %1
配置OS进程取样器
-
命令: 制定要运行的bat文件
-
命令行参数: 传递参数, 替换bat 文件中的 %1
执行结果
通过正则表达式提取值
输出值的提取
在函数中,将最后的结果通过print()
打印出来,可以在os提取器的响应界面进行展示
将展示的结果通过正则提取器
或者json提取器
,可以提取出变量