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

Фотография

Запуск сэмпла каждые 6 секунд, вне зависимости от того, завершился ли


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

#1 X-NoNAME

X-NoNAME

    Новый участник

  • Members
  • Pip
  • 24 сообщений
  • ФИО:Казаков Иван
  • Город:Москва


Отправлено 14 апреля 2012 - 23:17

Есть beanShell сэмпл, который должен выполняться каждые 6 секунд, причем в независимости от того, прекратил ли работу предыдущий. Как правильно это реализовать?
  • 0

Мои проекты: http://erudit.me http://erudit.1-1.su


#2 AxelM

AxelM

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

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


Отправлено 15 апреля 2012 - 05:20

Я делал это вот так: #5 (тема форума "Sleep thread of BeanShell Listener")
  • 1

#3 X-NoNAME

X-NoNAME

    Новый участник

  • Members
  • Pip
  • 24 сообщений
  • ФИО:Казаков Иван
  • Город:Москва


Отправлено 15 апреля 2012 - 16:51

Спасибо, сейчас попробую.

UPD: Похоже это не совсем то. Сразу после запуска потока сэмпл считается успешно выполненным.

Сообщение отредактировал X-NoNAME: 15 апреля 2012 - 17:29

  • 0

Мои проекты: http://erudit.me http://erudit.1-1.su


#4 AxelM

AxelM

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

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


Отправлено 15 апреля 2012 - 17:37

Если выложите пример сценария, то, возможно, решить задачу будет проще.
  • 0

#5 X-NoNAME

X-NoNAME

    Новый участник

  • Members
  • Pip
  • 24 сообщений
  • ФИО:Казаков Иван
  • Город:Москва


Отправлено 15 апреля 2012 - 18:02

Если выложите пример сценария, то, возможно, решить задачу будет проще.


Этот beanshell сэмплер просто добавляю в ThreadGroup, также добавляю таймер.

Исходный.
import test.jWSC; //некий java класс, который делает супер-секретные запросы

        int timeOut=Integer.parseInt(bsh.args[1]);
        String quers=bsh.args[0]
        jWSC wsc = new jWSC(timeOut, quers); //создаем объект 
        wsc.openConnection();                //подключаемся, делаем запрос 1, получаем ответ, делаем запрос 2, делаем isStopped=true
        while (!wsc.isStopped()){  //проверяем isStopped
          try {
                Thread.sleep(200);
            } catch (InterruptedException ex) {
              
            }
        }
        if (!wsc.getStatus().equals("200")){ //дальше понятно
	ResponseCode=wsc.getStatus();
	ResponseMessage="FAIL: "+wsc.getMessages();
	IsSuccess=false;
	
            }else {
	ResponseCode=wsc.getStatus();
	ResponseMessage="PASS: "+wsc.getMessages();
            }

        wsc.close();

По вашему совету, делал так:

import test.jWSC;

Thread t1 = new Thread() {
  public void run() {

        int timeOut=Integer.parseInt(bsh.args[1]);
        String quers=bsh.args[0]
        jWSC wsc = new jWSC(timeOut, quers);
        wsc.openConnection();  
        while (!wsc.isStopped()){
          try {
                Thread.sleep(200);
            } catch (InterruptedException ex) {
              
            }
        }
        if (!wsc.getStatus().equals("200")){
	ResponseCode=wsc.getStatus();
	ResponseMessage="FAIL: "+wsc.getMessages();
	IsSuccess=false;
	
            }else {
	ResponseCode=wsc.getStatus();
	ResponseMessage="PASS: "+wsc.getMessages();
            }

        wsc.close();

  }//конец run()
};
t1.start();

  • 0

Мои проекты: http://erudit.me http://erudit.1-1.su


#6 AxelM

AxelM

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

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


Отправлено 15 апреля 2012 - 18:43

Какой thread Вы пытаетесь поставить на паузу:

Thread.currentThread().sleep(5000);

  • 0

#7 X-NoNAME

X-NoNAME

    Новый участник

  • Members
  • Pip
  • 24 сообщений
  • ФИО:Казаков Иван
  • Город:Москва


Отправлено 15 апреля 2012 - 19:04

Какой thread Вы пытаетесь поставить на паузу:

Thread.currentThread().sleep(5000);

не хочу ставить паузы, просто этот семпл может за 3 секунды выполнится, а может и за 20. Мне нужно каждые 6 секунд запускать этот семпл (если он на предыдущей итерации еще не закончил обработку, то нужно запустить этот сэмпл в другом потоке, не дожидаясь его завершения.)
  • 0

Мои проекты: http://erudit.me http://erudit.1-1.su


#8 APC

APC

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

  • Members
  • PipPipPipPip
  • 293 сообщений
  • ФИО:Похилько Андрей Федорович
  • Город:Москва


Отправлено 16 апреля 2012 - 05:13


Какой thread Вы пытаетесь поставить на паузу:

Thread.currentThread().sleep(5000);

не хочу ставить паузы, просто этот семпл может за 3 секунды выполнится, а может и за 20. Мне нужно каждые 6 секунд запускать этот семпл (если он на предыдущей итерации еще не закончил обработку, то нужно запустить этот сэмпл в другом потоке, не дожидаясь его завершения.)


Используйте Constant Throughput Timer или Throughput Shaping Timer, при этом запустив немного избыточное число тредов в тред-группе. Получите желаемый эффект.
  • 1

#9 X-NoNAME

X-NoNAME

    Новый участник

  • Members
  • Pip
  • 24 сообщений
  • ФИО:Казаков Иван
  • Город:Москва


Отправлено 16 апреля 2012 - 10:49

Спасибо, сейчас попробую.
  • 0

Мои проекты: http://erudit.me http://erudit.1-1.su


#10 X-NoNAME

X-NoNAME

    Новый участник

  • Members
  • Pip
  • 24 сообщений
  • ФИО:Казаков Иван
  • Город:Москва


Отправлено 20 апреля 2012 - 12:39

Достаточно было в ThreadGroup задать количество Users например 100, Rump-up Period 100*6сек=600, повторений=1. Время теста регулируется количеством vUsers. изначально не получалось из-за ошибки в java классе, который использовался beanShell.
Всем спасибо.
  • 0

Мои проекты: http://erudit.me http://erudit.1-1.su



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

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