[英]How to iterate multiple feature files in karate
特征文件 1:inputData.feature
@ignore
Feature: Input data table
Scenario: Input table for testing
* table testData
| accountId | accountname | expectedAccount |
| 'ADS5678543' | 'Peter' | 'DFCVSAEFRG' |
| 'ASDCF45678' | 'Caroline' | 'DFCWEAEFRG' |
文件 2:payload.json
{
"channelData": {
"data": "CHANNEL_DATA",
"salesChannel": "WEB",
"createdBy": "WEBSITE",
"accountId": "#(accountId)",
"sessionId": "#(accountname)"
}
}
文件 3:Request.feature
@ignore
Feature:
Scenario:
# read the payload from json file
* def Request = read('../payload.json')
* def headersData = { "Content-Type" : "application/json"}
Given url BaseUrl + '/account/'+'#(accountId)'
And request Request
And headers headersData
When method post
Then status 200
* print response
* def account = karate.jsonPath(response, "$.account")
* print 'account is '+account
Then match account == '#(expectedAccount)'
文件 4:addressinfo.feature
@ignore
Feature:
Scenario:
* def Request = “{
“accountId": "#(resAccount)”
}
”
* def headersData = { "Content-Type" : "application/json"}
Given url BaseUrl +'#(resAccount)’+'/address’
And request Request
And headers headersData
When method post
Then status 200
* print response
File5: Account-token.feature
Feature:
Scenario: identify the reference account
* def initTestData = read('../inputData.feature')
* def reqRes = karate.call('../Request.feature', { initTestData : initTestData })
* def resAccount = $reqRes[*].account // output of this is [“SB987658”,”SB984345”]
* def addressData = read('../addressinfo.feature’,{resAccount: resAccount})
在上面的場景中,我們必須將 Request.feature 的輸出作為輸入傳遞給addressing.feature。 java.net.URISyntaxException:索引 34 處的路徑中存在非法字符: http ://10.36.145.196:9983/invoker/ [ “SB987658”,“SB984345”]/address。 我們的要求是它應該迭代 resAccount 的每個值,我們需要將 addressinfo.feature 的 o/p 響應作為 I/p 傳遞給另一個特征文件。
需要循環的call
參數的規則是它必須是一個 JSON 數組。 參考: https : //github.com/intuit/karate#data-driven-features
所以你可以轉換原始數組,參考: https : //github.com/intuit/karate#json-transforms
* def resAccountList = karate.map(resAccount, function(x){ return { resAccount: x } })
我不得不說你的測試設計得很糟糕,將來會給你帶來維護問題。 盡量避免“過多重用”,盡量避免call
。 請參閱此答案以了解原因: https : //stackoverflow.com/a/54126724/143475
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.