Передача переменной из одного файла объектов в другой как часть URL-адреса запроса (не параметра запроса) в каратэ - PullRequest
1 голос
/ 07 ноября 2019

У меня есть функция, которая генерирует идентификатор автомобиля и сохраняется как переменная в функции. Я хочу передать этот идентификатор как часть URL-адреса запроса в другой функции в качестве своего рода операции разрыва.

Это то, как я назвал его с помощью функции activVehicle.feature

Scenario : Activate a vehicle   

    * header X-API-Key = apiKey
    * def result = callonce read('createVehicle.feature')
    * def vehicleId = result.vId

 # some workflow steps
  ........
  ........
  ........

 # tear down - delete the vehicle created
  * call read('deleteVehicle.feature'){ vehcileId: '#(vehicleId)' }

В вызываемой функции - deleteVehicle.feature

Scenario: Delete a vehicle 
  * header X-API-Key = apiKey
  * def myurl = 'https://xxx/vehicle'+ vehicleId +'?permanent=yes'


    Given myurl
    And request ''
    When method delete
    Then status 200

Прав ли я в подходе? Я хочу повторно использовать deleteVehicle.feature также и в других рабочих процессах и, следовательно, не выполнять эту операцию в том же activVehicle.feature (что было бы очень легко). Я также ссылался на документацию, но она показывает, как мы можем использовать переменные в теле запроса, но не как переменную, которую можно использовать в любом месте вызываемой функции. Я не хочу использовать его в теле запроса (но хочу использовать его как часть URL-адреса запроса). Например:

 Scenario:
 Given url loginUrlBase
 And request { userId: '#(username)', userPass: '#(password)' }

Я также сослался на Как я могу вызватьпеременная из одного файла пространственных объектов в другой, используя Тестирование API Карате . Я последовал его примеру для решения, но получаю ошибку javascript:

 feature.deleteVehicle: -unknown-:11 - javascript evaluation failed: 
 'https://xxx/vehicle'+ vehicleId +'?permanent=yes', ReferenceError: "vehicleId" 
  is not  defined in <eval> at line number 1
  feature.SVT: SVT.feature:80 - javascript evaluation failed: vehicleId: '#(vehicleId)' }, <eval>:1:14 Expected eof 
   but found }
   vehicleId: '#(vehicleId)' }
                             ^ in <eval> at line number 1 at column number 14

Может кто-нибудь любезно помочь и посоветовать, пожалуйста?

1 Ответ

1 голос
/ 07 ноября 2019

Можете ли вы упростить свой пример? Единственное, что я могу разглядеть, это то, что вам нужен пробел после функции call и перед аргументом вызова:

* call read('deleteVehicle.feature') { vehcileId: '#(vehicleId)' }

Шаблон, который мы обычно рекомендуем, это setUp not tearDown, так как tearDown имеет риск невыполнение, если у вас была ошибка. Тем не менее, пожалуйста, смотрите хуки: https://github.com/intuit/karate#hooks

Иногда вам просто нужно сделать это простым и вызывать функцию (с аргументами) только там, где она вам нужна.

...