1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Jmeter验证码图片识别注册接口压力测试实战

Jmeter验证码图片识别注册接口压力测试实战

时间:2020-05-15 13:03:22

相关推荐

Jmeter验证码图片识别注册接口压力测试实战

写在前面

前段时间写了一篇博文《Jmeter验证码注册接口压力测试实战》,前两天又登录对应的网站看了一下。发现原来滑动验证的方式改成了图片验证码的方式,防止用户多次发送手机验证码。

看到这里我本来不想再有太多想法了。

但是看到如下的注册界面,将很“人性化”的将验证码图片放在了第一行。

我总感觉它在向我说:来呀,你来呀!

我想了想,好吧…,那我试一下。

一、测试步骤

1、使用tess4j编写验证码图片识别方法

2、编写jmeter测试脚本:

包括获取验证码接口、响应的验证码图片保存、验证码图片识别、获取手机验证码请求接口等这几个重要步骤的编写

3、进行Jmeter验证码图片识别,获取手机验证码

4、接口压力测试

二、使用tess4j实现验证码图片识别

打开Eclipse,新建一个java项目,项目中添加tess4j的jar包,以及tessdata等文件。

代码完成的功能为,输入验证码图片的路径,输出验证码图片的识别结果,结果是一个字符串类型

具体代码如下,注释中已经对每一行代码进行了讲解,主要是为了提高图片字符识别的准确率。

大概的图片识别处理步骤是:设置字符的识别方式是英文和数字,将图片按区域识别每一个字符,把每一个字符截取下来,做灰度处理以及锐化,并且把这个字符对应区域的图片放大。最后识别这个经过处理的图片。

package qingkeCode;import java.awt.Color;import java.awt.image.BufferedImage;import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import javax.imageio.ImageIO;import net.sourceforge.tess4j.Tesseract;import net.sourceforge.tess4j.TesseractException;import net.sourceforge.tess4j.util.ImageHelper;import net.sourceforge.tess4j.util.LoadLibs;public class PicToData {/*public static void main(String []args){for (Integer i=1; i<44; i++){System.out.println(GetData(i.toString()));}}*/public static String GetData(String picPath) {File file = new File(picPath);Tesseract instance = new Tesseract();//设置tess配置的路径File testDataFolderFile = LoadLibs.extractTessResources("tessdata");//设置识别的方式为英文和数字instance.setLanguage("eng");//加载配置instance.setDatapath(testDataFolderFile.getAbsolutePath());// 将验证码图片的内容识别为字符串String result = "";//对每一个字符单独识别for (int i = 1; i < 5; i++) {String c = "";try {c = instance.doOCR(change(file, i));} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}if (c.length()>0){}if (c.length()>0){result += c.substring(0, 1);}}return result;}public static BufferedImage change(File file, int i) throws Exception {// 读取图片字节数组BufferedImage textImage = null;try {InputStream in = new FileInputStream(file);BufferedImage image = ImageIO.read(in);//包括左右的空白处,分为6个区域int subWidth = image.getWidth() / 6;//截取第i个字符的图片,并将图片灰度化textImage = ImageHelper.convertImageToGrayscale(ImageHelper.getSubImage(image, subWidth * i, 0, subWidth+3,image.getHeight())); // 对图片进行处理//图片锐化textImage = ImageHelper.convertImageToBinary(textImage);//放大图片,放大的倍数为5倍textImage = ImageHelper.getScaledInstance(textImage,textImage.getWidth() * 5, textImage.getHeight() * 5); // 将图片扩大5倍} catch (IOException e) {e.printStackTrace();}//返回识别后的单个字符的值return textImage;}}

编写好以上代码后,简单测试一下接口是否可用。结果如下,说明接口可用,将main函数注释

然后将项目导出为Jar

导出时设置以下选项,并且直接将jar包导出到Jmeter的ext路径下

三、jmeter编写测试脚本

1、Jmeter中测试java验证码识别接口可用

新建测试计划,在测试计划中将jar包qingkeCode.jar添加进来。

添加BeanShell Sample,编写以下脚本,脚本的功能为导入jar包,并且识别路径“D:\code\vcode_src\8.jpeg”中的图片验证码的值。并且把值保存到了变量vcode中。

import qingkeCode.*;String code = "D:\\code\\vcode_src\\8.jpeg";String d = PicToData.GetData(code);vars.put("vcode",d);

添加Debug Sample和察看结果树,以便观察运行结果。

运行脚本,察看运行结果。结果没有报错,并且输出了路径“D:\code\vcode\8.jpeg”中的图片验证码的值,说明Java接口可以调用。

2、查看接口:使用F12开发者工具,查看http请求的流程,可以得到两个需要的相关接口

获取验证码图片的GET请求,请求参数“d”是一个以毫秒为单位的时间戳

/security/captcha.do?d=1527660630370

还有一个接口是发送手机验证码的POST请求接口,包括请求头和请求体

// 请求头/security/sendMobileCode.do// 请求体,captcha为图片验证码的值,func为请求接口,mobile为手机号captcha=DYJEfunc=registermobile=18569845214

编写获取验证码的http请求

返回如下消息表示请求接口编写成功

3、保存验证码图片并识别验证码

验证码图片会保存在路径“D:\code\vcode_src\”路径下,文件名会以1到n的顺序增长

这里先测试一下运行一次的情况,参数如下

运行结果,说明返回的验证码图片进行了识别。后续只需要用这个识别的验证码进行获取手机验证码的请求就可以了。

4、编写获取验证码请求脚本

获取手机验证码时要带上cookies和获取图片验证码返回的session值,这样才能成功。要问这一点我怎么知道的,是因为在编写脚本时发现没有带这个值,或者这个值是错的会返回错误信息,然后根据经验,看到的~

获取手机验证码脚本如下,其中${vceode}是验证码图片识别中得到的。

添加cookie请求头把浏览器的值拷贝放入即可

使用正则表达式,在获取验证码图片中添加后处理,取出session,将取出的session放入获取手机验证码的请求头中

获取session

session放入获取手机验证码请求头中

5、执行脚本

最后执行脚本,结果如下。后期可以自己配置线程组中的参数进行接口压力测试。

五、接口压力测试

添加计数器,计算器的值就是图片名称

最后需要保证每次请求的手机号码不同,和上篇博文一样使用CSV的方式设置请求的电话号码

写在最后

目前的图片失败率还是有误差的,也许经过图片训练可以提高识别率。关于训练这方面的知识,自己也只是了解一点点。还需要继续学习吧。

这个网站的注册模块有二个问题:

一是:验证图片有点简单,一般的图片识别工具就能完成对验证码的识别

二是:界面控件的摆放顺序不够合理,个人认为应该把手机号输入框放在前面

以上,希望看到这里能对你有所收获

资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取【保证100%免费】

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。