久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

        手機站
        千鋒教育

        千鋒學習站 | 隨時隨地免費學

        千鋒教育

        掃一掃進入千鋒手機站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學習站小程序
        隨時隨地免費學習課程

        當前位置:首頁  >  技術(shù)干貨  > jmeter使用Beanshell處理驗證碼

        jmeter使用Beanshell處理驗證碼

        來源:千鋒教育
        發(fā)布人:qyf
        時間: 2022-06-02 19:06:00 1654167960

          在接口測試、自動化測試工作中,你一定會遇到驗證碼處理的問題,很多初入測試、甚至測試老鳥的處理方式都比較粗暴,要么找開發(fā)設(shè)置為萬能驗證碼或者直接測試環(huán)境取消驗證碼,說實話這種方式也非常實用,畢竟驗證碼不是我們項目核心,手工測試一下就可以了,何必自動化實現(xiàn)呢?

          今天給大家介紹一種Jmeter接口測試時對驗證碼自動識別的方式,先說在前頭,該方式對于背景干擾的圖片識別率還是有點低,但是對于純色底紋的識別率基本100%,請擇情使用。

          主要思路步驟如下:

          1、通過接口獲取驗證碼

          2、驗證碼處理腳本

          3、jmeter中配置驗證碼處理腳本

          4、識別驗證碼

          一、驗證碼接口案例介紹

          在我們項目的登錄模塊中就帶有驗證碼,我們就以這個接口為例講解。

        圖片100

          我們可以在jmeter中實現(xiàn)這個接口,步驟如下。

          1、啟動jemter

          2、創(chuàng)建線程組->http采樣器、debug采樣器,http采樣器設(shè)置如下

        圖片101

          3、添加監(jiān)聽器->HTTP采樣器->保存結(jié)果到文件,配置如下,幾個選項都不勾選,默認文件名為1.png

        圖片102

          4、添加監(jiān)聽器->查看結(jié)果樹,保存、運行腳本。

        圖片103

          二、驗證碼處理代碼

          現(xiàn)在驗證碼文件已經(jīng)保存在本地了,需要將其讀取為base64加密格式,然后才能進行后續(xù)的驗證碼識別。

          下面我們將使用java,編寫圖片文件處理的文件,實現(xiàn)將base64加密的數(shù)據(jù)轉(zhuǎn)文圖片文件,也可以將圖片文件處理為base64加密文件,并將其導出為jar包備用。

          1、eclipse創(chuàng)建java工程

          2、導入sun.misc.BASE64Decoder.jar包,需自行下載

          創(chuàng)建文件夾lib

          復制sun.misc.BASE64Decoder.jar包到lib文件夾下

          選擇sun.misc.BASE64Decoder.jar,右鍵build path->add build path

          3、創(chuàng)建包、java文件,目錄結(jié)構(gòu)如下

        圖片114

          4、java文件ToImage內(nèi)容如下,如果文件名或者類名不同,需要調(diào)試代碼,注意事項。

          聲明類一定為public,否則jmeter調(diào)用會出現(xiàn)找不到類的問題

          main方法為調(diào)試代碼,導出包之前可以注釋掉

          package com.qf;

          import java.io.FileInputStream;

          import java.io.FileNotFoundException;

          import java.io.FileOutputStream;

          import java.io.IOException;

          import java.io.InputStream;

          import java.io.OutputStream;

          import Decoder.BASE64Decoder;

          import Decoder.BASE64Encoder;

          public class ToImage {

          public static void main(String[] args){

          // String base64Str = "iVBORw0KGgoAAAANSUhEUgAAAKAAAAA8CAIAAABuCSZCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAOq0lEQ·········

          // boolean b=false;

          // try {

          // b = GenerateImage(base64Str, "D:/gg.jpg");

          // } catch (IOException e) {

          // // TODO Auto-generated catch block

          // e.printStackTrace();

          // }

          // System.out.println(b);

          String aa = GetImageStr("E:/3-Learning/Deep-Learning-master/imageVerydow/1.png");

          System.out.println(aa);

          }

          /**

          * 圖片轉(zhuǎn)化成base64字符串

          * @param imgPath

          * @return

          */

          public static String GetImageStr(String imgPath) {// 將圖片文件轉(zhuǎn)化為字節(jié)數(shù)組字符串,并對其進行Base64編碼處理

          String imgFile = imgPath;// 待處理的圖片

          InputStream in = null;

          byte[] data = null;

          String encode = null; // 返回Base64編碼過的字節(jié)數(shù)組字符串

          // 對字節(jié)數(shù)組Base64編碼

          BASE64Encoder encoder = new BASE64Encoder();

          try {

          // 讀取圖片字節(jié)數(shù)組

          in = new FileInputStream(imgFile);

          data = new byte[in.available()];

          in.read(data);

          encode = encoder.encode(data);

          //加密代碼后的字符串會自動化換行,通過該句取消掉換行

          encode = encode.replaceAll("\r\n", "");

          } catch (IOException e) {

          e.printStackTrace();

          } finally {

          try {

          in.close();

          } catch (IOException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

          }

          }

          return encode;

          }

          /**

          * base64字符串轉(zhuǎn)化成圖片

          *

          * @param imgData

          *            圖片編碼

          * @param imgFilePath,存放到本地路徑

          * @return

          * @throws IOException

          */

          @SuppressWarnings("finally")

          public static boolean GenerateImage(String imgData, String imgFilePath) throws IOException { // 對字節(jié)數(shù)組字符串進行Base64解碼并生成圖片

          if (imgData == null) // 圖像數(shù)據(jù)為空

          return false;

          BASE64Decoder decoder = new BASE64Decoder();

          OutputStream out = null;

          try {

          out = new FileOutputStream(imgFilePath);

          // Base64解碼

          byte[] b = decoder.decodeBuffer(imgData);

          for (int i = 0; i < b.length; ++i) {

          if (b[i] < 0) {// 調(diào)整異常數(shù)據(jù)

          b[i] += 256;

          }

          }

          out.write(b);

          } catch (FileNotFoundException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

          } catch (IOException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

          } finally {

          out.flush();

          out.close();

          return true;

          }

          }

          }

          5、導出jar包

          代碼調(diào)試通過后,導出該工程jar包備用(jmeter中Beanshell處理器可以導入jar包并使用其功能)。

          選中工程名->export->jar file->配置導出的jar選項,如圖設(shè)置,點擊Finish完成導出。

          至此,我們就擁有了一個ToImage.jar的文件,該文件提供兩個方法:

          GetImageStr:圖片轉(zhuǎn)化成base64字符串

          GenerateImage:base64字符串轉(zhuǎn)化成圖片

        圖片104

          三、Jmeter實現(xiàn)驗證碼識別

          實現(xiàn)驗證碼識別,需要借助OCR(Optical Character Recognition,光學字符識別)插件,我們可以通過gitee下載一個,當然可以自己實現(xiàn)識別代碼。

          我們采用gitee上的開源的jmeter-captcha識別碼插件,可以下載其jar包直接使用,也可以下載源碼包二次開發(fā)。作者建議二次開發(fā),因為不同驗證碼的底紋干擾不同,處理方式也不太一樣,如果是打包的jar包,識別率就會收到影響。

          本文采用jar包直接演示,如需要可以直接找作者索要,源碼見gitee。

          https://gitee.com/changpei12315/jmeter-captcha

          1、下載jmeter-captcha,并配置到到{JMEMTER_HOME}/lib/ext/下

          https://gitee.com/hyj-jmeter/jmeter-captcha/releases

        圖片105

          2、下載tessdata語言包,為空默認在{JMEMTER_HOME}/lib/tessdata下

          https://gitee.com/changpei12315/tessdata_fast

          將下載的tessdata_fast中的文件復制到tessdata中即可。

        圖片106

          3、jmeter中測試計劃設(shè)置

          添加ToImage.jar包

          添加sun.misc.BASE64Decoder.jar包

          定義一個變量code,用于中轉(zhuǎn)存儲驗證碼數(shù)據(jù)

        圖片107

          4、jmeter采樣器后置處理設(shè)置

          線程組->后置處理器->Beanshell后置處理器,并設(shè)置如下:

          import com.qf.ToImage;

          //先將圖像文件讀入到此處,轉(zhuǎn)為base64

          String aaa = ToImage.GetImageStr("E:/1.png");

          System.out.println(aaa);

          //使用put方法將加密的圖片數(shù)據(jù)輸出到code變量(測試計劃中定義)中

          vars.put("code",aaa);

        圖片108

          線程組->后置處理器->驗證碼識別插件(完成前兩步才有),配置如下:

        圖片109

         

          5、運行查看結(jié)果

          其實本案例中的驗證碼的識別率很低,需要調(diào)整ocr對圖片的灰度、干擾線等代碼優(yōu)化。

        圖片110

          四、其他簡單驗證碼的識別

          如果驗證碼圖片比較簡單,沒有復雜底紋和干擾的話,識別率還是挺高的。

          1、白底純數(shù)字的驗證碼識別

          驗證碼識別插件設(shè)置語言為:eng

          Beanshell后置處理器設(shè)置讀入文件為:E:/sz.png

        圖片112

          3、白底純字母的驗證碼識別

          驗證碼識別插件設(shè)置語言為:eng

          Beanshell后置處理器設(shè)置讀入文件為:E:/zm.png

        圖片113

          4、白底純漢字的驗證碼識別

          驗證碼識別插件設(shè)置語言為:chi_sim

          Beanshell后置處理器設(shè)置讀入文件為:E:/hz.png 

          五、總結(jié)

          后續(xù)持續(xù)更新一篇對干擾優(yōu)化的文章,可以替換掉現(xiàn)有的jmeter-captcha.jar包。

          以及一篇深度學習的文章,通過學習算法訓練學習,可以有效提升識別準確率。歡迎大家的持續(xù)關(guān)注和點贊。

          更多關(guān)于軟件測試培訓的問題,歡迎咨詢千鋒教育在線名師,如果想要了解我們的師資、課程、項目實操的話可以點擊咨詢課程顧問,獲取試聽資格來試聽我們的課程,在線零距離接觸千鋒教育大咖名師,讓你輕松從入門到精通。

        tags:
        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
        請您保持通訊暢通,專屬學習老師24小時內(nèi)將與您1V1溝通
        免費領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學 138****2860 剛剛成功領(lǐng)取
        王同學 131****2015 剛剛成功領(lǐng)取
        張同學 133****4652 剛剛成功領(lǐng)取
        李同學 135****8607 剛剛成功領(lǐng)取
        楊同學 132****5667 剛剛成功領(lǐng)取
        岳同學 134****6652 剛剛成功領(lǐng)取
        梁同學 157****2950 剛剛成功領(lǐng)取
        劉同學 189****1015 剛剛成功領(lǐng)取
        張同學 155****4678 剛剛成功領(lǐng)取
        鄒同學 139****2907 剛剛成功領(lǐng)取
        董同學 138****2867 剛剛成功領(lǐng)取
        周同學 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        抖音小店照片要求尺寸多大

        在抖音平臺開設(shè)小店已經(jīng)成為了越來越多人的選擇,相信大家已經(jīng)在各大社交平臺上看到有不少小店的推廣。在抖音上,照片是展示產(chǎn)品的重要手段,因...詳情>>

        2023-10-08 16:14:25
        抖音招商團長托管服務費怎么退回來

        抖音招商團長托管服務是抖音為有意愿創(chuàng)作內(nèi)容并帶動其他創(chuàng)作者成為團隊成員的用戶提供的一種服務。通過該服務,招商團長可以自主組建團隊并得到...詳情>>

        2023-10-08 16:08:53
        抖音小店怎么做代銷

        抖音已經(jīng)成為了一個非常受歡迎的短視頻應用程序,在其中許多用戶都精心打造了自己的小店,用于銷售各種各樣的商品,獲取額外的收入。然而,要想...詳情>>

        2023-10-08 15:28:41
        怎樣開抖音小店帶貨賺錢

        隨著直播帶貨的火熱,越來越多的人開始嘗試通過抖音小店來開展帶貨業(yè)務。抖音小店是抖音直播帶貨的配套,可以讓用戶在購買直播中產(chǎn)品時就實現(xiàn)購...詳情>>

        2023-10-08 15:06:36
        能不能幫我打開抖音小店店鋪呢怎么弄

        抖音小店是近年來非?;鸨囊粋€網(wǎng)絡(luò)業(yè)務,也是提供了很多商業(yè)機會的平臺。對于一個創(chuàng)業(yè)者而言,開設(shè)抖音小店是一個不錯的選擇。但是,許多小店...詳情>>

        2023-10-08 15:01:21
        安远县| 岳阳县| 米易县| 阿坝县| 玉环县| 项城市| 饶河县| 无棣县| 贵州省| 阜平县| 钟山县| 云安县| 庄浪县| 兴文县| 仁寿县| 商城县| 楚雄市| 大竹县| 额敏县| 启东市| 呼和浩特市| 德化县| 龙川县| 辉县市| 长宁区| 宽城| 台北市| 宽甸| 连云港市| 应用必备| 麻城市| 麻栗坡县| 石屏县| 中江县| 敦煌市| 宣恩县| 涿鹿县| 白朗县| 四子王旗| 郯城县| 太谷县|