Jmeter驗證碼圖片識別注冊接口壓力測試實戰(zhàn)

寫在前面

前段時間寫了一篇博文《Jmeter驗證碼注冊接口壓力測試實戰(zhàn)》,前兩天又登錄對應的網(wǎng)站看了一下灾常。發(fā)現(xiàn)原來滑動驗證的方式改成了圖片驗證碼的方式洼裤,防止用戶多次發(fā)送手機驗證碼蓬坡。

看到這里我本來不想再有太多想法了骏啰。

但是看到如下的注冊界面,將很“人性化”的將驗證碼圖片放在了第一行银舱。


修改后的登錄界面

我總感覺它在向我說:來呀瘪匿,你來呀!

我想了想寻馏,好吧......棋弥,那我試一下。


一诚欠、測試步驟

1顽染、使用tess4j編寫驗證碼圖片識別方法
2漾岳、編寫jmeter測試腳本:

包括獲取驗證碼接口、響應的驗證碼圖片保存粉寞、驗證碼圖片識別尼荆、獲取手機驗證碼請求接口等這幾個重要步驟的編寫

3、進行Jmeter驗證碼圖片識別唧垦,獲取手機驗證碼
4捅儒、接口壓力測試

二、使用tess4j實現(xiàn)驗證碼圖片識別

打開Eclipse振亮,新建一個java項目巧还,項目中添加tess4j的jar包,以及tessdata等文件坊秸。

代碼完成的功能為麸祷,輸入驗證碼圖片的路徑,輸出驗證碼圖片的識別結果妇斤,結果是一個字符串類型

具體代碼如下摇锋,注釋中已經(jīng)對每一行代碼進行了講解丹拯,主要是為了提高圖片字符識別的準確率站超。

大概的圖片識別處理步驟是:設置字符的識別方式是英文和數(shù)字,將圖片按區(qū)域識別每一個字符乖酬,把每一個字符截取下來死相,做灰度處理以及銳化,并且把這個字符對應區(qū)域的圖片放大咬像。最后識別這個經(jīng)過處理的圖片算撮。

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");
                //設置識別的方式為英文和數(shù)字
        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 {

        // 讀取圖片字節(jié)數(shù)組
        BufferedImage textImage = null;
        try {
            InputStream in = new FileInputStream(file);
            BufferedImage image = ImageIO.read(in);
                        //包括左右的空白處,分為6個區(qū)域
            int subWidth = image.getWidth() / 6;
                        
                       //截取第i個字符的圖片县昂,并將圖片灰度化
            textImage = ImageHelper.convertImageToGrayscale(ImageHelper
                    .getSubImage(image, subWidth * i, 0, subWidth+3,
                            image.getHeight())); // 對圖片進行處理
                        //圖片銳化
            textImage = ImageHelper.convertImageToBinary(textImage);
                        
                        //放大圖片肮柜,放大的倍數(shù)為5倍
            textImage = ImageHelper.getScaledInstance(textImage,
                    textImage.getWidth() * 5, textImage.getHeight() * 5); // 將圖片擴大5倍

        } catch (IOException e) {
            e.printStackTrace();
        }
                //返回識別后的單個字符的值
        return textImage;
    }
}

編寫好以上代碼后,簡單測試一下接口是否可用倒彰。結果如下审洞,說明接口可用,將main函數(shù)注釋


測試結果

然后將項目導出為Jar


導出

導出時設置以下選項待讳,并且直接將jar包導出到Jmeter的ext路徑下


設置導出選項

三芒澜、jmeter編寫測試腳本

1、Jmeter中測試java驗證碼識別接口可用

新建測試計劃创淡,在測試計劃中將jar包qingkeCode.jar添加進來痴晦。


添加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和察看結果樹碧浊,以便觀察運行結果砚尽。


測試java接口

運行腳本,察看運行結果辉词。結果沒有報錯必孤,并且輸出了路徑“D:\code\vcode\8.jpeg”中的圖片驗證碼的值,說明Java接口可以調用瑞躺。


查看調用結果
2敷搪、查看接口:使用F12開發(fā)者工具,查看http請求的流程幢哨,可以得到兩個需要的相關接口

獲取驗證碼圖片的GET請求赡勘,請求參數(shù)“d”是一個以毫秒為單位的時間戳

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

還有一個接口是發(fā)送手機驗證碼的POST請求接口,包括請求頭和請求體

//   請求頭
http://www.qk365.com/security/sendMobileCode.do

// 請求體捞镰,captcha為圖片驗證碼的值闸与,func為請求接口,mobile為手機號
captcha=DYJE
func=register
mobile=18569845214

編寫獲取驗證碼的http請求


獲取http

返回如下消息表示請求接口編寫成功


返回驗證碼
3岸售、保存驗證碼圖片并識別驗證碼

驗證碼圖片會保存在路徑“D:\code\vcode_src\”路徑下践樱,文件名會以1到n的順序增長


保存驗證碼圖片

這里先測試一下運行一次的情況,參數(shù)如下


腳本參數(shù)

運行結果凸丸,說明返回的驗證碼圖片進行了識別拷邢。后續(xù)只需要用這個識別的驗證碼進行獲取手機驗證碼的請求就可以了。


image.png
image.png
四屎慢、編寫獲取驗證碼請求腳本

