JMeter не сохраняет результаты в файл при выполнении из кода Java - PullRequest
0 голосов
/ 01 декабря 2018

Когда я вызываю jmeter test из GUI, тогда он работает правильно, но когда я вызываю run или runTests стандартного движка JMeter, он ничего не сохраняет в / tmp / jmeter .

Как это сделать?Как я могу выполнить и извлечь полезную нагрузку API из Java-кода, сохраненного из Save Response to File Listener.

Я использую JMeter 5.0

    JMeterUtils.setJMeterHome(getJmeterHome());
    JMeterUtils.loadJMeterProperties(jmeterPropertiesFile.toString());
    JMeterUtils.initLocale();

    StandardJMeterEngine standardJMeterEngine = new StandardJMeterEngine();
    standardJMeterEngine.configure(rootTree);
    standardJMeterEngine.run();

Класс построителя

public class MySaveResponseToFileBuilder {

private String name;
private String comment;
private boolean enabled;
private String fileName;
private String variableName;

public MySaveResponseToFileBuilder() {
    this.name = "Save Response to File";
    this.enabled = true;
    this.comment = "";
    this.fileName = "";
    this.variableName = "";
}

public String getName() {
    return name;
}

public MySaveResponseToFileBuilder setName(String name) {
    this.name = name;
    return this;
}

public String getComment() {
    return comment;
}

public MySaveResponseToFileBuilder setComment(String comment) {
    this.comment = comment;
    return this;
}

public boolean isEnabled() {
    return enabled;
}

public MySaveResponseToFileBuilder setEnabled(boolean enabled) {
    this.enabled = enabled;
    return this;
}

public String getFileName() {
    return fileName;
}

public MySaveResponseToFileBuilder setFileName(String fileName) {
    this.fileName = fileName;
    return this;
}

public String getVariableName() {
    return variableName;
}

public MySaveResponseToFileBuilder setVariableName(String variableName) {
    this.variableName = variableName;
    return this;
}

public ResultSaver build() {
    ResultSaver resultSaver = new ResultSaver();
    resultSaver.setName(this.getName());
    resultSaver.setComment(this.getComment());
    resultSaver.setEnabled(this.isEnabled());
    resultSaver.setVariableName(this.getVariableName());
    resultSaver.setFilename(this.getFileName());
    resultSaver.setProperty(TestElement.TEST_CLASS, ResultSaver.class.getName());
    resultSaver.setProperty(TestElement.GUI_CLASS, ResultSaverGui.class.getName());
    return resultSaver;
}

}

ResultSaver resultSaver = new MySaveResponseToFileBuilder().setName("Save Response to File").setFileName("/tmp/jmeter/${__samplerName()}").build();

1 Ответ

0 голосов
/ 03 декабря 2018

Использование прослушивателей JMeter для сохранения результатов теста - не лучшая идея , так как:

  • они не добавляют никакого значения по сравнению с файлами результатов .jtl
  • они запускаются после каждого сэмплера, в то время как подсистема файлов результатов .jtl сохраняет результаты в пакетах, уменьшая негативные последствия дискового ввода-вывода
  • они потребляют ресурсы ЦП, ОЗУ и диска из-за своей природы и выше точек

Поэтому, вместо того, чтобы пытаться добавить слушателя, рассмотрите возможность использования следующего кода перед строкой standardJMeterEngine.configure(rootTree);:

String jtlFile = "/path/to/results.jtl";
Summariser summer = null;
String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
if (summariserName.length() > 0) {
    summer = new Summariser(summariserName);
}
ResultCollector logger = new ResultCollector(summer);
logger.setFilename(jtlFile );
rootTree.add(rootTree.getArray()[0], logger);

Это добавит Summariser и ResultCollector в План тестирования , поэтому при запуске кода результаты будут сохраняться в файле результатов .jtl, который впоследствии можно будет проанализировать с помощью Listeners или вы можете сгенерировать Панель отчетов HTML из нее

...