Groovy (SoapUI) выбирает, какой запрос совместим с развернутым API, и использует их - PullRequest
0 голосов
/ 22 марта 2019

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

Я написал простой скрипт на Groovy, который проверяет развернутую версию API (основную версию) на серверах и сохраняет их в свойствах набора тестов.Также этот скрипт проверяет, есть ли у нас запросы на эти версии.Сбой, когда у нас нет запроса на развернутую версию.

Свойства комплекта тестов выглядят примерно так:

CustomProperties

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

Моя идея состояла в том, чтобы создать карту (apiRequests) с именами API в качестве «ключей» и запрашивать имена в качестве «значений».Чем использовать .each и каждый цикл, он получит версию этого API из свойств Test Suite.Я сделал это:

API: регистрация, общение, счет клиента и т. Д.

Запросы: Вход, Выход из системы, список входящих сообщенийсообщения, см. историю счетов, получение неоплаченных счетов и т. д.

def apiRequests=[
  'onboarding' : ['Login', 'Logout'],
  'customer-bill' : ['See bill history', 'Retrieve unpaid bills'],
  'communication' : ['List of inbox messages'],
]
apiRequests.each{k,v-> 
def apiVersion =  testRunner.testCase.testSuite.project.getTestSuiteByName("Independent functions").getTestCaseByName("Get API Version").getPropertyValue("$k")
log.info apiVersion     //returns version for api in that loop (e.g. '2' for onboarding api)

}

И теперь мне нужно создать полное имя запроса (например, «Логин - v2»).Я думаю, что я могу использовать что-то вроде этого:

def finalRequest = (v + " -v " + apiVersion)

Но это не работает, потому что у меня есть больше «значений» для одного «ключа».

И затем мне нужно отключитьдругие запросы (отличные от всех finalRequests) ->

  1. Loop - отключить: 'Login - v1', 'Login - v3', 'Logout - v1', Logout - v3«; включить: 'Login - v2', 'Logout - v2'
  2. Loop - отключить: 'Просмотреть историю счетов - v2; включить: 'Просмотреть историю счетов - v1'
  3. Цикл - и т. Д.

Before After

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

1 Ответ

0 голосов
/ 29 мая 2019

Это будет работать, что вы ищете -

PS: Я предполагаю, что свойства добавлены в Project область действия метки.Если вы добавляете свойства TestSuite/TestCase lable, измените context.expand('${#TestSuite/TestCase#....}') соответственно.

testRunner.testCase.testSteps.each { k, v ->    
  if(k.inspect().contains(context.expand('${#Project#onboarding}'))) { 
     log.info k
     v.setDisabled(true)       
   }
  if(k.inspect().contains(context.expand('${#Project#communication}'))) { 
    log.info k  
    v.setDisabled(true)
  }
  if(k.inspect().contains(context.expand('${#Project#customer-bill}'))) { 
    log.info k  
    v.setDisabled(true)     
 }
}
return

PS: Я бы предложил изменить значение вашего свойства, добавив v в качестве версии перед номером версии, как вы назвали свое testStep имя - Login - v1, Login - v2 и т. Д.Таким образом, свойство будет выглядеть так:

|Name          | Value |
|----------------------|
|onboarding    |  v2   |
|communication |  v3   |
|customer-bill |  v1   |

В любом случае приведенный выше код будет работать.

...