接口测试 Jmeter 使用 tesseract 识别图片验证码

tangoliver · 2023年01月30日 · 最后由 tangoliver 回复于 2023年03月08日 · 7649 次阅读

准备

  1. 将 tess4j-3.4.8.jar 文件复制到 jmeter 的 lib/ext 文件夹下

链接:https://pan.baidu.com/s/1IEClXb1LKIOWTM7KD_KGgA
提取码:5suc

  1. 解压 Tess4J-3.4.8-src.zip 文件,将文件中的 Tess4J/lib 文件夹的 jar 包复制到 jmeter 的 lib 文件夹下(注意:如果文件夹下已存在可以不需要复制)

链接:https://pan.baidu.com/s/1H-OE0Q-ABmEF4MbXfDRR5Q
提取码:9qqy

3、解压后的 Tess4J\tessdata 文件夹,放到自己需要使用的文件目录,后面代码会使用到

识别方法

方法 1:验证码让程序员帮忙处理,写死固定的验证码
方法 2:通过图片识别 (本文主要说明该方法)

使用

打卡 Jmeter,创建线程组和请求,这里已获取验证码接口为请求,添加后置处理器,后置处理器填写如下代码
后置处理器脚本:

import java.io.*;
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;

String projectPath = System.getProperty("user.dir");

String imgPath= projectPath + "/project/LX/yanzhengma.jpg";//将验证码保存到本地文件中
byte[] responseBody = prev.getResponseData();
File imageFile = new File(imgPath);
FileOutputStream out = new FileOutputStream(imageFile);
out.write(responseBody);
out.flush();
out.close();


File imageFile1 = new File(imgPath);//读取图片数字
//Tesseract instance = new Tesseract();
ITesseract instance = new Tesseract();
instance.setDatapath(projectPath + "/project/LX/tessdata"); //上面第3步的目录
instance.setLanguage("eng");//英文库识别数字比较准确
content = instance.doOCR(imageFile1).replace("\n", "");
content = content.replace(" ", "");
log.info("---content:" + content);
vars.put("yanzhengma",content);

执行测试

共收到 10 条回复 时间 点赞

牛蛙,感谢大佬的分享

顶一个

链接失效了

复制进去后,报错啊

首次看帖 真是一名金人啊

陈平安 回复

查看下你这边引用的包,有些其他包不匹配

milu 回复

文件稍后会重新发新的地址

思路很好,但验证码背景杂物太多,识别的正确率会很低。还是方法 1 靠谱

yuweixx 回复

方法 1,是一劳永逸的方法,但针对向上回归就不合适,还是需要自己掌握点新方法

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册