Jmeter「第三節(jié)」-圖片轉(zhuǎn)base64

在接口或性能測(cè)試中,會(huì)碰到接口的某些參數(shù)值是base64的,那就是調(diào)接口之前,得先把圖片轉(zhuǎn)換成base64。

如果只是簡(jiǎn)單的場(chǎng)景,可以事先把轉(zhuǎn)換好的base64,通過(guò)用戶自定義變量寫死一個(gè)。

但是復(fù)雜場(chǎng)景的時(shí)候,比如說(shuō)很多不同大小的圖片,大批量圖片等,為了盡量模擬實(shí)際場(chǎng)景,要求每次取不同的圖片,進(jìn)行穩(wěn)定性或性能測(cè)試。這個(gè)時(shí)候把所有圖片提前轉(zhuǎn)換,然后在存儲(chǔ),就不太方便了。

下面就來(lái)說(shuō)下用前置處理器beanshell自動(dòng)轉(zhuǎn)換圖片

用戶定義的變量

E:\jmeterjpg\

路徑后面的“\”不能省噢(如果省了,那需要在后續(xù)的beanshell里面加上,不然會(huì)找不到路徑的)

BeanShell 預(yù)處理程序-jdk8

本次作為功能演示,String b= "25k";這個(gè)目前寫死了,可以根據(jù)實(shí)際需要傳變量的

這里提供下思路哈:

1.jmeterjpg文件夾里面的圖片重命名 從1開始,遞增;

如果圖片超過(guò)100w,windows系統(tǒng)重命名會(huì)很慢的,建議在linux上直接改,改好后,在傳到windows本地;

2.通過(guò)隨機(jī)獲取或jmeter里面的計(jì)數(shù)器,作為一個(gè)變量,傳給“b”

import java.io.*;

import sun.misc.*;

String a= vars.get("path");

String b= "25k";

String a =a+b+".jpg";

String base64string=null;

InputStream inputStream = null;

byte[] data = null;

try {

inputStream = new FileInputStream(a);

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

inputStream.read(data);

BASE64Encoder encoder = new BASE64Encoder();

base64string = encoder.encode(data);

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

} catch (IOException e) {

throw new RuntimeException(e);

} finally {

if (null != inputStream) {

try {

inputStream.close();

} catch (IOException e) {

throw new RuntimeException(e);

}

}

}

String str=base64string.toString();

vars.put("base64str",str);

圖片轉(zhuǎn)base64

因?yàn)檗k公電腦的JDK環(huán)境是8,而家里的JDK環(huán)境是最新的13,發(fā)現(xiàn)BASE64Encoder方法在8上面是沒(méi)有問(wèn)題的,但是JDK13就會(huì)提示找不到。然后就在家里調(diào)試了下,發(fā)現(xiàn)jmeter是支持 org.apache.commons.codec.binary.Base64;這個(gè)的,于是就把執(zhí)行的代碼調(diào)整了下。這樣的話就減少了對(duì)JDK的依賴,兼容性好了很多;JDK8和JDK13 是沒(méi)有問(wèn)題的

import java.io.*;

import org.apache.commons.codec.binary.Base64;

String a= vars.get("path");

String b= "25k";

String a =a+b+".jpg";

byte[] data = null;

try {

InputStream in = new FileInputStream(a);

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

in.read(data);

in.close();

} catch (IOException e) {

e.printStackTrace();

}

Base64 base64 = new Base64();

vars.put("base64",base64.encodeToString(data));

調(diào)試取樣器

加入一個(gè)調(diào)試取樣器,等會(huì)看下運(yùn)行結(jié)果

運(yùn)行一下,看下結(jié)果:

jdk8:

兼容jdk8和jdk13的結(jié)果:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容