Apach JMeterによる負荷テストでファイルアップロード機能のテストを実施することになった。
実装したファイルアップロード機能はアップロードするファイルをBase64エンコードをしてJSON形式のリクエストに含めて送信する仕組みだったため、JMeter内でもBase64エンコードしたアップロードファイルを指定する必要がある。
当初、先にエンコードした結果をHTTPリクエストのBody Dataに直接貼り付けておこうと思ったが、貼り付けたり、Body Dataを確認する際にJMeterのGUIクライアントがフリーズしてしまうことがあったため、他の方法を考えることにした。
今回はその一つ対処方法として、JMeter内で指定したファイルをBase64エンコードしてJMeterの変数として扱う方法について解説する。
先にまとめ
「JSR223 PreProcessor」でBase64エンコードする処理を実装することで実現できる。
実装内容
スレッドグループ内のファイルアップロードを実施するHTTPリクエストの前に前処理>JSR223 PreProcessorを追加する。
追加すると、設定が開かれるのでまずは適切な名前をつけておく。
Scriptの部分にBase64エンコードをするための処理を記述する
import org.apache.commons.io.IOUtils
import java.nio.file.Files
import java.nio.file.Paths
import java.util.Base64
// JMeter変数からファイルパスを取得
String filePath = vars.get("filePath")
// ファイルを読み込み、Base64エンコード
byte[] fileContent = Files.readAllBytes(Paths.get(filePath))
String encodedString = Base64.getEncoder().encodeToString(fileContent)
// エンコードされたデータを変数に保存
vars.put("encodedFile", encodedString)
今回はfilePathという変数にbase64エンコードするファイルのパスが定義されているので、まずはそれを取り出し、読み込み、エンコードして、encodedFileという変数に結果を格納している