์๋
, ํ๋ธ๋ฅด! ์ด๊ฑด ๋ด ํ์ํธ์ด์ผ
์ฐ๋ฆฌ๋ ๋๊ท๋ชจ ์ฐ๋ฐฉ ํ์ฌ๋ฅผ ์ํ ๋ฐ์ดํฐ ๋ฒ์ค๋ฅผ ๋ง๋ค๊ณ ์์ต๋๋ค. ๋ค์ํ ์์ฒญ ํ์, ๋ณํ, ๋ณต์กํ ๋ผ์ฐํ . ํ ์คํธํ๋ ค๋ฉด ๋๊ธฐ์ด์ ๋ง์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด์ผ ํฉ๋๋ค. ์๋์ ์ผ๋ก๋ ๋ชจ๋ ์ฒ์ถ์ง์์ฌ๊ฐ ๊ฐ๋นํ ์ ์๋ ๊ณ ํต์ ๋๋ค.
์๊ฐ
์ฒ์์๋ ์ด ๊ณ ํต์ ์ฐธ์์ผ ํ์ง๋ง. ๋ชจ๋ ๊ฒ์ 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 ์ ํ๊ธฐ - ๋งค์ฐ ํธ๋ฆฌํจ
์ ์ก๋ ๋ฉ์์ง์์ ํค๋ฆด ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ. JMeter์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ต์ ํ ์๋ค๊ฒ ํ์๋ฉ๋๋ค. ์ด๋ฅผ ํผํ๊ณ ์ธ์ ์ด๋์๋ ์๋ํ๊ณ ๊ฐ๋ ฅํ ๊ฒ์ ์ฆ๊ธฐ๋ ค๋ฉด ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.
- JMeter "์คํ๊ธฐ"์ JVM ์ธ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
-Dfile.encoding=UTF-8
- ๊ทธ๋ฃจ๋น ๋ผ์ธ์ ์ฌ์ฉํ์ฌ ๊ตฌ๋
์์ JSR223 PostProcessor๋ฅผ ์ถ๊ฐํฉ๋๋ค.
prev.setDataEncoding("UTF-8")
๋ฌธ์๋ฅผ ๋ณด๋ด๋ค
๊ฐ์ฅ ๊ฒ์ผ๋ฅธ ์ต์ . ์๋ก ์์ฑ๋ ํ ์คํธ๋ฅผ ๋๋ฒ๊น ํ๋ ๋ฐ ์ ํฉํฉ๋๋ค. ๋๋ ์ต์ํ ์์ ๊ฒ์ ๋ณด๋ด์ผ ํ๋ ๊ฒฝ์ฐ. ์ต์ ์ ์ ํํ์ธ์ ๋ฉ์์ง ์์ค - ํ ์คํธ ์์ญ ๋ฉ์์ง ๋ณธ๋ฌธ์ ํ ์คํธ ๋ธ๋ก์ ๋ฐฐ์นํฉ๋๋ค.
ํ์ผ ์ ์ก
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ต์ ์ ๋๋ค. ๋๋ถ๋ถ์ ์๋๋ฆฌ์ค์ ์ ํฉํฉ๋๋ค. ์ต์ ์ ์ ํํ์ธ์ ๋ฉ์์ง ์์ค - ํ์ผ์์ ํ๋์ ๋ฉ์์ง ๊ฒฝ๋ก๋ฅผ ํ์ํฉ๋๋ค. ํ์ผ - ํ์ผ ์ด๋ฆ:
ํ์ผ์ ํ ์คํธ ํ๋๋ก ์ ์กํ๊ธฐ
๊ฐ์ฅ ๋ค์ํ ์ต์ . ๋๋ถ๋ถ์ ์๋๋ฆฌ์ค์ ์ ํฉ + ๋ ๋ฒ์งธ ์ ์ก ์ต์ ์ด ์๋ JMS ์ง์ ๊ฐ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐ์ดํธ ๋ฐฐ์ด ์ ๋ฌ
๊ฐ์ฅ ์ด๋ ค์ด ์ต์
. ์๊ณก, SMS ๋ฐ ๊ต๋ ์์ด ์์ฒญ์ ๋ฐ์ดํธ๊น์ง ์ ํํ๊ณ ์ ํํ ์ ์ก์ ํ์ธํ๋ ๋ฐ ์ ํฉํฉ๋๋ค. ๊ธฐ๋ณธ JMeter์์๋ ์ด ์์
์ ์ํํ ์ ์์ต๋๋ค.
๊ทธ๋์ ๋ค์ด๋ก๋๋ฅผ ํด์ผ ํ์ด์
๋ฉ์๋์์ ๋์ฒด๋จ 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