空手道 API : 在 Json 负载空手道 API 中将数字四舍五入到小数点后 2 位

Karate API : Round a number to 2 decimal point in Json payload Karate API

我正在尝试从例如 中的键传递一个值。 “29.00”。我将此值传递给的请求不接受围绕该值的双引号。它只接受 2 个小数点和一个数字。例如 29.00

问题是当我使用 parseInt(amount)parseFloat(amount) 时它会丢弃最后一个零。因此该值变为 api 不接受的 29.0。

我只需要该值保留 2 个小数点,这样尾随的 0 就不会被删除。

我使用了像 function(test) { return parseInt(amount).toFixed(2)} 这样的 JS 函数,但它不起作用。

我使用的代码示例:

如有任何帮助,我们将不胜感激

首先,在我看来,如果服务器不接受 29.0 并且只接受 29.00 这是服务器端的错误,空手道做了正确的事情为您呈现这个。

无论如何,你总是可以像这样“强制”一个字符串作为有效负载,同时看看 text keyword:

* url 'https://httpbin.org/anything'
* header Content-Type = 'application/json'
* request '{ "foo": 29.00 }'
* method post

即使请求日志可能显示 29.0,您也可以验证上述请求是否符合您的预期,因为响应将回应发送的请求:

1 > POST https://httpbin.org/anything
1 > Content-Type: application/json; charset=UTF-8
1 > Content-Length: 16
1 > Host: httpbin.org
1 > Connection: Keep-Alive
1 > User-Agent: Apache-HttpClient/4.5.13 (Java/11.0.11)
1 > Accept-Encoding: gzip,deflate
{"foo":29.0}

16:34:12.445 [main] DEBUG com.intuit.karate - response time in milliseconds: 1293
1 < 200
1 < Date: Fri, 02 Jul 2021 11:04:12 GMT
1 < Content-Type: application/json
1 < Content-Length: 510
1 < Connection: keep-alive
1 < Server: gunicorn/19.9.0
1 < Access-Control-Allow-Origin: *
1 < Access-Control-Allow-Credentials: true
{"args":{},"data":"{ \"foo\": 29.00 }","more": "..."}

所以现在由您来创建所需的 JSON 字符串。这里只是一种方式,还有其他的可能性(空手道1.X):

* def temp = java.lang.String.format("%.2f", new java.lang.Double(29))
* def body = `{ "foo": ${temp} }`
* url 'https://httpbin.org/anything'
* header Content-Type = 'application/json'
* request body
* method post