Подтвердить что ты не робот

Java с Beanshell для доступа к полям и объектам с чистым кодом

1). Я знаю, как получить доступ к полям java и объекту в beanshell из моего вопроса Использовать поля класса java в beanshell. Тем не менее, это не столь чистый способ реализовать, поскольку мне нужно сначала установить переменную java в beanshell, а затем я могу ее использовать. Тем не менее, в Jmeter он обеспечивает очень чистый способ использования карт в beanshell аналогично тому, как мы это делаем в java, но JMeter разработал его известную библиотеку (класс), которая помогает для доступа к методам get/put для карт. Я хочу достичь аналогичного способа доступа к карте в beanshell.

Я проверил JMeter для получения дополнительной информации, и я хочу знать, что я создал user define переменной temp и присваиваю значение error, теперь в BSF-процессе я просто пишу строку vars.put('Name', 'temp Value'), и он обновил значение для переменной temp. Итак, вопрос в том, что я не создал объектные объекты JMeterVariables, но все же beanshell позволяет обновлять значения на карте, не задавая никаких значений, как упоминание в вашем ответе. Я хочу знать, как это работает, нужна дополнительная информация о глубине.

2). Я создал свой собственный класс в java и в beanshell я импортирую этот класс, но он дает Command not found: BSClass() ниже полный код

Класс Java

package test;

public class BSClass {

public void BSCMethod(){
    System.out.println("I am from BSClass method BSCMethod");
    }
}

sample.bsh

import test.BSClass;

c=BSClass();
c.BSCMethod();
print("I am from BeanShell Script");

Вызов класса sample.bsh java class

package test;

import java.io.FileNotFoundException;
import java.io.IOException;
import bsh.*;

public class DynamicVariable {
   public static void main(String[] args) throws FileNotFoundException, IOException, EvalError {
    new bsh.Interpreter().source("\\src\\test\\sample.bsh");
   }
}

Примечание:

  • Мне не нужна помощь в JMeter, она должна использоваться в ядре Java и beanshell.
  • Все файлы находятся в моем проекте.
  • BSClass.class находится в папке bin моего проекта

Буду признателен за ваши материалы

4b9b3361

Ответ 1

В Beanshell вы можете добавить любой объект, который вы хотите, включая карту

В JMeter JMeterVariables - это специальная реализация Map, которая добавляется в Beanshell Interpreter перед оценкой, а также добавляется специальный объект как JMeterContext который даже включает JMeterVariables внутри. Код:

    JMeterContext jmctx = JMeterContextService.getContext();
    JMeterVariables vars = jmctx.getVariables();

    try {
        bshInterpreter.set("ctx", jmctx);//$NON-NLS-1$
        bshInterpreter.set("Label", getName()); //$NON-NLS-1$
        bshInterpreter.set("prev", jmctx.getPreviousResult());//$NON-NLS-1$
        bshInterpreter.set("props", JMeterUtils.getJMeterProperties());
        bshInterpreter.set("vars", vars);//$NON-NLS-1$

В вашем случае с картой вы можете сделать то же самое, как вы описали в комментарии:

 bshInterpreter.set("myMap", javaMyMapObject);"

Затем в Beanshell получите конкретный ключ с карты:

 myMap.get("aField");

Чтобы создать класс, вы должны использовать new ключевое слово, позвоните:

c= new BSClass();

вместо c=BSClass();

Если вы создаете свой собственный класс, класс должен находиться внутри jar в соответствующем пакете.

Jar файл должен находиться в папке lib, а не в папке bin, см. Раздел "Начало работы с JMeter":

Любой jar файл в таком каталоге будет автоматически включен в user.classpath, jar файлы в подкаталогах игнорируются. Данное значение является дополнением к любым jar файлам, найденным в каталоге lib. Все записи будут добавлены в путь к классу системного загрузчика классов, а также к пути внутреннего загрузчика JMeter.