我有一个用例,我运行 Karate Netty 服务器作为转发代理服务器,将请求转发到目标 Tomcat 服务器。我注意到 hostname 标头在转发导致请求不响应的请求时被设置为 Karate Netty 服务器。在将请求转发到目标服务器之前,我们能否以某种方式更新请求标头。
更广泛的用例:在实时 QA 环境中进行测试,我们有一个提升和转移项目,将我们的休息服务从一个基础设施平台转移到另一个基础设施平台。这是示例特征文件:
Feature:
Scenario: pathMatches('/myresources/getResource') && methodIs('GET')
# Sending request to PLATFORM ABC URL
* karate.proceed('http://localhost:8081')
* def response1 = response
# Sending request to PLATFORM XYZ URL
* karate.proceed('http://localhost:8082')
* def response2 = response
* match response1 == response2
首先,对于您的评论 - 获取包含查询字符串的路径应该通过
requestUri
工作:
https://github.com/karatelabs/karate/tree/master/karate-netty#requesturi
但我们意识到有一个错误。它将在下一个版本中修复,但如果您可以从develop
分支验证,那将有助于我们加快发布速度。
如果您看到上面链接的问题 #2295 中的提交,您会看到我们引入了
requestPath
以更好地控制这些情况。
谈到标头,我认为在您调用
karate.proceed()
之前模拟中的这一行将起到作用:
* requestHeaders['host'] = 'myhost:123'
请确认。如果您仍然发现需要调整的地方,我请求您的帮助 - 您可以查看流程并运行 this test 进行调查。我记得有人遇到了内容长度的问题,所以我们决定只在模拟中删除该标题,请参阅这一行。
感谢@Peter Thomas 的所有帮助!我能够使用以下代码片段解决上述问题:
* configure cookies = null
* requestHeaders['cookie'] = authToken
* requestHeaders['host'] = firstHost
* karate.proceed(url1)
* def response1 = response
* configure cookies = null
* requestHeaders['cookie'] = authToken
* requestHeaders['host'] = secondHost
* karate.proceed(url2)
* def response2 = response
* match response1 = response2