[英]String.split() in Karate Feature File returning exceptions
我不確定如何從已創建的要素中拆分響應字符串以獲得響應 header“位置”值。
我試過的
1)
Feature: Create Tariff
Background:
* def result = call read('../../get-user-token.feature')
* def serviceId = call read('create-service.feature')
Scenario: Create Tariff
Given url 'https://app-dev.topbox.pro/tariff-svc/api/v1/tariffs'
And header Authorization = result.response.token_type + " " + result.response.access_token
And request
"""
{
serviceTypeId: '#(serviceId.responseHeaders['Location'].split('/')[1])',
owner: 1,
type: 0,
pencePerMile: '69.69',
minMileage: '1.00',
minCost: 5,
zoneFrom: '',
zoneTo: '',
fixedCost: 0
}
"""
When method POST
Then status 201
這導致...
IntegrationTests.TestSetup.create-tariff: create-tariff.feature:10 -.net.minidev.json.parser.ParseException: 意外的令牌 L 在 position 46。
2)
Feature: Create Tariff
Background:
* def result = call read('../../get-user-token.feature')
* def serviceId = call read('create-service.feature').responseHeaders['Location'].split('/')[1]
Scenario: Create Tariff
Given url 'https://app-dev.topbox.pro/tariff-svc/api/v1/tariffs'
And header Authorization = result.response.token_type + " " + result.response.access_token
And request
"""
{
serviceTypeId: '#(serviceId)',
owner: 1,
type: 0,
pencePerMile: '69.69',
minMileage: '1.00',
minCost: 5,
zoneFrom: '',
zoneTo: '',
fixedCost: 0
}
"""
When method POST
Then status 201
這導致...
失敗的功能:IntegrationTests.TestSetup.create-tariff: -unknown-:5 - javascript 評估失敗:read('create-service.feature').responseHeaders['Location'].split('/') 1 ,類型錯誤:無法從第 1 行的未定義中讀取屬性“位置”
注意指定的功能“create-service.feature”在隔離時確實有效,並產生響應 header,如下所示
使用lastIndexOf
而不是split
:
* def location = responseHeaders['Location'][0]
* def serviceId = location.substring(location.lastIndexOf('/') + 1)
您需要使用Javascript函數: https : //github.com/intuit/karate#javascript-functions
* def greeter = function(name){ return 'hello ' + name }
* assert greeter('Bob') == 'hello Bob'
編輯:
* def service = { key : "someinfo/myServiceId"}
* def func = function(service){return service.key.split('/')[1]}
* def serviceId = func(service)
* match serviceId == "myServiceId"
我認為第一個錯誤是由於表達式中的單引號引起的,請嘗試轉義
喜歡,
And request
"""
{
serviceTypeId: '#(serviceId.responseHeaders.Location[0].split(\'/\')[1])',
owner: 1,
type: 0,
pencePerMile: '69.69',
minMileage: '1.00',
minCost: 5,
zoneFrom: '',
zoneTo: '',
fixedCost: 0
}
"""
編輯:剛注意到,responseHeader中的每個值都有一個列表類型值,因此像Location [0]一樣訪問它
第二種方法應該是這樣的,
* def serviceId = call read('create-service.feature').responseHeaders.Location[0].split('/')[1]
我只是面臨同樣的問題( .split 不是 function ),在我的例子中,我需要先將數據轉換為字符串,然后再使用 split function。
這是來自adrien answer 的自定義代碼:
* def service = { key : "someinfo/myServiceId"}
* def func = function(service){return service.key.toString().split('/')[1]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.