Jmeter clear resultFile для каждого прогона - PullRequest
0 голосов
/ 24 октября 2018

У меня есть план тестирования, где у меня есть две группы потоков, первая группа потоков будет запущена и запишет результат в файл, зарегистрированный файл будет входом для второй группы потоков.Теперь, для этого в группе потоков я добавил скрипт BeanShell PostProcessor следующим образом, но он работает следующим образом:

  1. , откройте jmeter и запустите план тестирования (файл журнала "testing.csv" будет создан какfresh)
  2. В первый раз свойство isHeaderWritten имеет значение false.
  3. Нет, не закрывая и не открывая заново jmeter, снова запустите скрипт.я ожидаю, что файл журнала «testing.csv» должен быть обрезан и добавить значения заново.Но в действительности файл «testing.csv» добавляется с новыми значениями.
  4. Теперь закройте jmeter и снова откройте, на этот раз файл журнала «testing.csv» будет усечен, а новые новые значениядобавлено.

Как очистить файл и перезаписать записи для каждого прогона (без закрытия jemeter)

import org.apache.jmeter.util.JMeterUtils;

threadName=ctx.getThread().getThreadName();
log.info("threadName: "+threadName);

isHeaderWritten = JMeterUtils.getPropDefault("isHeaderWritten","false");
 fileName="C:\\response\\testing.csv";
log.info("isHeaderWritten: "+isHeaderWritten);
if(isHeaderWritten == "true"){  
    f = new FileOutputStream(fileName, true);   
    fileHeader = "requestStatus,cNumber,pId,id,token";
}else{
    log.error("isHeaderWritten:"+isHeaderWritten);
    f = new FileOutputStream(fileName, false);
    fileHeader = "requestStatus,cNumber,pId,id,token";
}
p = new PrintStream(f); 
this.interpreter.setOut(p); 
if(isHeaderWritten == "false"){ 
    print(fileHeader);  
    JMeterUtils.setProperty("isHeaderWritten", "true");
}
log.info("Test results will be written to file "+fileName);

cNumber=vars.get("cNumber");
log.info("cNumber"+cNumber);
pId = vars.get("pId");
log.info("pId"+pId);
pmId = vars.get("pmId");
log.info("pmId"+pmId);
tTxt = vars.get("tTxt");
log.info("tTxt"+tTxt);

responseCode=prev.getResponseCode();
log.info("responseCode  of "+requestString+ " is "+responseCode);
requestStatus = "Success";
if(!"201".equals(responseCode)){
    requestStatus = "Failure"+","+cNumber+","+pId+","+pmId+","+tTxt;
}
result = requestStatus;
if("Success".equals(requestStatus)){

    responseData=new String(data);
    log.info("responseData  of "+requestString+ " is "+responseData);
    requestString=requestStatus+","+cNumber+","+pId+","+pmId+","+tTxt;
    result = requestString;
    log.info("result"+result);
}
log.debug(result);
print(result);
f.close();

1 Ответ

0 голосов
/ 24 октября 2018

Согласно Документация JMeter :

Свойства являются глобальными для JMeter, поэтому могут использоваться для связи между потоками и группами потоков

Свойства не являютсятак же, как переменные.Переменные являются локальными для потока;свойства являются общими для всех потоков

Поэтому, как только вы выполните эту строку:

JMeterUtils.setProperty("isHeaderWritten", "true");

свойство isHeaderWritten станет true и останется true, пока вы не перезапуститеJMeter.

Самым простым решением было бы добавить * 109 * группу потоков tearDown в ваш план тестирования (эта группа потоков выполняется после любой другой группы (потоков)) и добавитьa JSR223 Sampler со следующим кодом:

SampleResult.setIgnore();
org.apache.jmeter.util.JMeterUtils.setProperty("isHeaderWritten", "false");

Начиная с версии JMeter 3.1 пользователям предлагается переключаться на тестовые элементы JSR223 и язык Groovy для любой формысценариев в основном потому, что производительность Groovy намного лучше, чем Beanshell , поэтому рассмотрите возможность перехода на JSR223 PostProcessor и язык Groovy при следующей доступной возможности

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