Перейти к содержимому

Фотография

Sleep thread of BeanShell Listener


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 AxelM

AxelM

    Активный участник

  • Members
  • PipPip
  • 118 сообщений
  • ФИО:Зверев Дмитрий
  • Город:Санкт-Петербург


Отправлено 03 ноября 2011 - 08:45

Есть тест, примерно следующей структуры

Thread Group
-- Sampler
-- BeanShell Listener

BeanShell Listener следующего содержания по смыслу:

import java.net.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.*;
import org.xml.sax.InputSource;
import java.io.ByteArrayInputStream;
import java.io.InputStream;

// получение параметров
has_host = vars.get ("has_host");

<skip>

// SLEEP 5 sec
// Thread.sleep(5000);

//Запрос по http
try {
	URL url = new URL("http://"+has_host+":"+has_port+"/"+uri);
	URLConnection conn = url.openConnection ();
	String result = null;
	// Construct data
	StringBuffer data = new StringBuffer();
	BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
	StringBuffer sb = new StringBuffer();
	String line;
	while ((line = rd.readLine()) != null) {
		sb.append(line);
	}
	rd.close();
	result = sb.toString();
<skip>

// Парсинг ответа
                     		XPath xpath = XPathFactory.newInstance().newXPath();

                     		InputStream is = new ByteArrayInputStream(result.getBytes()); 
                     		InputSource inputSource = new InputSource(is);
                     		String DATETIME = xpath.evaluate( "//tram-pam-pam/TIMESTAMP", inputSource);
<skip>

// Запись в файл
                        	FileWriter fw = new FileWriter(admin_server_status_log, true);
                        	BufferedWriter bw = new BufferedWriter(fw);
                        	PrintWriter pw = new PrintWriter(bw);   

                        	pw.println(DATETIME+";");
<skip>
                   		pw.close();

} catch (Exception e) {
<skip>
}


Данный Listener необходимо запускать раз в 5 секунд.

Кто-нибудь знает, можно ли поставить на паузу конкретный тред Listener?

Если выставить Thread.sleep(5000), то на паузу ставится и тред, который отвечает за выполнения других запросов (Sampler) в группе, а они должны выполняться непрерывно.

Можно ли решить данную задачу в рамках BeanShell или уже пора писать плагин для Jmeter?
  • 0

#2 fesd

fesd

    Опытный участник

  • Members
  • PipPipPipPip
  • 262 сообщений

Отправлено 03 ноября 2011 - 11:30

Вы не правильно понимаете понятие треда. Listener - это не тред, а элемент тест плана. Sampler тоже элемент тест плана. Советую перечитать мануал по жметру преждем чем приступать к написанию плагинов для него.

По сабжу не могу посоветовать, т.к. не понимаю что хотите сделать. Могу только догадываться и то получается какая-то фигня.
Можете расписать подробнее задачу, которая стоит перед вами?
  • 0

#3 AxelM

AxelM

    Активный участник

  • Members
  • PipPip
  • 118 сообщений
  • ФИО:Зверев Дмитрий
  • Город:Санкт-Петербург


Отправлено 03 ноября 2011 - 12:03

Вы не правильно понимаете понятие треда. Listener - это не тред, а элемент тест плана. Sampler тоже элемент тест плана. Советую перечитать мануал по жметру преждем чем приступать к написанию плагинов для него.


А как его стоит понимать? Я тут говорю о тредах в рамках Java. Как по-вашему выполняются все ваши Sampler? Плюс в Listener имеются функции типа
threadStarted(), threadFinished(). По всей видимости, sampler и listener работают в одном треде.

Задача: заставьте BeanShell listener работать с паузой так, чтобы все Samples в той же ThreadGroup работали без этой паузы.

Иллюстрация в ататче: Sampler должен выполняться каждые 500 ms, но из-за Thread.sleep(5000) в BeanShell listener выполняется каждые 5 sec.

Прикрепленные файлы

  • Прикрепленный файл  1.zip   1,3К   7 Количество загрузок:

  • 0

#4 fesd

fesd

    Опытный участник

  • Members
  • PipPipPipPip
  • 262 сообщений

Отправлено 03 ноября 2011 - 13:56

Я правильно понимаю, что в биншел листенере вы хотите что-то делать с результатами последнего семплера?
  • 0

#5 AxelM

AxelM

    Активный участник

  • Members
  • PipPip
  • 118 сообщений
  • ФИО:Зверев Дмитрий
  • Город:Санкт-Петербург


Отправлено 03 ноября 2011 - 14:09

Я правильно понимаю, что в биншел листенере вы хотите что-то делать с результатами последнего семплера?


Нет, мой listener не имеет никакого отношения к Sampler. Он похож на PerfMon из jmeter-plugins: раз в 5 секунд сходить куда-то и взять статистику. Это может быть статистика CPU с сервера, статистика из БД, статистика из Tomcat, неважно.

Решил эту задачу через запуск отдельного треда

import java.util.Date;
Thread t1 = new Thread() {
  public void run() {
print ("start "+new Date().toString());
	Thread.currentThread().sleep(5000);
print ("end "+new Date().toString());
  }
};
t1.start();

Внутри создаваемого треда делается пауза на 5 сек., которая не влияет на тред, в котором исполняются samplers.

Пример в аттаче

Прикрепленные файлы

  • Прикрепленный файл  2.zip   1,37К   8 Количество загрузок:
  • Прикрепленный файл  2.PNG   21,79К   26 Количество загрузок:

  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных