How to encode an attachment to Base64 in Jmeter?
Asked Answered
B

6

6

I'm trying to encode a file to Base64 in Jmeter to test a web service using the following script:

String file = FileUtils.readFileToString(new File("${filepath}"), "UTF-8");
vars.put("file", new String(Base64.encodeBase64(file.getBytes("UTF-8"))));

This works fine for plain/text files and does not work for other file types correctly.

How could I make it work for other file types?

Basipetal answered 11/4, 2016 at 14:58 Comment(0)
A
8

Jmeter has many potions to convert a variable to "Base64", below are a few options

  1. Bean shell pre processor
  2. BeanShell PostProcessor
  3. BeanShell Sampler.

Below is the "bean shell" code, which used in "Bean shell pre processor" to convert variable to Base64

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

String emailIs= vars.get("session");

byte[] encryptedUid = Base64.encodeBase64(emailIs.getBytes());
vars.put("genStringValue",new String(encryptedUid));

Example :

Before Base64 :jdwqoeendwqqm12sdw

After Base64 :amR3cW9lZW5kd3FxbTEyc2R3

Converted using Jmeter :

enter image description here

enter image description here

enter image description here Converted Using base64 site:

enter image description here

Antionetteantioxidant answered 12/4, 2016 at 2:34 Comment(0)
C
2

As Groovy is now the preferred JSR223 script language in each JMeter Sampler, Pre- & PostProcessor, Listener, Assertion, etc. this task is pretty easy.

def fileAsBase64 = new File("${filepath}").bytes.encodeBase64().toString()
vars.put("file", fileAsBase64)

Or as one liner:

vars.put("file", new File("${filepath}").bytes.encodeBase64().toString())

That's it.

Coralloid answered 27/2, 2019 at 10:32 Comment(0)
B
1

Use the function ${__base64Encode(nameofthestring)} to encode the string value and ${__base64Decode(nameofthestring)} to decode the string value.

Brade answered 28/8, 2019 at 14:37 Comment(0)
B
0

Your issue comes from the fact that you're considering binary files as text when reading them which is wrong.

Use this for reading the file:

Then encode the byte array in Base64

Baum answered 11/4, 2016 at 19:44 Comment(1)
I tried the following and didn't work. byte[] bytes = FileUtils.readFileToByteArray(new File(("${filepath}").getBytes())); vars.put("file",new String(Base64.encodeBase64(bytes)));Basipetal
E
0

Try this

import org.apache.commons.codec.binary.Base64;
String forEncoding = vars.get("userName") + ":" + vars.get("passWord");
byte[] token = Base64.encodeBase64(forEncoding.getBytes());
vars.put("token", new String(token));
Echikson answered 4/1, 2019 at 6:42 Comment(0)
F
0

Alternative for this is to directly create a groovy function in User Defined Variable as

${__groovy(new File(vars.get("filepath")).bytes.encodeBase64().toString(),)}
Firetrap answered 6/8, 2021 at 9:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.