ืชื•ืจื™ื ื•-JMeter: ืฉื™ืชื•ืฃ ืขื ืžืคืจืกื ื•ืžื ื•ื™

ืฉืœื•ื, ื”ื‘ืจ! ื–ื” ื”ืžืฉืš ืœืฉืœื™ ืคืจืกื•ื ืงื•ื“ื, ืฉื‘ื• ืื“ื‘ืจ ืขืœ ืืคืฉืจื•ื™ื•ืช ืœื”ืฆื‘ืช ื”ื•ื“ืขื•ืช ื‘ืชื•ืจื™ื ื‘ืืžืฆืขื•ืช JMeter.

ืื ื—ื ื• ืžื™ื™ืฆืจื™ื ืื•ื˜ื•ื‘ื•ืก ื ืชื•ื ื™ื ืขื‘ื•ืจ ื—ื‘ืจื” ืคื“ืจืœื™ืช ื’ื“ื•ืœื”. ืคื•ืจืžื˜ื™ื ืฉื•ื ื™ื ืฉืœ ื‘ืงืฉื•ืช, ื˜ืจื ืกืคื•ืจืžืฆื™ื•ืช, ื ื™ืชื•ื‘ ืžื•ืจื›ื‘. ืœืฆื•ืจืš ื‘ื“ื™ืงื”, ืืชื” ืฆืจื™ืš ืœืฉืœื•ื— ื”ืจื‘ื” ื”ื•ื“ืขื•ืช ืœืชื•ืจ. ื‘ืื•ืคืŸ ื™ื“ื ื™ ื”ื•ื ื›ืื‘ ืฉืœื ื›ืœ ื›ื™ืจื•ืคืจืงื˜ ื™ื›ื•ืœ ืœื”ืชืžื•ื“ื“.

ืชื•ืจื™ื ื•-JMeter: ืฉื™ืชื•ืฃ ืขื ืžืคืจืกื ื•ืžื ื•ื™

ืžื‘ื•ื

ืœืžืจื•ืช ืฉื”ื™ื™ืชื™ ืฆืจื™ืš ืœื”ืฉืœื™ื ืขื ื”ื›ืื‘ ื”ื–ื” ื‘ื”ืชื—ืœื”. ื”ื›ืœ ื”ืชื—ื™ืœ ืขื RFHUtil. ืขื•ืฆืžืชื™, ืื‘ืœ ืžื‘ื™ืš ื•ืžืคื—ื™ื“: ื•ื‘ื›ืŸ, ืืชื” ืžื›ื™ืจ ืืช ืจื•ืก.

ืชื•ืจื™ื ื•-JMeter: ืฉื™ืชื•ืฃ ืขื ืžืคืจืกื ื•ืžื ื•ื™

ื”ื›ืจื—ื™ ื‘ืžืงืจื™ื ืžืกื•ื™ืžื™ื, ืืš ืคื•ื—ืช ื‘ื”ืชืžื“ื” ื‘ืžืงืจื” ืฉืœ ืฉื™ืžื•ืฉ ืคืขื™ืœ.
ืื™ ืืคืฉืจ ืœืขืฉื•ืช ืื™ืชื• ื‘ื“ื™ืงื” ื ื•ื—ื”.

ืขื JMeter ื”ื›ืœ ื”ืคืš ืœืงืœ ื™ื•ืชืจ. ืœืื—ืจ ื”ืฉืœื‘ ื”ืจืืฉื•ืŸ ืฉืœ ืžืืกื˜ืจื™ื ื’ ื•ื”ืชืจื’ืœื•ืช ืืœื™ื•, ื”ื—ืœื” ืœื”ืชืขื•ืจืจ ื”ืชืงื•ื•ื” ืœืžื‘ื—ืŸ ืžืื•ืฉืจ.

