无法在空手道中为 Odata URL 指定圆括号

Unable to specify round brackets for Odata URL in Karate

我正在尝试为空手道中的 Odata URL 创建路径。 路径如下所示:'/opu/odata/srt/ZQ_SRV/ZQ_BI_Q001(OPT_1='0013076036',OPT_To='0013076036')/Results'

空手道似乎无法阅读圆括号 () 和 ' ' 等特殊字符。并在圆括号开始之前在 opu/odata/srt/ZQ_SRV/ZQ_BI_Q001 之后剪切 url。 url (OPT_1='0013076036',OPT_To='0013076036')/Result 的其余部分看起来像文本。

我试过使用 %28 表示 ( 和 29% 表示 ) 和 %27 表示 ' 但它没有帮助。

P.S.When 运行 同样的 url 在 Postman 中调用成功

运行 测试 url:

Background:
    * url "https://httpbin.org/anything/opu/odata/srt/ZQ_SRV/ZQ_BI_Q001(OPT_1='0013076036',OPT_To='0013076036')/Results"
  Scenario: test check
    * method get

尝试完全手动构建 url,不要使用 parampath:

* url "http://myhost/opu/odata/srt/ZQ_SRV/ZQ_BI_Q001(OPT_1='0013076036',OPT_To='0013076036')/Results"

如果还是不行,很可能你的服务器没有正确处理编码的 URL-s 这可能是一个错误:

编辑:只需尝试这两行来证明空手道没有问题/或者看这个更简单的例子:

* url "https://httpbin.org/anything/opu/odata/srt/ZQ_SRV/ZQ_BI_Q001(OPT_1='0013076036',OPT_To='0013076036')/Results"
* method get

这是结果:

Running com.intuit.karate.junit4.dev.TestRunner
23:11:06.404 [main] DEBUG com.intuit.karate - request:
1 > GET https://httpbin.org/anything/opu/odata/srt/ZQ_SRV/ZQ_BI_Q001(OPT_1='0013076036',OPT_To='0013076036')/Results
1 > Accept-Encoding: gzip,deflate
1 > Connection: Keep-Alive
1 > Host: httpbin.org
1 > User-Agent: Apache-HttpClient/4.5.5 (Java/1.8.0_231)

23:11:08.154 [main] DEBUG com.intuit.karate - response time in milliseconds: 1745.46
1 < 200
1 < Access-Control-Allow-Credentials: true
1 < Access-Control-Allow-Origin: *
1 < Connection: keep-alive
1 < Content-Type: application/json
1 < Date: Wed, 22 Jan 2020 17:41:07 GMT
1 < Referrer-Policy: no-referrer-when-downgrade
1 < Server: nginx
1 < X-Content-Type-Options: nosniff
1 < X-Frame-Options: DENY
1 < X-XSS-Protection: 1; mode=block
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {}, 
  "headers": {
    "Accept-Encoding": "gzip,deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "Apache-HttpClient/4.5.5 (Java/1.8.0_231)"
  }, 
  "json": null, 
  "method": "GET", 
  "origin": "49.206.14.183, 49.206.14.183", 
  "url": "https://httpbin.org/anything/opu/odata/srt/ZQ_SRV/ZQ_BI_Q001(OPT_1='0013076036',OPT_To='0013076036')/Results"
}

通过将 * method get 代替 When method GET Then status 200

解决了问题