在jmeter中有时候需要调用自定义函数进行加密、解密等拓展功能
本文通过识别验证码处理登录验证码为例,通过OS进程取样器,调用python函数实现
识别验证码的python函数源码
import base64
from io import BytesIO
from PIL import Image
import sys
import ddddocrdef 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 resif __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提取器
,可以提取出变量