img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

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 block
                e.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”是一个以毫秒为单位的时间戳

http://www.qk365.com/security/captcha.do?d=1527660630370

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

//   请求头
http://www.qk365.com/security/sendMobileCode.do

// 请求体,captcha为图片验证码的值,func为请求接口,mobile为手机号
captcha=DYJE
func=register
mobile=18569845214

编写获取验证码的http请求

图片

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

图片

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

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

图片

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