Проблема с Groovy и типами переменных

Я пытаюсь получить фрагмент кода Groovy (работающий с SOAPUI), но у меня возникла проблема.

Предполагается, что этот код должен читать файл свойств, а затем устанавливать некоторые свойства в SOAPUI. Я поместил это в тестовый шаг сценария Groovy в тестовом примере SOAPUI, и каждый раз, когда он запускается, я хочу, чтобы он читался из другого имени файла, поэтому у меня есть два дополнительных свойства в тестовом примере, cur_request_number и max_request_number.

Предполагается, что этот код каждый раз увеличивает значение cur_request_number и проверяет, достигает ли оно значения max_request_number, и если да, то возвращает cur_request_number значение 1. Это работает, но только до тех пор, пока max_request_number равно 9 или меньше. Если это 10 или выше, когда оно достигает 9 или 10, cur_request_number++, кажется, увеличивает его до строкового значения, например, точки с запятой.

Другими словами, он должен читать (в каждом цикле):

testprop1.txt
testprop2.txt
.
.

Код, который я публикую ниже, на самом деле еще не читает файлы textpropX.txt, а просто печатает имена файлов, которые он БУДЕТ читать, поскольку я все еще занимаюсь отладкой.

Я действительно новичок в Groovy, поэтому я немного застрял. Я пытался добавить toInteger(), но потом получаю разные проблемы.

def cur_request_number = testRunner.testCase.getPropertyValue("cur_request_number");
def max_request_number = testRunner.testCase.getPropertyValue("max_request_number");
log.info "INITIAL cur_request_number=[" + cur_request_number + "]"
log.info "INITIAL max_request_number=[" + max_request_number + "]"

cur_request_number++;

log.info "BUMPED cur_request_number=[" + cur_request_number + "]"

if (cur_request_number == max_request_number) {
    log.info "In the IF about to reset cur_request_number to 1";
    cur_request_number = "1";
}

// set the cur_request_number property (either the incremented one, or "1")
testRunner.testCase.setPropertyValue("cur_request_number", cur_request_number);

cur_request_filename = "E:/SOAPUI-PROPS/testprops" + cur_request_number.toString() +".txt";
log.info "READING FROM Request file [" + cur_request_filename + "]"

props = new java.util.Properties ()
file = new File("E:/SOAPUI-PROPS/testprops.txt")
if(!file.exists()) {
    log.info "No file found at E:/SOAPUI-PROPS/testprops.txt"
}
else {
    log.info "max_request_number=[" + max_request_number + "]"

    log.info "In the ELSE, cur_request_number=[" + cur_request_number + "]"
    //testRunner.testCase.setPropertyValue("cur_request_number", cur_request_number);
    log.info "Found E:/SOAPUI-PROPS/testprops.txt"
    fis = new FileInputStream (file)
    props.load (fis)
    requestid = props.getProperty ( "requestid" )
    log.info "requestid = [" + requestid + "]"
    dnstring = props.getProperty ( "dnstring" )
    log.info "dnstring= [" + dnstring + "]"
    testRunner.testCase.setPropertyValue("requestid", requestid);
    context.requestid = requestid;
    log.info "Finished setting 'requestid' property"
    testRunner.testCase.setPropertyValue("dnstring", dnstring);
    context.dnstring = dnstring;
    log.info "Finished setting 'dnstring' property"
} 

Если бы кто-нибудь мог сказать мне, что я делаю неправильно, я был бы очень признателен.

Спасибо, Джим


person user555303    schedule 13.07.2011    source источник


Ответы (1)


Попробуйте изменить

def cur_request_number = testRunner.testCase.getPropertyValue("cur_request_number");
def max_request_number = testRunner.testCase.getPropertyValue("max_request_number");

to

int cur_request_number = Integer.parseInt( testRunner.testCase.getPropertyValue("cur_request_number") )
int max_request_number = Integer.parseInt( testRunner.testCase.getPropertyValue("max_request_number") )

Я подозреваю, что он читает число из файла свойств где-то в виде строки

Как видите, getPropertyValue возвращает String

person tim_yates    schedule 13.07.2011
comment
Благодарю. Я попробую это. В то же время, я, наконец, заставил это работать, хотя и другим, возможно, действительно более уродливым способом. Что мне нужно было сделать, так это создать в основном соответствующие целочисленные переменные, например. def cur_request_number_INT и установите для него целочисленное значение, используя cur_request_number_INT = cur_request_number.toInteger(), и то же самое для max_request_number и max_request_number_INT. - person user555303; 13.07.2011
comment
Я попробовал ваше предложение, и (1) оно работает и (2) оно определенно очищает мой код. Мне все еще приходилось использовать некоторые преобразования toString(), но теперь это определенно выглядит намного лучше! Джим - person user555303; 13.07.2011