SoapUI & Groovy - Как получить свойства из разных тестовых случаев, используя Run testCase

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

Моя проблема:

  1. У меня есть основной скрипт, который отправляет команды bash на наш сервер:
TestSuite: Tools;
   TestCase: sendBashCommands;
      TestStep: groovycript;
  1. Этот тестовый скрипт вызывается несколькими тестовыми примерами с использованием "Run testCase". Каждый тестовый пример имеет свою команду bash:
TestSuite: ServerInfo
   TestCase: getServerVersion
      Property: BashCommand="cat smt | grep Version"
      TestStep: Run sendBashCommands

   TestCase: getServerMessage
      Property: BashCommand="cat smt | grep Message"
      TestStep: Run sendBashCommands
   ...

На моем sendBashCommands.groovyScript я уже пробовал следующее:

//def bashCmd= context.expand( '${#BashCommand}' );
     //it returns empty;
//def bashCmd= testRunner.testCase.getPropertyValue( "BashCommand" );
     //it returns null;
//def bashCmd= context.getTestCase().getPropertyValue( "BashCommand" );
     //it returns null;
def bashCmd = context.expand('${#TestCase#BashCommand}');
     //it also returns empty;

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

1 ответ

Решение

Я думаю, что вы делаете это с целью обслуживания... Согласно вашему подходу, результат должен быть нулевым или пустым. Потому что ваш groovyscript не может напрямую получить свойства других тестов. Если вы вызываете метод getProperty() напрямую, то он будет ссылаться на текущее свойство testStep. Таким образом, следующий подход может помочь вам.

поместите следующий код в ваши индивидуальные тесты, "getServerVersion" и т. д.

def currentProject = testRunner.testCase.testSuite.project
// the following is to store the names of the test suite and the test cases from which you want to call your main script

currentProject.setPropertyValue("TestSuiteName",testRunner.testCase.getTestSuite().getLabel().toString())
currentProject.setPropertyValue("TestCaseName", testRunner.getTestCase().getLabel().toString())
// call sendBashCommands here -> run sendBashCommands

поместите этот код в ваш основной скрипт Groovy (sendBashCommands.groovyscript)

def currentProject = testRunner.testCase.testSuite.project
def callingTestCase = currentProject.testSuites[currentProject.getPropertyValue("TestSuiteName")].testCases[currentProject.getPropertyValue("TestCaseName")]
def bashCmd = callingTestCase.getPropertyValue( "BashCommand" )
// to verify
log.info bashCmd 

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

Другие вопросы по тегам