Список переноса между этапами Groovy test (SoapUI)

#groovy #soapui

#groovy #soapui

Вопрос:

У меня есть один тестовый пример, который вызывается (запускается и завершается) перед каждым запуском других тестовых примеров. Это что-то вроде тестового примера «подготовка тестовых данных». Результатом этого тестового примера является список с некоторыми элементами, список выглядит следующим образом:

 def list = ['Login', 'Get Messages', 'Logout', etc.]
  

Список отличается при каждом запуске. Мне нужно перенести этот список из тестового примера «подготовка тестовых данных» в другие тестовые примеры. Перенос будет осуществляться между двумя скриптами Groovy.

Как перенести список между двумя этапами Groovy test в SoapUI?

Комментарии:

1. Формулировка вашего вопроса наводит меня на мысль, что вы ищете какую-то устоявшуюся «наилучшую практику». Я не думаю, что это существует. Если вы просто ищете наиболее удобное для вас решение, возможно, я смогу помочь вам с ответом.

2. @Steen, я буду рад любому рабочему решению

Ответ №1:

Насколько я понимаю:

  • У вас есть один тестовый набор, который вы вызываете из любого другого тестового набора.
  • Я предполагаю, что это делается с помощью тестового шага «Запустить TestCase»?
  • Вы хотели бы иметь возможность передавать список строк
  • Как я прочитал, параметры идут в одну сторону. Из «внешнего тестового набора» и обратно в вызывающий тестовый набор. Нет «ввода» из каждого тестового набора в этот «внешний тестовый набор»?

Скрипт Groovy в вашем «external testcase» может затем сгенерировать результат String, который, в свою очередь, может быть преобразован во что-то вроде массива или ArrayList строк. Это может быть строка со значениями, разделенными ;

 def result = ""
result  = "Entry1;"
result  = "Entry2;"
result  = "Entry3;"
// You may want to add a line of code that removes the last ;
return result
  

Затем этот результат будет легко получен из скриптов Groovy в другом месте, путем добавления нескольких строк кода.

Если скрипт Groovy размещен в другом тестовом наборе, но в том же TestSuite, вы можете получить результат с помощью:

 def input = testRunner.testCase.testSuite.getTestCaseByName("Name of TestCase").getTestStepByName("Groovy Script Name").getPropertyValue("result")
  

Если он помещен в TestCase в другом TestSuite, вы можете использовать:

 def input = testRunner.testCase.testSuite.project.getTestSuiteByName("Test Suite Name").getTestCaseByName("Test Case Name").getTestStepByName("Groovy Script Name").getPropertyValue("result")
  

а затем повторите ввод, выполнив что-то вроде:

 for (def s : input.split(";")) {
    log.info s
    // Do your stuff here
}
  

Я надеюсь, что это имеет смысл …? 🙂

Ответ №2:

с шага groovy 1 вы должны вернуть список:

 def list = ['Login', 'Get Messages', 'Logout']
return list
  

из шага groovy 2 вы можете получить этот возвращаемый список

 def result = context.expand( '${Groovy Script 1#result}' )

list = result.tokenize('[,] ')

list.each{
    log.info it
}
  

обратите внимание, что вы получаете строку, которую вам нужно преобразовать обратно в список (маркировать).

Я сделал это с SOAPUI pro. Другим способом (некрасивым) было бы сохранить список в пользовательском свойстве в скрипте groovy 1 (используя TestRunner.TestCase.setPropertyValue(«myList»,list.toString()) и восстановить его на шаге groovy 2 (TestRunner.TestCase.GetPropertyValue(«myList»)

Я надеюсь, что это поможет

РЕДАКТИРОВАТЬ: если элементы списка содержат пробелы

это не очень чисто, и я надеюсь, что кто-нибудь поможет предоставить что-то лучшее, но вы можете сделать следующее :

 list = "['Login - v1', 'Get Messages - v2', 'Logout - v1']"
list =  list.replace(''','"')

def jsonSlurper = new groovy.json.JsonSlurper()
list = jsonSlurper.parseText(list) 

list.each{
    log.info it
}
  

Алекс

Комментарии:

1. Спасибо, передача работает должным образом, но когда я получу список, который выглядит следующим образом: ['Login - v1', 'Get Messages - v2', 'Logout - v1'] тогда tokenize('[,] ') он не будет работать должным образом. Это разделяет его на большее количество элементов. И если я попытаюсь использовать это: tokenize('[,]') тогда мне нужно использовать элементы с .trim() , потому что перед каждым элементом есть пробел.

2. ах, это действительно проблема … Я добавлю немного кода