μλ , νλΈλ₯΄! μ΄κ±΄ λ΄ νμνΈμ΄μΌ , JMeterλ₯Ό μ¬μ©νμ¬ λκΈ°μ΄μ λ©μμ§λ₯Ό λ°°μΉνλ μ΅μ μ λν΄ μ€λͺ νκ² μ΅λλ€.
μ°λ¦¬λ λκ·λͺ¨ μ°λ°© νμ¬λ₯Ό μν λ°μ΄ν° λ²μ€λ₯Ό λ§λ€κ³ μμ΅λλ€. λ€μν μμ² νμ, λ³ν, 볡μ‘ν λΌμ°ν . ν μ€νΈνλ €λ©΄ λκΈ°μ΄μ λ§μ λ©μμ§λ₯Ό 보λ΄μΌ ν©λλ€. μλμ μΌλ‘λ λͺ¨λ μ²μΆμ§μμ¬κ° κ°λΉν μ μλ κ³ ν΅μ λλ€.

μκ°
μ²μμλ μ΄ κ³ ν΅μ μ°ΈμμΌ νμ§λ§. λͺ¨λ κ²μ RFHUtilμμ μμλμμ΅λλ€. κ°λ ₯νμ§λ§ μ΄μνκ³ λ¬΄μμ΅λλ€. κΈμ, λΉμ μ Rusλ₯Ό μκ³ μμ΅λλ€.

μ΄λ€ κ²½μ°μλ νμ λΆκ°κ²°νμ§λ§ μ κ·Ήμ μΌλ‘ μ¬μ©νλ κ²½μ° κΎΈμ€ν κ°μν©λλ€.
νΈλ¦¬ν ν
μ€νΈλ λΆκ°λ₯ν©λλ€.
JMeterλ₯Ό μ¬μ©νλ©΄ λͺ¨λ κ²μ΄ λ μ¬μμ‘μ΅λλ€. 첫 λ²μ§Έ λ§μ€ν°λ§ λ¨κ³μ μ΅μν΄μ§ νμ ν볡ν ν μ€νΈμ λν ν¬λ§μ΄ μκΈ°κΈ° μμνμ΅λλ€.
λλ JMS κ²μμ λ° JMS ꡬλ μ μνλ¬λ₯Ό μ κ·Ήμ μΌλ‘ μ¬μ©ν©λλ€. JMS Point-to-Pointμ λ¬λ¦¬ μ΄ μμ μ¬μ©νκΈ° λ νΈλ¦¬ν΄ 보μμ΅λλ€. μλ₯Ό λ€μ΄, JMS Selectorμ Subscriberλ₯Ό μ¬μ©νλ©΄ λ³μλ₯Ό μ§μ ν μ μμ§λ§ Point-to-Pointμμλ κ·Έλ κ² ν μ μμ΅λλ€(λλ μ΄ λ°©λ²μ κ·Έλ€μ§ λͺ ννμ§ μμ΅λλ€).
μνλ¬ μ€λΉ
JMS κ²μμ
- μ€μ - κ° μν. μνμΉ λ³μλ₯Ό ν΅ν΄ λκΈ°μ΄/μ£Όμ λ₯Ό μ§μ ν κ²½μ° μ΄ μ΅μ μ μ¬μ©νμΈμ.
- λ§λ£(ms) = 120000. μ€ν¨ν κ²½μ° ν μ€νΈ μμ²μ 2λΆ νμ λκΈ°μ΄μμ μ¬λΌμ§λλ€.
- λΉμ§μμ μ λ¬ λͺ¨λλ₯Ό μ¬μ©νμκ² μ΅λκΉ? - μ§μ€. IBM ν΄λΉ μ§μ λͺ¨λλ κ°μμ€λ¬μ΄ μ€λ₯κ° λ°μνλ κ²½μ° μ μ‘λ λ©μμ§λ₯Ό μμ μ μΌλ‘ 보쑴ν©λλ€. λΉμ§μ λͺ¨λμμλ λ λΉ λ₯Έ κ΅νμ΄ κ°λ₯ν©λλ€. ν μ€νΈ λͺ©μ μμλ μλκ° λ μ€μν©λλ€.
κ° κ²μμμμ ꡬλ μκ° JMS μ νκΈ°μμ μ¬μ©ν jms μμ±μ μ€μ νμ΅λλ€. μ μΆν λλ§λ€ μ¬μ©μ λ§€κ°λ³μ ν μ€νΈ κ³ν μμμ μμμ κ°μ΄ μμ±λ©λλ€.

