在我们的一个用例中,我们尝试读取一个功能文件,其唯一目的是对用户进行身份验证。然后,我从它的响应中提取 token 和 sessionId 信息,这些信息将在下一个 API 调用中作为标头传递。
通话功能
检索优惠.功能
And call read('classpath:features/AuthenticateUser.feature')
* def token = response.data.uToken
* def sessionId = response.data.user.uSessionId
* configure headers = call read('classpath:headers.js) {uToken : #(token), uSessionId : #(sessionId)'}
And call read('classpath:features/EligibleOffer.feature)
And path '/api/v1/applyOffer'
And method post
Then status 200
称为功能
合格优惠.功能
Scenario: Validate the user is able to get the eligible offers
Given url baseUrl
And path '/api/v1/offers'
When method get
Then status 200
它做的一切都是正确的,从某种意义上说,它为 api 调用 /api/v1/applyOffer 设置了必要的标头信息,该信息位于功能文件 EligibleOffer.feature 中,但是当它尝试点击api,无论我增加超时时间,每次都会出现以下错误。
错误 com.intuit.karate - java.net.SocketTimeoutException:读取超时,http 调用在 url 20054 毫秒后失败:...
已尝试解决方案 - 我尝试配置超时但根本不起作用。
但是,如果我随后通过将所有内容编译在单个功能文件中来重写功能文件,则它可以正常工作。根本不存在超时问题。
检索优惠.功能
* def token = response.data.uToken
* def sessionId = response.data.user.uSessionId
* configure headers = call read('classpath:headers.js) {uToken : #(token), uSessionId : #(sessionId)'}
Given url baseUrl
And path '/api/v1/offers'
When method get
Then status 200
And path '/api/v1/applyOffer'
And method post
Then status 200
使用背景部分。此部分将在功能文件中的每个场景之前执行。使用 callonce 关键字避免多次调用 AuthenticateUser.feature
Background:
And callonce read('classpath:features/AuthenticateUser.feature')
* def token = response.data.uToken
* def sessionId = response.data.user.uSessionId
Given url baseUrl
Scenario: Validate the user is able to get the eligible offers
And path '/api/v1/offers'
When method get
Then status 200