獲取手機驗證碼時要帶上cookies和獲取圖片驗證碼返回的session值瞭稼,這樣才能成功。要問這一點我怎么知道的腻惠,是因為在編寫腳本時發(fā)現(xiàn)沒有帶這個值环肘,或者這個值是錯的會返回錯誤信息,然后根據(jù)經(jīng)驗集灌,看到的~

獲取手機驗證碼腳本如下悔雹,其中${vceode}是驗證碼圖片識別中得到的。


獲取手機驗證碼請求

添加cookie請求頭把瀏覽器的值拷貝放入即可


image.png

image.png

使用正則表達式绝页,在獲取驗證碼圖片中添加后處理荠商,取出session,將取出的session放入獲取手機驗證碼的請求頭中

獲取session


獲取session

session放入獲取手機驗證碼請求頭中


session放入獲取手機驗證碼請求頭中

五续誉、執(zhí)行腳本

最后執(zhí)行腳本莱没,結果如下。后期可以自己配置線程組中的參數(shù)進行接口壓力測試酷鸦。


執(zhí)行結果

五饰躲、接口壓力測試

添加計數(shù)器牙咏,計算器的值就是圖片名稱


添加計數(shù)器

最后需要保證每次請求的手機號碼不同,和上篇博文一樣使用CSV的方式設置請求的電話號碼


六嘹裂、參考博文

這篇博文有很多相關的知識點都是通過網(wǎng)上查找的妄壶,真正的站在巨人的肩膀上。這里給出相關的博客鏈接

jmeter調用jar包

使用jmeter實現(xiàn)對jar包調用

tess4j使用相關博文

Java驗證碼識別
Tess4J OCR簡單使用教程

圖片識別訓練相關的

Tesseract-OCR 字符識別---樣本訓練
Tesseract-OCR識別中文與訓練字庫實例
Windows環(huán)境安裝tesseract-ocr 4.00并配置環(huán)境變量
tesseract_ocr 字符識別基礎及訓練字庫寄狼、合并字庫
Tesseract-OCR的簡單使用與訓練

語言包


相關下載鏈接

tesseract
圖片轉換器


寫在最后

目前的圖片失敗率還是有誤差的丁寄,也許經(jīng)過圖片訓練可以提高識別率。關于訓練這方面的知識泊愧,自己也只是了解一點點伊磺。還需要繼續(xù)學習吧。

這個網(wǎng)站的注冊模塊有三個問題:

一是:驗證圖片有點簡單删咱,一般的圖片識別工具就能完成對驗證碼的識別

二是:界面控件的擺放順序不夠合理屑埋,個人認為應該把手機號輸入框放在前面

以上,希望看到這里能對你有所收獲

appium的安裝和使用 Jmeter驗證碼圖片識別注冊接口壓力測試實戰(zhàn) 下一篇
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末痰滋,一起剝皮案震驚了整個濱河市摘能,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌敲街,老刑警劉巖团搞,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異聪富,居然都是意外死亡莺丑,警方通過查閱死者的電腦和手機著蟹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門墩蔓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人萧豆,你說我怎么就攤上這事奸披。” “怎么了涮雷?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵阵面,是天一觀的道長。 經(jīng)常有香客問我洪鸭,道長样刷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任览爵,我火速辦了婚禮置鼻,結果婚禮上,老公的妹妹穿的比我還像新娘蜓竹。我一直安慰自己箕母,他們只是感情好储藐,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嘶是,像睡著了一般钙勃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上聂喇,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天辖源,我揣著相機與錄音,去河邊找鬼希太。 笑死同木,一個胖子當著我的面吹牛,可吹牛的內容都是我干的跛十。 我是一名探鬼主播彤路,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼芥映!你這毒婦竟也來了洲尊?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤奈偏,失蹤者是張志新(化名)和其女友劉穎坞嘀,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惊来,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡丽涩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了裁蚁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矢渊。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖枉证,靈堂內的尸體忽然破棺而出矮男,到底是詐尸還是另有隱情,我是刑警寧澤室谚,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布毡鉴,位于F島的核電站,受9級特大地震影響秒赤,放射性物質發(fā)生泄漏猪瞬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一入篮、第九天 我趴在偏房一處隱蔽的房頂上張望陈瘦。 院中可真熱鬧,春花似錦崎弃、人聲如沸甘晤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽线婚。三九已至遏弱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間塞弊,已是汗流浹背漱逸。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留游沿,地道東北人饰抒。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像诀黍,于是被迫代替她去往敵國和親袋坑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容

  • 主要學習的內容包括發(fā)送HTTP請求眯勾、HTTP信息頭管理器枣宫、HTTP cookies管理器、用戶定義的變量吃环、響應斷言...
    西西的博客閱讀 64,676評論 7 22
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理也颤,服務發(fā)現(xiàn),斷路器郁轻,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • 前兩天又是母親節(jié),每年的母親節(jié)我都會想起她渠啊。 可她一定不知道输吏,我一點都不愿意想起她,從她決絕的撇下我那晚開始替蛉,我就...
    連城三少閱讀 786評論 28 17
  • 文|王五 @1 6月7日清晨。 “小青啊拄氯,我接到塔石中學電話了躲查,你被錄取了!”一位高興的中年女人沖著房間里對看書的...
    村東頭的王五閱讀 270評論 0 0
  • 光陰似箭須留痕译柏,來日無多齒生恨镣煮。 天若有晴何故淚?淚飛總是傷心人鄙麦。
    平天下之文世界閱讀 128評論 2 2