2017-09-26 2 views
1

Je suis en train d'exécuter le script JMeter à partir du code Java en utilisantLors de l'exécution de script JMeter des fonctions Java et des propriétés ne fonctionnent pas

String jmeterHome = "D:/tmp/apache-jmeter-3.3"; 
StandardJMeterEngine jmeter = new StandardJMeterEngine(); 
JMeterUtils.loadJMeterProperties(jmeterHome + "/jmeter.properties"); 
JMeterUtils.setJMeterHome(jmeterHome); 
JMeterUtils.initLocale(); 

SaveService.loadProperties(); 

File script = new File(jmeterHome + "/http_localhost.jmx"); 
HashTree testPlanTree = SaveService.loadTree(script); 

Summariser summer = null; 
String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary"); 
if (summariserName.length() > 0) { 
    summer = new Summariser(summariserName); 
}  

String logFile = jmeterHome + "/file.jtl"; 
ResultCollector logger = new ResultCollector(summer); 
logger.setFilename(logFile); 
testPlanTree.add(testPlanTree.getArray()[0], logger); 

jmeter.configure(testPlanTree); 
jmeter.run(); 

GUI JMeter dans la configuration « groupe Thread » Je suis en train « Nombre de threads » être "$ {__ P (xxx, 20)}". Cela fonctionne bien à partir de l'interface graphique - Je peux exécuter le script avec la valeur par défaut de "20". Mais le code ci-dessus ne démarre aucun thread. Le code Java imprime qu'il essaie de démarrer des threads zéro.

J'ai vu Jmeter functions don't executing when calling from java code et je n'avoir des dépendances suivantes dans mon projet

 <dependency> 
      <groupId>org.apache.jmeter</groupId> 
      <artifactId>ApacheJMeter_java</artifactId> 
      <version>3.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.jmeter</groupId> 
      <artifactId>ApacheJMeter_http</artifactId> 
      <version>3.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.jmeter</groupId> 
      <artifactId>ApacheJMeter_functions</artifactId> 
      <version>3.3</version> 
     </dependency> 
+0

sont les dépendances contenues dans le fichier de votre application? ou comment le dirigez-vous? –

+0

Je l'utilisais en utilisant maven et j'ai compris que JMeter voulait avoir une librairie dans classpath avec le nom exact de "ApacheJMeter_functions.jar" il ne peut pas être "ApacheJMeter_functions-3.3.jar" même si les fichiers sont binaires égaux – user1657972

Répondre

-1

Le problème avec JMeter est qu'il veut avoir une bibliothèque classpath avec le nom exact de « ApacheJMeter_functions.jar » il peut » t être "ApacheJMeter_functions-3.3.jar" même si les fichiers sont binaires égaux

+0

C'est faux. JMeter ne l'exige pas. –

0

Votre code est erroné, vous ne faites pas référence au bon chemin jmeter.properties.

Exemple de travail:

String jmeterHome = "/data/jmeter/jmeters/apache-jmeter-3.3/"; 
    StandardJMeterEngine jmeter = new StandardJMeterEngine(); 
    JMeterUtils.setJMeterHome(jmeterHome); 
    JMeterUtils.loadJMeterProperties(jmeterHome + "bin/jmeter.properties"); 
    JMeterUtils.initLocale(); 

    SaveService.loadProperties(); 

    File script = new File("/data/jmeter/workspace/JMeterFromJava/scenario/localhost.jmx"); 
    HashTree testPlanTree = SaveService.loadTree(script); 

    Summariser summer = null; 
    String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary"); 
    if (summariserName.length() > 0) { 
     summer = new Summariser(summariserName); 
    }  

    String logFile = "/data/jmeter/workspace/JMeterFromJava/results/file.jtl"; 
    ResultCollector logger = new ResultCollector(summer); 
    logger.setFilename(logFile); 
    testPlanTree.add(testPlanTree.getArray()[0], logger); 

    jmeter.configure(testPlanTree); 
    jmeter.run(); 

EDIT 29 septembre 2017:

Vous Bugzilla soumis à un projet de démonstration montrant le problème. Cela a aidé à comprendre votre problème.

Statut: - code fonctionne si App est exécuté comme une application principale - code fonctionne si AppTest est couru d'Eclipse - Mais le code ne lorsqu'il est lancé par l'installation mvn clean

L'échec est dû à ce code :

0

solution Petit:

final List<String> classPathUrls = new ArrayList<>(); 
for (final URL url : URLClassLoader.class.cast(this.getClass().getClassLoader()).getURLs()) { 
    classPathUrls.add(url.getPath()); 
} 
final String classPath = StringUtils.join(classPathUrls, ";"); 
JMeterUtils.setProperty("search_paths", classPath); 
+0

Merci pour ça. N'a pas résolu mon problème, mais m'a poussé dans la bonne direction. Parce que je suis sur Windows, getPath retourne un format impair (qui ne correspond pas à ce que recherche ClassFinder de JMeter), donc j'ai supprimé le code de construction de classpath et changé l'appel setProperty comme suit: JMeterUtils.setProperty ("search_paths", System .getProperty ("java.class.path")); et cela fonctionne comme j'en ai besoin maintenant. Merci. –