μ΄λ κ² νλ©΄ μ¬λ°λ₯Έ λ©μμ§λ₯Ό μ½μλμ§ νμΈν μ μμ΅λλ€.
μ¬μ ꡬμ±λ JMS κ²μμμ λ§μ§λ§ "곡백":

JMS ꡬλ μ
- μ€μ - κ° μν. κΈμ, λΉμ μ μ΄ν΄ν©λλ€.
- μ ν μκ°(ms) = 100000. 100μ΄ λμ λκΈ°ν νμλ μμ²μ΄ λκΈ°μ΄μ λμ°©νμ§ μμΌλ©΄ λ¬Έμ κ° λ°μν κ²μ λλ€.
- μν μ¬μ΄μ μ€μ§νμκ² μ΅λκΉ? - μ§μ€.
JMS μ νκΈ° - λ§€μ° νΈλ¦¬ν¨ . μ΅μ’ JMS κ°μ μ:

μ μ‘λ λ©μμ§μμ ν€λ¦΄ λ¬Έμλ₯Ό μ²λ¦¬νλ λ°©λ². JMeterμμλ κΈ°λ³Έμ μΌλ‘ κ΅μ ν μλ€κ² νμλ©λλ€. μ΄λ₯Ό νΌνκ³ μΈμ μ΄λμλ μλνκ³ κ°λ ₯ν κ²μ μ¦κΈ°λ €λ©΄ λ€μμ μνν΄μΌ ν©λλ€.
- JMeter "μ€νκΈ°"μ JVM μΈμλ₯Ό μΆκ°ν©λλ€.
-Dfile.encoding=UTF-8 - κ·Έλ£¨λΉ λΌμΈμ μ¬μ©νμ¬ κ΅¬λ
μμ JSR223 PostProcessorλ₯Ό μΆκ°ν©λλ€.
prev.setDataEncoding("UTF-8")
λ¬Έμλ₯Ό 보λ΄λ€
κ°μ₯ κ²μΌλ₯Έ μ΅μ . μλ‘ μμ±λ ν μ€νΈλ₯Ό λλ²κΉ νλ λ° μ ν©ν©λλ€. λλ μ΅μν μμ κ²μ 보λ΄μΌ νλ κ²½μ°. μ΅μ μ μ ννμΈμ λ©μμ§ μμ€ - ν μ€νΈ μμ λ©μμ§ λ³Έλ¬Έμ ν μ€νΈ λΈλ‘μ λ°°μΉν©λλ€.

νμΌ μ μ‘
κ°μ₯ μΌλ°μ μΈ μ΅μ μ λλ€. λλΆλΆμ μλ리μ€μ μ ν©ν©λλ€. μ΅μ μ μ ννμΈμ λ©μμ§ μμ€ - νμΌμμ νλμ λ©μμ§ κ²½λ‘λ₯Ό νμν©λλ€. νμΌ - νμΌ μ΄λ¦:

νμΌμ ν μ€νΈ νλλ‘ μ μ‘νκΈ°
κ°μ₯ λ€μν μ΅μ . λλΆλΆμ μλ리μ€μ μ ν© + λ λ²μ§Έ μ μ‘ μ΅μ μ΄ μλ JMS μ§μ κ°μμ μ¬μ©ν μ μμ΅λλ€.

λ°μ΄νΈ λ°°μ΄ μ λ¬
κ°μ₯ μ΄λ €μ΄ μ΅μ . μ곑, SMS λ° κ΅λ μμ΄ μμ²μ λ°μ΄νΈκΉμ§ μ ννκ³ μ νν μ μ‘μ νμΈνλ λ° μ ν©ν©λλ€. κΈ°λ³Έ JMeterμμλ μ΄ μμ μ μνν μ μμ΅λλ€. λλ μ΄κ²μ λν΄ νμ€ν λ€μμ΅λλ€.
κ·Έλμ λ€μ΄λ‘λλ₯Ό ν΄μΌ νμ΄μ μμ νκ³ JMS κ°μ μ.
λ©μλμμ λμ²΄λ¨ extractContent(..) μ :
buffer.append(bytesMessage.getBodyLength() + " bytes received in BytesMessage");on :
byte[] bytes = new byte[(int) bytesMessage.getBodyLength()];
bytesMessage.readBytes(bytes);
try {
buffer.append(new String(bytes, "UTF-8"));
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}JMeterλ₯Ό λ€μ λΉλνμ΅λλ€.
λ¨μ κ²μ JSR223 μνλ¬ λͺ κ°λ₯Ό μΆκ°νλ κ²λΏμ λλ€. 첫 λ²μ§Έλ κ²μμ/ꡬλ μ μ μ΄μ μ μμ λ°μ΄νΈκ° ν¬ν¨λ DAT νμΌμ μμ±νλ κ²μ λλ€.
import org.apache.commons.lang3.RandomUtils;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
vars.put("PATH_TO_BYTES", "C:temprandomBytes.dat");
File RESULT_FILE = new File(vars.get("PATH_TO_BYTES"));
byte[] arr = RandomUtils.nextBytes((int)(Math.random()*10000));
try {
FileOutputStream fos = new FileOutputStream(RESULT_FILE);
fos.write(arr);
fos.close();
} catch (IOException e) {
System.out.println("file not found");
}λ λ²μ§Έ - μ€ν¬λ¦½νΈ λμμ νμΌμ μμ ν©λλ€.
import java.io.File;
File RESULT_FILE = new File(vars.get("PATH_TO_BYTES"));
RESULT_FILE.delete();κ·Έλ¦¬κ³ Publisherμμ νμΌ κ²½λ‘λ₯Ό μΆκ°νλ κ²μ μμ§ λ§μΈμ.

λν JSR223 Assertion for Subscriberμ λν νμΈλ μμ΅λλ€. μμ€ λ°μ΄νΈλ₯Ό μμ μμ λκΈ°μ΄μ λμ°©νλ λ°μ΄νΈμ λΉκ΅ν©λλ€.
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
Path path = Paths.get(vars.get("PATH_TO_BYTES"), new String[0]);
byte[] originalArray = Files.readAllBytes(path);
byte[] changedArray = ctx.getPreviousResult().getResponseData();
System.out.println(changedArray.length);
if (Arrays.equals(originalArray, changedArray))
{
SampleResult.setResponseMessage("OK");
} else {
SampleResult.setSuccessful(false);
SampleResult.setResponseMessage("Comparison failed");
SampleResult.setResponseData("Bytes have changed","UTF-8");
IsSuccess=false;
}κ²°λ‘
μ€μ λ‘ λ§€μΌ μ¬μ©νλ νμ λ©μμ§λ₯Ό 보λ΄λ λ€ κ°μ§ λ°©λ²μ μ€λͺ νμ΅λλ€. μ΄ μ λ³΄κ° κ·νμ μΆμ λ μ½κ² λ§λ€μ΄μ£ΌκΈ°λ₯Ό λ°λλλ€. κ³μν΄μ νμͺ½ λμλ νκ° μκ³ λ€λ₯Έ μͺ½ λμλ λ°μ΄ν°λ² μ΄μ€λ νμΌ μμ€ν μ΄ μλ κ΅νμ ν μ€νΈν κ²½νμ λν΄ μ΄μΌκΈ°ν κ³νμ λλ€.
μκ°μ μ μ½νμΈμ. κ΄μ¬μ κ°μ Έμ£Όμ μ κ°μ¬ν©λλ€.

μΆμ² : habr.com
