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

Фотография

Вызов в JMeter метода из *.java файла


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

#1 soleksenko2702

soleksenko2702

    Постоянный участник

  • Members
  • PipPipPip
  • 193 сообщений
  • ФИО:Олексенко Сергей

Отправлено 04 марта 2012 - 14:00

Добрый всем день.

Есть некий файл с методами написаный на джаве. Пусть он называется test.java.
Нужно из JMeter вызвать методы из этого файла. Методы возвращают стринговое значение.
Кто знает что и как нужно для этого сделать и можно ли вообще такое сделать, пожалуйста помогите.
  • 0

#2 player1

player1

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

  • Members
  • Pip
  • 61 сообщений
  • ФИО:Шайдров Павел
  • Город:Лимассол


Отправлено 05 марта 2012 - 07:53

Как делал я:
0. компилируешь jar-ник
1. добавляешь его в папку jmeter/lib
2. перезапускаешь Jmeter
3. Добавляешь в сценарий BeanShell PreProcessor
4. В нём указываешь import class_name; (например import org.json.simple.JSONObject;)
5. Вызываешь метод с указанием класса (например JSONObject.Generate() )

ну и стандартный обвес в виде vars.get/vars.put для чтения/задания переменных Jmeter

ЗЫ Вообще хоть и заявлено, что BeanShell может выполнять родной джава код, я столкнулся с проблемами передачи параметров в вызовах внешних методов, так что с этим надо поосторожней и особо не мудрить.
ЗЗЫ И поскольку я ни разу не программист, в Jmeter мне весьма неочень во время отладки скриптов и поиска ошибок, так что после пары дней мучений все пробы и отладки вызовов перенёс во внешнюю IDE (NetBeans), а потом копипастил секцию import и код main класса.
  • 1

#3 vgs

vgs

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:VGS

Отправлено 05 марта 2012 - 08:13

А вот еще книжка про написание плагинов, может там что полезное найдешь http://jmeter.apache...er_tutorial.pdf
  • 0

#4 soleksenko2702

soleksenko2702

    Постоянный участник

  • Members
  • PipPipPip
  • 193 сообщений
  • ФИО:Олексенко Сергей

Отправлено 05 марта 2012 - 08:26

Спасибо за ответы, буду пробовать.
  • 0

#5 biercoff

biercoff

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

  • Members
  • Pip
  • 1 сообщений
  • ФИО:Андрей

Отправлено 08 июня 2013 - 21:02

У меня тот же вопрос. У меня есть класс, который я назвал Jmeter.java. Вот код :

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.RandomStringUtils;

import java.math.BigInteger;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.security.SecureRandom;

/**
*
*/
public class JMeter {

public static String getUniqueToken(){
String macAddress = "";
InetAddress ip;
try {
ip = InetAddress.getLocalHost();
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
byte[] mac = network.getHardwareAddress();

StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
macAddress = sb.toString();

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (SocketException e){

e.printStackTrace();

}
String passwordSalt = RandomStringUtils.randomAscii(20);
macAddress = DigestUtils.shaHex(macAddress + passwordSalt);
return macAddress;
}

public String getDeviceToken(){
SecureRandom random = new SecureRandom();
return new BigInteger(130, random).toString(32);
}
}


Создаю джарку следующей командой - jar cf JMeter.jar JMeter.java

Закидываю джарку в jmeter/lib и потом в beanshell preprocessor использую этот код

import JMeter;
JMeter tokens = new JMeter();
String unique_token = tokens.getUniqueToken();
String device_token = tokens.getDeviceToken();

vars.put("unique_token", unique_token);
vars.put("device_token", device_token);


Но в логах Jmeter я вижу

2013/06/08 23:26:29 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import JMeter; JMeter tokens = new JMeter(); String unique_token = tokens.getUn . . . '' : Typed variable declaration : Method Invocation tokens.getUniqueToken
2013/06/08 23:26:29 WARN - jmeter.modifiers.BeanShellPreProcessor: Problem in BeanShell script org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import JMeter; JMeter tokens = new JMeter(); String unique_token = tokens.getUn . . . '' : Typed variable declaration : Method Invocation tokens.getUniqueToken


Что я делаю не так, кто подскажет?
  • 0

#6 soleksenko2702

soleksenko2702

    Постоянный участник

  • Members
  • PipPipPip
  • 193 сообщений
  • ФИО:Олексенко Сергей

Отправлено 22 июня 2013 - 20:43

Пробовал проделать все тоже самое, правда на самом простом примере (сумма двух чисел).
Все отлично работает.

biercoff, возможно ошибка где-то у Вас в коде.
Почему у Вас метод getUniqueToken статический? А вызываете вы его:
JMeter tokens = new JMeter();
String unique_token = tokens.getUniqueToken();
  • 0

#7 Smartserega

Smartserega

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

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Tselin Sergey


Отправлено 26 июня 2020 - 11:45

Пишете код на Java, например такой:
 
public class Jm {
    public static void jm() {
        System.out.println("Hell");
    }
}
 
 
Выполняете в консоли команду jar cf Jm.jar Jm.java (команду надо выполнять из директории где лежит джава файл) у Вас создается jar файл. Далее этот файл подкладываете в папку lib Джиметр. Перезапускате Jmeter, добавляете BeanShell PreProcessor либо JSR223 sampler в нём пишете:
 
import Jm; //импортируем класс
Jm.jm(); //обращаемся к методу класса
 
запускаете
 
 
Есть трудности с совместимостью кода... мне показалось jmeter совместим либо с груви либо с какими то старыми версиями кода java. Поэтому что то очень сложное написать может не получится.

  • 0

#8 arkdzo

arkdzo

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

  • Members
  • Pip
  • 10 сообщений

Отправлено 01 августа 2020 - 08:46

Есть еще какие-то варианты решения данного вопроса?


  • 0

Занимаюсь модификацией игр с 2016 года. Если интересно, можете скачать кс 1.6 азимова (не Айзека) на пробу.



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

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