ืื ื™ ืžืฉืชืžืฉ ื‘ืื•ืคืŸ ืคืขื™ืœ ื‘ืกืžืคืœืจื™ื ืฉืœ JMS Publisher ื•-JMS Subscriber. ื‘ื ื™ื’ื•ื“ ืœ-JMS Point-to-Point, ืฆืžื“ ื–ื” ื ืจืื” ื ื•ื— ื™ื•ืชืจ ืœืฉื™ืžื•ืฉ. ืœื“ื•ื’ืžื”, ืขื Subscriber ื‘-JMS Selector ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ืžืฉืชื ื”, ืื‘ืœ ืขื Point-to-Point ืืชื” ืœื ื™ื›ื•ืœ (ืื• ืฉื™ื˜ื” ื–ื• ืื™ื ื” ื‘ืจื•ืจื” ื‘ืžื™ื•ื—ื“).

ื”ื›ื ืช ื“ื’ื™ืžื•ืช

ืžื•ืฆื™ื ืœืื•ืจ ืฉืœ JMS

  • ื”ื’ื“ืจื” - ื›ืœ ืžื“ื’ื. ืืคืืฆ'ื™ ืžืžืœื™ืฆื” ื”ืฉืชืžืฉ ื‘ืืคืฉืจื•ืช ื–ื• ืื ืชื•ืจื™ื/ื ื•ืฉืื™ื ืžืฆื•ื™ื ื™ื ื‘ืืžืฆืขื•ืช ืžืฉืชื ื™ื.
  • ืชืคื•ื’ื” (ms) = 120000. ื‘ืžืงืจื” ืฉืœ ื›ืฉืœ, ื‘ืงืฉื•ืช ื‘ื“ื™ืงื” ื™ื™ืขืœืžื• ืžื”ืชื•ืจ ืœืื—ืจ 2 ื“ืงื•ืช.
  • ื”ืื ืœื”ืฉืชืžืฉ ื‘ืžืฆื‘ ืžืฉืœื•ื— ืœื ืžืชืžืฉืš? - ื ื›ื•ืŸ. IBM ืžืืฉืจืชืžืฆื‘ ืžืชืžืฉืš ืžื‘ื˜ื™ื— ืฉื™ืžื•ืจ ืืžื™ืŸ ืฉืœ ื”ื•ื“ืขื•ืช ืžืฉื•ื“ืจื•ืช ื‘ืžืงืจื” ืฉืœ ื›ืฉืœ ืคืชืื•ืžื™. ื•ื”ื—ืœืคื” ืžื”ื™ืจื” ื™ื•ืชืจ ื‘ืžืฆื‘ ืœื ืžืชืžืฉืš. ืœืžื˜ืจื•ืช ื‘ื“ื™ืงื”, ื”ืžื”ื™ืจื•ืช ื—ืฉื•ื‘ื” ื™ื•ืชืจ.

ื‘ื›ืœ Publisher ืื ื™ ืžื’ื“ื™ืจ ืžืืคื™ื™ืŸ jms ืฉื”-Subscriber ื™ืฉืชืžืฉ ื‘ื• ื‘-JMS Selector. ืขื‘ื•ืจ ื›ืœ ื”ื’ืฉื”, ื ื•ืฆืจ ืขืจืš ืืงืจืื™ ื‘ืจื›ื™ื‘ ืชื•ื›ื ื™ืช ื”ื‘ื“ื™ืงื” ืฉืœ ืคืจืžื˜ืจื™ ืžืฉืชืžืฉ:

ืชื•ืจื™ื ื•-JMeter: ืฉื™ืชื•ืฃ ืขื ืžืคืจืกื ื•ืžื ื•ื™

ื›ืš ืชื•ื›ืœื• ืœื”ื™ื•ืช ื‘ื˜ื•ื—ื™ื ืฉื”ื”ื•ื“ืขื” ื”ื ื›ื•ื ื” ื ืงืจืืช.

