Как запустить графический интерфейс JMeter с помощью задачи Gradle? - PullRequest
0 голосов
/ 07 мая 2018

Я хочу запустить графический интерфейс JMeter из моего скрипта Gradle, чтобы я мог тщательно контролировать версии и факторы среды, и поэтому не требуется никаких предварительных настроек для сборки на моей локальной машине разработчика 1 .

Мой JMeter build.gradle (часть многопроектной сборки):

plugins{
  id 'base'
  id 'java'
}

repositories {
  jcenter()
}

dependencies {
  compile 'org.apache.jmeter:ApacheJMeter:4.0'
}

task jmeterGui(type: JavaExec){
  workingDir = "$project.buildDir/jmeter-working-dir"
  classpath = sourceSets.main.runtimeClasspath

  main = "org.apache.jmeter.NewDriver"

  doFirst{
    println "running Jmeter from Gradle"
    mkdir workingDir

  }
}

Это приводит к ошибке:

> Task :functional-test:jmeterGui
java.lang.Throwable: Could not access <source root>\functional-test\build\lib
  at org.apache.jmeter.NewDriver.<clinit>(NewDriver.java:102)
java.lang.Throwable: Could not access <source root>\functional-test\build\lib\ext
  at org.apache.jmeter.NewDriver.<clinit>(NewDriver.java:102)
java.lang.Throwable: Could not access <source root>\functional-test\build\lib\junit
  at org.apache.jmeter.NewDriver.<clinit>(NewDriver.java:102)
java.lang.ClassNotFoundException: org.apache.jmeter.JMeter
  at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  at org.apache.jmeter.NewDriver.main(NewDriver.java:242)
JMeter home directory was detected as: <source root>\functional-test\build

Я ничего не могу найти в руководстве пользователя JMeter для этого. Это выполнимо?

EDIT : этот графический интерфейс, который я запускаю, предназначен только для редактирования планов тестирования. Я использую Redline13 для запуска реальных нагрузочных тестов.


1 В настоящее время в моей сборке все строго контролируется версией и является частью моей сборки Gradle. Это включает в себя NodeJS, NPM и Terraform. Буквально единственным предварительным условием для установки является Java 8 JDK. Я хочу продолжить этот подход с JMeter.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Вот моя лучшая попытка запустить графический интерфейс JMeter из Gradle. Обратите внимание, что графический интерфейс запускается, но практически не работает (даже не может открыть план тестирования).

dependencies {
  // using the runtime classpath instead of compile in order to avoid
  // downloading all these and their deps in places where we never intend
  // to run the JMeter GUI (continuous build environments, etc.)
  runtime 'org.apache.jmeter:ApacheJMeter:4.0'
  runtime 'org.apache.jmeter:jorphan:4.0'
  runtime 'org.apache.jmeter:ApacheJMeter_core:4.0'
  runtime 'org.apache.jmeter:ApacheJMeter_components:4.0'
  runtime 'org.apache.jmeter:ApacheJMeter_config:4.0'
  runtime 'org.apache.jmeter:ApacheJMeter_functions:4.0'
  runtime 'org.apache.jmeter:ApacheJMeter_java:4.0'
  runtime 'org.apache.jmeter:ApacheJMeter_http:4.0'
  runtime 'org.apache.jmeter:ApacheJMeter_tcp:4.0'
  runtime 'org.apache.jmeter:ApacheJMeter_parent:4.0'
}

task launchJmeterGui(type: JavaExec){
  description = "Launch the JMeter GUI for editin test plans"
  workingDir = "$project.buildDir/jmeter-working-dir"
  classpath = sourceSets.main.runtimeClasspath

  // This is the main class that the jmeter.bat file invokes.
  // I think this thing is specifically intended to be invoked from a batch/
  // shell script and is not intended to be invoked like this.
  main = "org.apache.jmeter.NewDriver"

  // I think this controls where the log file goes, not sure.
  args "--homedir=${workingDir.absolutePath}"

  doFirst{
    println "Launching Jmeter from Gradle"

    // log file ends up in here
    mkdir workingDir

    // I don't put anything in here, but there will be errors in the console
    // output if they don't exist.  I think this is where the darcula jar
    // needs to be in order to work?
    mkdir "$buildDir/lib"
    mkdir "$buildDir/lib/ext"
    mkdir "$buildDir/lib/junit"

    // Copied into the source tree from a JMeter 4.0 install.
    // Will run without these files but will print errors to console/log file.
    // I'm happy to put these under source control, that makes sense to me.
    project.copy {
      from "src/test/resources/jmeter.properties"
      from "src/test/resources/log4j2.xml"
      into "$buildDir/bin"
    }

  }
}
0 голосов
/ 07 мая 2018

Вы добавляете зависимость во время компиляции, пытаясь использовать ее во время выполнения.

Изменить эту строку:

compile 'org.apache.jmeter:ApacheJMeter:4.0'

к этому:

runtime group: 'org.apache.jmeter', name: 'ApacheJMeter', version: '4.0'

и это должно устранить вашу ошибку.

Ссылки:


Имейте в виду, что JMeter GUI предназначен для разработки и отладки тестов, когда дело доходит до загрузки теста, рекомендуется запускать JMeter в режиме без GUI , поэтому я настоятельно рекомендую пересмотреть этот шаг "GUI" ,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...