Вызов в JMeter метода из *.java файла
#1
Отправлено 04 марта 2012 - 14:00
Есть некий файл с методами написаный на джаве. Пусть он называется test.java.
Нужно из JMeter вызвать методы из этого файла. Методы возвращают стринговое значение.
Кто знает что и как нужно для этого сделать и можно ли вообще такое сделать, пожалуйста помогите.
#2
Отправлено 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 класса.
#3
Отправлено 05 марта 2012 - 08:13
#4
Отправлено 05 марта 2012 - 08:26
#5
Отправлено 08 июня 2013 - 21:02
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
Что я делаю не так, кто подскажет?
#6
Отправлено 22 июня 2013 - 20:43
Все отлично работает.
biercoff, возможно ошибка где-то у Вас в коде.
Почему у Вас метод getUniqueToken статический? А вызываете вы его:
JMeter tokens = new JMeter();
String unique_token = tokens.getUniqueToken();
#7
Отправлено 26 июня 2020 - 11:45
#8
Отправлено 01 августа 2020 - 08:46
Есть еще какие-то варианты решения данного вопроса?
Занимаюсь модификацией игр с 2016 года. Если интересно, можете скачать кс 1.6 азимова (не Айзека) на пробу.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных