Jmeter日常使用-调用python3脚本进行验证码识别,包括批量并发

 题记:

上一篇文章说到通过监听器--保存响应到文件 把图片存储到本地,

本文记录通过python3脚本对图片进行验证码识别

 

前言:

Jmeter通过安装插件JSR223 Sampler可以支持python脚本编写,只支持python2.7,目前2.X版本已不维护,主流都是3.X以上,所以JSR223 Sampler在日常很多第三方库都不方便

 

1. 前期准备:

python3.7

ddddocr(第三方验证码识别库)

Jmeter 5.1

 

2. 编写python脚本:

实现对上一个文章的验证码识别:https://www.cnblogs.com/shoebill/p/15910975.html

import ddddocr

def picOcr():
    ocr = ddddocr.DdddOcr()
    with open(fr"E:\jmtest\test1.gif","rb") as f:
        img_bytes = f.read()
    res = ocr.classification(img_bytes)
    print(res) #一定要有打印才能获取到

if __name__ == '__main__':
    picOcr()

 3. Jmeter通过BeanShell Sampler,对python脚本进行引用读取:

import java.io.BufferedReader;
import java.io.InputStreamReader;
 
String command = "cmd /c D:\\XXX\\python\\XXXX\\envs\\20220124\\python.exe E:\\XXXX\\practice\\test0124.py"; #通过的是虚拟环境,本机直接用 python,通过命令执行本地的脚本,如果需要传参可以在末尾:-t ${XXX}
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);
b.close();
//System.out.println(response.toString());
vars.put("code",response.toString()); //把结果赋值给变量 ,方便后面调用

 

4. 结果:

 

 

5.实现验证码图片参数化,把验证码图片传到python脚本,并发验证

 第一步:先要修改python脚本,通过命令运行方向接收参数:

 

 

第二步修改Jmeter脚本:

 

1.定义保存验证码的图片变量名,用于后续传参;

2.保存文件路径要用“/”,因为python不支持"\"需要转义

3.修改BeanShell Sampler 脚本引用:

 

 

 

 

执行结果:

 

 

 

 

参考文献:https://www.freesion.com/article/4341750544/

posted @ 2022-02-21 18:54  沙丘蚂蚁慢慢爬  阅读(1154)  评论(0编辑  收藏  举报