JMeter+tesseract工具实现图片验证码处理方式

背景:在web测试工作中,时常会遇到图片验证码处理;一般的方法:建议与开发沟通,设置万能验证码或是屏蔽代码,如果想挑战一下coding技术,那么就需要自己动手编写代码、利用第三方tesseract解析图片小工具。

1、tesseract的安装和使用请点击链接查看,安装完成后,自动add path,cmd出现以下信息,表示安装成功:JMeter+tesseract工具实现图片验证码处理方式_第1张图片

test:下载一张图片验证码,保存本地,tesseract测试一下,最后在当前目录下有一个result.txt文件:JMeter+tesseract工具实现图片验证码处理方式_第2张图片 

2、 如下截图,注册窗口的图片验证码,JMeter工具如何实现获取验证码处理(tesseract+jmeter(beanshell脚本)):

JMeter+tesseract工具实现图片验证码处理方式_第3张图片

3、首先要知道这个图片验证码是怎么生成的,代码实现,接口返回,通过抓包获取接口数据:JMeter+tesseract工具实现图片验证码处理方式_第4张图片

4、 JMeter开发测试脚本结构如下:JMeter+tesseract工具实现图片验证码处理方式_第5张图片

5、上面已经实现了保存接口生成的图片并通过调用cmd命令执行tesseract解析图片保存txt文本,JMeter-beanshell sampler读取txt的内容,JMeter内置函数方法vars提取赋值code给接口请求${code};

6、开始分析第一个beanshell 后置器脚本的代码(保存接口生成的图片):

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException;
import java.io.OutputStream; 
// beanshell编程,是泛型,理解就是没有严格的java编码风格,
//可以没有class类,只要有变量、方法,而且同beanshell中,方法直接调用。
//public class TestImage {       
//主函数,这里不用使用
/*	public static void main(byte[] args)throws IOException{                    
		Test("测试方法");  // 可见Test()括号l是什么类型不重要        
	}      
*/
	public static void Test (byte[] cgs) throws IOException {                    
		File f = new File("C:\\Users\\Administrator\\atest.jpg");                    
		OutputStream out = new FileOutputStream(f);// 如果文件不存在会自动创建                    
		out.write(cgs);// 因为是字节流,所以要转化成字节数组进行输出                    
		out.close();  //关闭字节流输出        
	} 
//} 
//获取响应的结果内容,保存为byte[] 
byte[] json = prev.getResponseData(); 
Test(json);
//调用上面的类:把二进制字节流转成图片输出,如有class类,则如下调用
//TestImage.Test(json);

 7、分析第二个beanshell 取样器脚本的代码(调用CMD命令执行tesseract):

Runtime r = Runtime.getRuntime();
String commad="cmd.exe /c tesseract atest.jpg result -l eng";
r.exec(commad);

8、分析第三个beanshell 取样器脚本的代码(文件、字节流I/O读取txt文本的内容):

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;

String filePath = "C:\\Users\\Administrator\\result.txt";
File file=new File(filePath);
InputStreamReader read = new InputStreamReader(new FileInputStream(file));
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
lineTxt = bufferedReader.readLine();
vars.put("code",lineTxt);
read.close();

9、结束语:这样解决了web功能测试遇到图片验证码的解决方法,假设tesseract解析图片没有成功,还只是保存了图片,建议可以参考导入Scanner类的解决方法,通过控制台手动输入图片验证码来给下一个接口请求。JMeter+tesseract工具实现图片验证码处理方式_第6张图片

你可能感兴趣的:(JMeter轻量级性能测试工具)