ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ JMeter: ΠΎΠ±ΠΌΠ΅Π½ с Publisher ΠΈ Subscriber

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π₯Π°Π±Ρ€! Π­Ρ‚ΠΎ сиквСл ΠΌΠΎΠ΅ΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ расскаТу ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… размСщСния сообщСний Π² очСрСдях с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JMeter.

ΠœΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ ΡˆΠΈΠ½Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΉ Ρ„Π΅Π΄Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ запросов, прСобразования, замысловатая ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ. Для тСстирования Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ сообщСний Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Π’Ρ€ΡƒΡ‡Π½ΡƒΡŽ β€” боль, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ справится Π½Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ°Π½ΡƒΠ°Π»ΡŒΡ‰ΠΈΠΊ.

ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ JMeter: ΠΎΠ±ΠΌΠ΅Π½ с Publisher ΠΈ Subscriber

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π₯отя с этой болью ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΌΠΈΡ€ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΏΠΎΡ€Π°Ρ…. Всё Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ с RFHUtil. ΠœΠΎΡ‰Π½Ρ‹ΠΉ, Π½ΠΎ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΈ ΡΡ‚Ρ€Π°ΡˆΠ½Ρ‹ΠΉ: Ну Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ Руса.

ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ JMeter: ΠΎΠ±ΠΌΠ΅Π½ с Publisher ΠΈ Subscriber

НСзамСнимый Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, Π½ΠΎ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ Π² случаС Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ использования.
Π£Π΄ΠΎΠ±Π½ΠΎΠ΅ тСстированиС с Π½ΠΈΠΌ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π‘ JMeter всё стало ΠΏΡ€ΠΎΡ‰Π΅. ПослС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ этапа с освоСниСм ΠΈ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ°Π½ΠΈΠ΅ΠΌ Π·Π°Π±Ρ€Π΅Π·ΠΆΠΈΠ»Π° Π½Π°Π΄Π΅ΠΆΠ΄Π° Π½Π° счастливоС тСстированиС.

Активно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ сэмплСры JMS Publisher ΠΈ JMS Subscriber. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ JMS Point-to-Point, эта ΠΏΠ°Ρ€ΠΎΡ‡ΠΊΠ° показалась ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Π² Ρ€Π°Π±ΠΎΡ‚Π΅. НапримСр, Ρƒ Subscriber Π² JMS Selector ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Ρƒ Point-to-Point β€” Π½Π΅Ρ‚ (Π»ΠΈΠ±ΠΎ этот способ Π½Π΅ слишком ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½).

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° сэмплСров

JMS Publisher

  • Setup β€” Each Sample. Apache Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΎΠΏΡ†ΠΈΡŽ, Ссли ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ/Ρ‚ΠΎΠΏΠΈΠΊΠΈ Π·Π°Π΄Π°Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.
  • Expiration (ms) = 120000. Π’ случаС сбоя тСстовыС запросы исчСзнут ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Ρ‡Π΅Ρ€Π΅Π· 2 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹.
  • Use non-persistent delivery mode? β€” true. IBM ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ persistent mode обСспСчиваСт Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ сохранСниС ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… сообщСний Π² случаС Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎΠ³ΠΎ сбоя. И Π±ΠΎΠ»Π΅Π΅ быстрый ΠΎΠ±ΠΌΠ΅Π½ Π² non-persistent mode. Для тСстовых Ρ†Π΅Π»Π΅ΠΉ Π²Π°ΠΆΠ½Π΅Π΅ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ.

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Publisher задаю jms-свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Subscriber Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² JMS Selector. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ гСнСрируСтся случайноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² элСмСнтС тСст-ΠΏΠ»Π°Π½Π° User Parameters:

ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ JMeter: ΠΎΠ±ΠΌΠ΅Π½ с Publisher ΠΈ Subscriber

Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ сообщСниС.

Π˜Ρ‚ΠΎΠ³ΠΎΠ²Π°Ρ Β«Π±ΠΎΠ»Π²Π°Π½ΠΊΠ°Β» ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ настроСнного JMS Publisher:

ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ JMeter: ΠΎΠ±ΠΌΠ΅Π½ с Publisher ΠΈ Subscriber

