2014-12-11 2 views
0

Я использую версию SoapUI с открытым исходным кодом для выполнения тестирования нагрузки на веб-службу SOAP.Уникальное свойство на запрос SoapUI с использованием groovy

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

У меня есть файл свойства, который имеет несколько свойств, каждое свойство имеет значение для вызова заводного скрипта для чтения случайного значения из файла и присвоить его тестовый пример собственности, т.е. в поле значения:

${=(DynamicPropertyScript)}

Script:

// Load property from file 
def file = new File('path') 

// Create empty list for file contents 
def list = []; 

// Populate list with file contents 
addURLstoList = {list.add(it)}; 
file.eachLine(addURLstoList); 

// Pick a random item from list 
def randomIndex = (int)Math.random()*list.size; 
def randomValue = list.get(randomIndex); 

// Assign random value to property 
def tc = testRunner.testCase; 
tc.setPropertyValue('property', randomValue); 
log.info(randomValue) 

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

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

Некоторые вещи я пытался в запросе

<inc:ID>${Properties#property}</inc:ID> 

<inc:ID>${=(DynamicPropertyScript)}</inc:ID> 

Ошибка я получаю:

<inc:ID>No such property: DynamicPropertyScript for class: Script4</inc:> 

Любая помощь будет высоко ценится, кроме того, если есть альтернативный способ, который бы также помогите (я понимаю, что отправка множества запросов & чтение с диска каждый раз не является идеальным).

Спасибо :)

ответ

2

Я хотел бы посмотреть, чтобы загрузить список данных в памяти один раз, чтобы избежать повторного ввода-вывода, а затем выбрать случайный элемент из списка в стадии испытаний, который требует его с помощью Groovy выражение. Вы можете использовать переменную контекста для хранения данных в памяти.

Следующий скрипт Groovy будет считывать содержимое файла данных с именем data1.txt, расположенным в корневом каталоге проекта, и загружать его в контекстную переменную. Переменная context.data содержит элементы данных в виде списка, а context.dataCount содержит количество элементов.

Возможно, вы захотите добавить это как скрипт установки (либо к TestSuite, либо TestCase), а не в тестовый шаг Groovy, чтобы он запускался только один раз. Контекстные переменные остаются в области соответствующего линеара Suite/Case, поэтому на них можно ссылаться на любом из последующих шагов.

def projectDir = context.expand('${projectDir}') + File.separator 
def dataFile = "data1.txt" 

try 
{ 
    File file = new File(projectDir + dataFile) 
    context.data = file.readLines() 
    context.dataCount = context.data.size 
} 
catch (Exception e) 
{ 
    testRunner.fail("Failed to load " + dataFile + " from project directory.") 
    return 
} 

Затем, чтобы получить случайный элемент данных из context.data переменных, введите следующее выражение в качестве значения параметра или встроенный в теле запроса, как это требуется.

${=context.data.get((int)(Math.random()*context.dataCount))} 
+0

Работало, спасибо, спасибо! – mitchellt

+0

Как я могу прочитать эти значения последовательно? – amique

Смежные вопросы