jmeter - определяемые пользователем переменные и groovy - PullRequest
0 голосов
/ 23 ноября 2018

это моя цель:

сделать план тестирования более гибким и пригодным для использования как на win, так и на mac (поскольку некоторые люди используют mac, а другие используют win).

Я создал этот простой скриптв groovy:

import org.apache.jmeter.services.FileServer;
import groovy.json.JsonSlurper;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

    String winPath;
    String macPath;
    String winSlash;
    String macSlash;
    String userPath;
    String userSlash;

    if (System.properties['os.name'].toLowerCase().contains('windows')) {
        winPath="C:\\QA\\";
        winSlash="\\";
        vars.put("userPath",winPath.toString());
    }
    if (System.properties['os.name'].toLowerCase().contains('mac')) {
        macPath="/Users/macUser/QA/";
        macSlash="/";
        vars.put("userPath",macPath.toString());
    }

и добавьте его в объект «JSR223 Sampler» под моим объектом группы потоков

Затем я добавил объект «Пользовательские переменные» со следующей переменной var:

    Name        value
    projectDir  myProjectDir
    rootPath    ${__groovy(props.getProperty("userPath"))}${projectDir}

Затем я попытался использовать переменную rootPath для задания пути к моим CSV-файлам, поэтому я добавил ${projectDir}/AUTH.csv к FileName в объекте "CSV Data Set Config", но получилэто сообщение:

2018-11-23 16:36:40,634 DEBUG o.a.j.t.TestBeanHelper: Ignoring property 'property' in org.apache.jmeter.config.CSVDataSet
2018-11-23 16:36:40,634 DEBUG o.a.j.t.TestBeanHelper: Setting filename=myProjectPath/AUTH.csv

2018-11-23 16:36:40,634 DEBUG o.a.j.t.TestCompiler: Subtracting node, stack size = 2
2018-11-23 16:36:40,634 DEBUG o.a.j.t.TestCompiler: Subtracting node, stack size = 1
2018-11-23 16:36:40,634 INFO o.a.j.t.JMeterThread: Thread started: Thread Group 1-1
2018-11-23 16:36:40,634 INFO o.a.j.s.FileServer: Stored: myProjectPath/AUTH.csv
2018-11-23 16:36:40,635 ERROR o.a.j.t.JMeterThread: Test failed!
java.lang.IllegalArgumentException: Could not read file header line for file myProjectPath/AUTH.csv

, поскольку вы можете видеть, что оно пытается прочитать myProjectPath/AUTH.csv, а затем, конечно, возникает исключение ..

почему оно не "читает" переменную rootPath?

есть предложения?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018
  1. В соответствии с пользовательскими переменными документация :

    Обратите внимание, что все элементы UDV в плане тестирования - независимо от того, где они находятся - обрабатываются в начале .

  2. Дополнительно следует учитывать Порядок выполнения тестовых элементов JMeter

    0. Configuration elements
    1. Pre-Processors
    2. Timers
    3. Sampler
    4. Post-Processors (unless SampleResult is null)
    5. Assertions (unless SampleResult is null)
    6. Listeners (unless SampleResult is null)
    

Принимая во внимание вышеприведенные пункты, ваш код Groovy выполняется после определяемых пользователем переменных, поэтому вы не можете получить доступ к значению.Таким образом, единственный способ определить динамическое значение в зависимости от операционной системы в определяемых пользователем переменных - это использовать функцию __groovy () непосредственно в разделе Value, например:

${__groovy(if(System.getProperty('os.name').toLowerCase().contains('windows')){return 'C:\\\QA\\\' } else { return '/Users/macUser/QA/' },)}

enter image description here

Обязательно экранируйте запятые и обратную косую черту с другой обратной косой чертой, как в JMeter Функции запятая действует как разделитель параметров, а обратная косая черта является escape-символом.Ознакомьтесь с Apache JMeter Functions - Введение руководство, чтобы узнать больше о контексте функций JMeter.

0 голосов
/ 25 ноября 2018

Проблема в том, что вы пытаетесь добавить его в properties и пытаетесь прочитать его из variables.

Кроме того, не беспокойтесь о \ или / в Java.Java обрабатывает оба на каждой платформе.( Разница между File.separator и косой чертой в путях )

Для меня это прекрасно работает:

def path;

if (System.properties['os.name'].toLowerCase().contains('windows')) {
    path="C:\\QA\\";
} else if (System.properties['os.name'].toLowerCase().contains('mac')) {
    path="/Users/macUser/QA/";
}
vars.put("userPath",path);
vars.put("rootPath", path+vars.get("projectDir"));

И использовать его: log.info(vars.get("rootPath"))

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