JMS Subscriber

  • Setup β€” Each Sample. Ну Π²Ρ‹ поняли.
  • Timeout (ms) = 100000. Если запрос Π½Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ послС 100 сСкунд оТидания, Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ.
  • Stop between sample? β€” true.

JMS Selector β€” довольно удобная ΡˆΡ‚ΡƒΠΊΠ°. Π˜Ρ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ JMS Subscriber:

ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ JMeter: ΠΎΠ±ΠΌΠ΅Π½ с Publisher ΠΈ Subscriber

Как Π±Ρ‹Ρ‚ΡŒ с ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π΅ΠΉ Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… сообщСниях. Π’ JMeter ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ послС вычитывания ΠΎΠ½Π° отобраТаСтся ΠΊΡ€ΠΈΠ²ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π²Π΅Π»ΠΈΠΊΠΈΠΌ ΠΈ ΠΌΠΎΠ³ΡƒΡ‡ΠΈΠΌ всСгда ΠΈ Π²Π΅Π·Π΄Π΅, Π½ΡƒΠΆΠ½ΠΎ:

  1. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² «запускатор» JMeter Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ JVM:
    -Dfile.encoding=UTF-8
  2. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ JSR223 PostProcessor Π² Subscriber со строчкой Π½Π° groovy:
    prev.setDataEncoding("UTF-8")

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° тСкста

Π‘Π°ΠΌΡ‹ΠΉ Π»Π΅Π½ΠΈΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ свСТСнаписанных тСстов. Π›ΠΈΠ±ΠΎ для случаСв, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ…ΠΎΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ нСбольшоС. Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ Message source β€” Textarea ΠΈ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π΅Π»ΠΎ сообщСния Π² тСкстовом Π±Π»ΠΎΠΊΠ΅:

ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ JMeter: ΠΎΠ±ΠΌΠ΅Π½ с Publisher ΠΈ Subscriber

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ„Π°ΠΉΠ»Π°

Π‘Π°ΠΌΡ‹ΠΉ частый Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° сцСнариСв. Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ Message source β€” From file ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡŽ Π² ΠΏΠΎΠ»Π΅ File β€” Filename:

ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ JMeter: ΠΎΠ±ΠΌΠ΅Π½ с Publisher ΠΈ Subscriber

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ„Π°ΠΉΠ»Π° Π² ΠΏΠΎΠ»Π΅ тСкста

Π‘Π°ΠΌΡ‹ΠΉ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° сцСнариСв + ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² JMS Point-to-Point, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ:

ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ JMeter: ΠΎΠ±ΠΌΠ΅Π½ с Publisher ΠΈ Subscriber

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ массива

Π‘Π°ΠΌΡ‹ΠΉ слоТный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π΅ΠΏΠΎΠ³Ρ€Π΅ΡˆΠΈΠΌΠΎ-Ρ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ запросов Π΄ΠΎ Π±Π°ΠΉΡ‚Π°, Π±Π΅Π· искаТСний, смс ΠΈ ΠΏΠ΅Ρ€Ρ‚ΡƒΡ€Π±Π°Ρ†ΠΈΠΈ. Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это Π² Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠΌ JMeter Π½Π΅ получится, здСсь ΠΌΠ½Π΅ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΎΠ± этом сказали.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ исходники ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ JMS Subscriber.

Π—Π°ΠΌΠ΅Π½ΠΈΠ» Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ extractContent(..) строку:

buffer.append(bytesMessage.getBodyLength() + " bytes received in BytesMessage");

Π½Π°:

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 Sampler. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ β€” ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ°Ρ€ΠΎΠΉ Publisher/Subscriber для создания 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: ΠΎΠ±ΠΌΠ΅Π½ с Publisher ΠΈ Subscriber

А Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π² JSR223 Assertion для 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: ΠΎΠ±ΠΌΠ΅Π½ с Publisher ΠΈ Subscriber

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com