ื”"ืจื™ืง" ื”ืื—ืจื•ืŸ ืฉืœ JMS Publisher ืžื•ื’ื“ืจ ืžืจืืฉ:

ืชื•ืจื™ื ื•-JMeter: ืฉื™ืชื•ืฃ ืขื ืžืคืจืกื ื•ืžื ื•ื™

ืžื ื•ื™ JMS

  • ื”ื’ื“ืจื” - ื›ืœ ืžื“ื’ื. ื•ื‘ื›ืŸ, ืืชื” ืžื‘ื™ืŸ.
  • ืคืกืง ื–ืžืŸ (ms) = 100000. ืื ื”ื‘ืงืฉื” ืœื ืžื’ื™ืขื” ืœืชื•ืจ ืœืื—ืจ 100 ืฉื ื™ื•ืช ืฉืœ ื”ืžืชื ื”, ืื– ืžืฉื”ื• ื”ืฉืชื‘ืฉ.
  • ืœืขืฆื•ืจ ื‘ื™ืŸ ื“ื’ื™ืžื•ืช? - ื ื›ื•ืŸ.

JMS Selector - ื“ื™ ื ื•ื— ื“ื‘ืจ. ืžื ื•ื™ ืกื•ืคื™ ืฉืœ JMS:

ืชื•ืจื™ื ื•-JMeter: ืฉื™ืชื•ืฃ ืขื ืžืคืจืกื ื•ืžื ื•ื™

ื›ื™ืฆื“ ืœื”ืชืžื•ื“ื“ ืขื ื”ืืœืคื‘ื™ืช ื”ืงื™ืจื™ืœื™ ื‘ื”ื•ื“ืขื•ืช ื”ืžื•ืขื‘ืจื•ืช. ื‘-JMeter, ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืœืื—ืจ ื”ื’ื”ื”, ื”ื•ื ืžื•ืฆื’ ื‘ืฆื•ืจื” ืขืงื•ืžื”. ื›ื“ื™ ืœื”ื™ืžื ืข ืžื›ืš ื•ืœื™ื”ื ื•ืช ืžื”ื’ื“ื•ืœ ื•ื”ืขื•ืฆืžืชื™ ืชืžื™ื“ ื•ื‘ื›ืœ ืžืงื•ื, ืขืœื™ืš:

  1. ื”ื•ืกืฃ ืืจื’ื•ืžื ื˜ JVM ืœ"ืžืฉื’ืจ" JMeter:
    -Dfile.encoding=UTF-8
  2. ื”ื•ืกืฃ ืืช JSR223 PostProcessor ืœืžื ื•ื™ ืขื ืงื• ื’ืจื•ื‘ื™:
    prev.setDataEncoding("UTF-8")

ืฉืœื— ื˜ืงืกื˜

ื”ืื•ืคืฆื™ื” ื”ื›ื™ ืขืฆืœื ื™ืช. ืžืชืื™ื ืœืื™ืชื•ืจ ื‘ืื’ื™ื ื‘ืžื‘ื—ื ื™ื ืฉื–ื” ืขืชื” ื ื›ืชื‘ื•. ืื• ืœืžืงืจื™ื ืฉื‘ื”ื ืืชื” ืฆืจื™ืš ืœืฉืœื•ื— ืœืคื—ื•ืช ืžืฉื”ื• ืงื˜ืŸ. ื‘ื—ืจ ืืคืฉืจื•ืช ืžืงื•ืจ ื”ื”ื•ื“ืขื” - Textarea ื•ืžืงื ืืช ื’ื•ืฃ ื”ื”ื•ื“ืขื” ื‘ื‘ืœื•ืง ื˜ืงืกื˜:

ืชื•ืจื™ื ื•-JMeter: ืฉื™ืชื•ืฃ ืขื ืžืคืจืกื ื•ืžื ื•ื™

ื”ืขื‘ืจืช ืงื‘ืฆื™ื

