我想在空手道场景中使用 multipart fields 关键词短语。我这样使用:
* def formFields =
"""
{
partFileName: 'aa',
partCount: 2,
partNumber: 0,
partSize: '#(testFiles.aa.byteSize)',
fileSize: '#(testFiles.ab.byteSize)',
fileName: 'ab'
}
"""
Given path 'uploads', uploadId
And headers requiredHeaders
* def readObject = ({ read: 'classpath:' + testFiles[formFields.partFileName].path, contentType: testFiles[formFields.partFileName].type })
And multipart fields formFields
And multipart file file = readObject
And method put
Then match responseStatus == 200
但是空手道仅将
formFields
中的 2 个键作为字段添加到表单中:
(你可以从空手道的输出中看到),所以我得到的responseStatus是500。
为什么空手道不将其他 4 个键作为字段添加到表单中?
以下是运行场景的相关输出:
$ java -DserviceName=aca-cip -Dkarate.options="--tags ~@zCommon1" -cp ~/aca/karate/jars/karate-1.4.1.jar:. com.intuit.karate.Main --threads 3 boof.feature
09:21:14.765 [main] INFO com.intuit.karate - Karate version: 1.4.1
09:21:14.922 [main] INFO com.intuit.karate.Runner - using system property 'karate.options': --tags ~@zCommon1
09:21:15.026 [main] DEBUG com.intuit.karate.Suite - [config] classpath:karate-config.js
09:21:15.030 [main] INFO com.intuit.karate.Suite - backed up existing 'target/karate-reports' dir to: target/karate-reports_1697552475027
09:21:16.175 [main] DEBUG com.intuit.karate - request:
1 > POST https://api-int.nmlv.nml.com/v1/aca-cip/uploads
1 > Content-Type: application/json
1 > x-nm-nm_login_id: acakvlrt
1 > x-nm-login_id: acakvlrt
1 > apikey: pp2**********
1 > Host: api-int.nmlv.nml.com
1 > Connection: Keep-Alive
1 > User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
1 > Accept-Encoding: gzip,deflate
09:21:16.587 [main] DEBUG com.intuit.karate - response time in milliseconds: 408
1 < 201
1 < Date: Tue, 17 Oct 2023 14:21:16 GMT
1 < Content-Type: application/json
1 < Transfer-Encoding: chunked
1 < Connection: keep-alive
1 < Cache-Control: no-cache, no-store, max-age=0, must-revalidate
1 < Expires: 0
1 < Location: https://api-int.nmlv.nml.com/api/v1/aca-cip/uploads/batchId-cdcaf789-db0a-42d7-bb12-4446755a25f2
1 < Pragma: no-cache
1 < Strict-Transport-Security: max-age=31536000 ; includeSubDomains
1 < X-Content-Type-Options: nosniff
1 < X-Frame-Options: DENY
1 < X-Ratelimit-Limit: 0
1 < X-Ratelimit-Remaining: 0
1 < X-Ratelimit-Reset: 0
1 < X-Tyk-Api-Expires: Thu, 02 Jan 3000 15:04:00 UTC
1 < X-Xss-Protection: 1; mode=block
1 < x-nm-request-id: 57627821792bb2c258eeb0b98ac27e1d
{"id":"batchId-cdcaf789-db0a-42d7-bb12-4446755a25f2","key":null,"owner":"acakvlrt","initiated":"2023-10-17T14:21:16.654Z","parts":null}
CurrentTime epochmillis = 1697552476617
PointInTime epochmillis = 1697552476654
millisFromNow = 37
09:21:16.640 [main] INFO com.intuit.karate - [print] formFields: {
"partFileName": "boof",
"partCount": 2,
"partNumber": 0,
"partSize": 100,
"fileSize": 10580000,
"fileName": "ab"
}
09:21:16.712 [main] DEBUG c.i.karate.http.MultiPartBuilder - multipart: content-disposition: form-data; name="partFileName"; filename=""
content-type: text/plain; charset=UTF-8
content-length: 4
Completed: true
IsInMemory: true
09:21:16.713 [main] DEBUG c.i.karate.http.MultiPartBuilder - multipart: content-disposition: form-data; name="fileName"; filename=""
content-type: text/plain; charset=UTF-8
content-length: 2
Completed: true
IsInMemory: true
09:21:16.725 [main] DEBUG com.intuit.karate - request:
2 > PUT https://api-int.nmlv.nml.com/v1/aca-cip/uploads/batchId-cdcaf789-db0a-42d7-bb12-4446755a25f2
2 > Content-Type: application/json; boundary=44f68c049ab9e862
2 > x-nm-nm_login_id: acakvlrt
2 > x-nm-login_id: acakvlrt
2 > apikey: pp2**********
2 > Content-Length: 546
2 > Host: api-int.nmlv.nml.com
2 > Connection: Keep-Alive
2 > User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
2 > Accept-Encoding: gzip,deflate
--44f68c049ab9e862
content-disposition: form-data; name="partFileName"
content-length: 4
content-type: text/plain; charset=UTF-8
boof
--44f68c049ab9e862
content-disposition: form-data; name="fileName"
content-length: 2
content-type: text/plain; charset=UTF-8
ab
--44f68c049ab9e862
content-disposition: form-data; name="file"; filename="boof"
content-length: 100
content-type: text/plain; charset=UTF-8
aaaaaaaaa
aaaaaaaaa
aaaaaaaaa
aaaaaaaaa
aaaaaaaaa
aaaaaaaaa
aaaaaaaaa
aaaaaaaaa
aaaaaaaaa
aaaaaaaaa
--44f68c049ab9e862--
09:21:16.872 [main] DEBUG com.intuit.karate - response time in milliseconds: 146
2 < 500
2 < Date: Tue, 17 Oct 2023 14:21:16 GMT
2 < Content-Type: application/json
2 < Transfer-Encoding: chunked
2 < Connection: keep-alive
2 < Cache-Control: no-cache, no-store, max-age=0, must-revalidate
2 < Expires: 0
2 < Pragma: no-cache
2 < Strict-Transport-Security: max-age=31536000 ; includeSubDomains
2 < X-Content-Type-Options: nosniff
2 < X-Frame-Options: DENY
2 < X-Ratelimit-Limit: 0
2 < X-Ratelimit-Remaining: 0
2 < X-Ratelimit-Reset: 0
2 < X-Tyk-Api-Expires: Thu, 02 Jan 3000 15:04:00 UTC
2 < X-Xss-Protection: 1; mode=block
2 < x-nm-request-id: 0312c0e85b18000f0fede3c6eb8229b9
{"errorCode":"500","errorMessage":"Internal Server Error","errorDetails":"The server encountered an unexpected error while processing the request"}
09:21:16.878 [main] ERROR com.intuit.karate - boof.feature:38
Then match responseStatus == 200
match failed: EQUALS
$ | not equal (NUMBER:NUMBER)
500
200
boof.feature:38
---------------------------------------------------------
feature: boof.feature
scenarios: 1 | passed: 0 | failed: 1 | time: 1.0315
---------------------------------------------------------
09:21:17.822 [main] INFO com.intuit.karate.Suite - <<fail>> feature 1 of 1 (0 remaining) boof.feature
Karate version: 1.4.1
======================================================
elapsed: 2.91 | threads: 1 | thread time: 1.03
features: 1 | skipped: 0 | efficiency: 0.35
scenarios: 1 | passed: 0 | failed: 1
======================================================
>>> failed features:
match failed: EQUALS
$ | not equal (NUMBER:NUMBER)
500
200
boof.feature:38
<<<
HTML report: (paste into browser to view) | Karate version: 1.4.1
file:///Users/DET8049/aca/git/aca-test-document-api/target/karate-reports/karate-summary.html
===================================================================
我想我发现了问题:
多部分形式中缺少的formFields
中的键都是整数,当我定义
formFields
变量时,没有一个被引用。当我引用它们时,它们会作为字段提交到表单中。