ื”ืืคืฉืจื•ืช ื”ื ืคื•ืฆื” ื‘ื™ื•ืชืจ. ืžืชืื™ื ืœืจื•ื‘ ื”ืชืจื—ื™ืฉื™ื. ื‘ื—ืจ ืืคืฉืจื•ืช ืžืงื•ืจ ื”ื”ื•ื“ืขื” - ืžืงื•ื‘ืฅ ื•ืœืฆื™ื™ืŸ ืืช ื”ื ืชื™ื‘ ืœื”ื•ื“ืขื” ื‘ืฉื“ื” ืงื•ื‘ืฅ - ืฉื ืงื•ื‘ืฅ:

ืชื•ืจื™ื ื•-JMeter: ืฉื™ืชื•ืฃ ืขื ืžืคืจืกื ื•ืžื ื•ื™

ื”ืขื‘ืจืช ืงื•ื‘ืฅ ืœืฉื“ื” ื˜ืงืกื˜

ื”ืืคืฉืจื•ืช ื”ืžื’ื•ื•ื ืช ื‘ื™ื•ืชืจ. ืžืชืื™ื ืœืจื•ื‘ ื”ืชืจื—ื™ืฉื™ื + ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘-JMS Point-to-Point ืฉื‘ื• ืื™ืŸ ืืคืฉืจื•ืช ืฉืœื™ื—ื” ืฉื ื™ื™ื”:

ืชื•ืจื™ื ื•-JMeter: ืฉื™ืชื•ืฃ ืขื ืžืคืจืกื ื•ืžื ื•ื™

ื”ืขื‘ืจืช ืžืขืจืš ื‘ืชื™ื

ื”ืืคืฉืจื•ืช ื”ืงืฉื” ื‘ื™ื•ืชืจ. ืžืชืื™ื ืœื‘ื“ื™ืงืช ืฉื™ื“ื•ืจ ืžื“ื•ื™ืง ืฉืœ ื‘ืงืฉื•ืช ืขื“ ืœื‘ื™ื™ื˜, ืœืœื ืขื™ื•ื•ืชื™ื, 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:

ืชื•ืจื™ื ื•-JMeter: ืฉื™ืชื•ืฃ ืขื ืžืคืจืกื ื•ืžื ื•ื™

ื•ื’ื ื‘ื“ื™ืงื” ื‘-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;
	}

ืžืกืงื ื”

ืชื™ืืจืชื™ ืืจื‘ืข ื“ืจื›ื™ื ืœืฉืœื•ื— ื”ื•ื“ืขื•ืช ืœืชื•ืจื™ื, ื‘ื”ืŸ ืื ื™ ืžืฉืชืžืฉ ื›ืœ ื™ื•ื ื‘ืคื•ืขืœ. ืื ื™ ืžืงื•ื•ื” ืฉื”ืžื™ื“ืข ื”ื–ื” ื™ืงืœ ืขืœ ื—ื™ื™ืš. ื‘ื”ืžืฉืš, ืื ื™ ืžืชื›ื ืŸ ืœื“ื‘ืจ ืขืœ ื”ื ื™ืกื™ื•ืŸ ืฉืœื™ ื‘ื‘ื“ื™ืงืช ืžืจื›ื–ื™ื” ืฉื‘ื” ื™ืฉ ืชื•ืจ ื‘ืงืฆื” ืื—ื“ ื•ื‘ืงืฆื” ื”ืฉื ื™ ืžืกื“ ื ืชื•ื ื™ื ืื• ืžืขืจื›ืช ืงื‘ืฆื™ื.

ื—ืกื•ืš ืืช ื”ื–ืžืŸ ืฉืœืš. ื•ืชื•ื“ื” ืขืœ ืชืฉื•ืžืช ื”ืœื‘.

ืชื•ืจื™ื ื•-JMeter: ืฉื™ืชื•ืฃ ืขื ืžืคืจืกื ื•ืžื ื•ื™

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”