2016-03-24 50 views
3

私はpdfファイルのPOSTに関する問題に遭遇しています。ガトリング2.1.7でのHARファイルを記録した後、ここで私が持っているものです。RecordedSimulation_0010_request.txtの内容でGatlingのPOSTリクエスト

.exec(http("request_10") 
     .post("/api/data/files?revisionId=e9af2c93-d8df-4424-b307-df4c4abbaad1&uploadType=read_only_file&fileType=application%2Fpdf&fileName=testdocument.pdf&fileSize=10080&copyToEditable=true") 
     .headers(Map(
      "Accept-Encoding" -> "gzip, deflate", 
      "Content-Type" -> "multipart/form-data; boundary=----WebKitFormBoundaryawCJ4mjL1imiO7Ye" 
      "Origin" -> url)) 
     .body(RawFileBody("RecordedSimulation_0010_request.txt"))) 

:私はそれを再生しようとすると、

------WebKitFormBoundaryawCJ4mjL1imiO7Ye 
Content-Disposition: form-data; name="resumableChunkNumber" 

1 
------WebKitFormBoundaryawCJ4mjL1imiO7Ye 
Content-Disposition: form-data; name="resumableChunkSize" 

1048576 
------WebKitFormBoundaryawCJ4mjL1imiO7Ye 
Content-Disposition: form-data; name="resumableCurrentChunkSize" 

10080 
------WebKitFormBoundaryawCJ4mjL1imiO7Ye 
Content-Disposition: form-data; name="resumableTotalSize" 

10080 
------WebKitFormBoundaryawCJ4mjL1imiO7Ye 
Content-Disposition: form-data; name="resumableType" 

application/pdf 
------WebKitFormBoundaryawCJ4mjL1imiO7Ye 
Content-Disposition: form-data; name="resumableIdentifier" 

66dc65bf-265d-4363-96fd-7fc13f8ceda4 
------WebKitFormBoundaryawCJ4mjL1imiO7Ye 
Content-Disposition: form-data; name="resumableFilename" 

testdocument.pdf 
------WebKitFormBoundaryawCJ4mjL1imiO7Ye 
Content-Disposition: form-data; name="resumableRelativePath" 

testdocument.pdf 
------WebKitFormBoundaryawCJ4mjL1imiO7Ye 
Content-Disposition: form-data; name="resumableTotalChunks" 

1 
------WebKitFormBoundaryawCJ4mjL1imiO7Ye 
Content-Disposition: form-data; name="file"; filename="blob" 
Content-Type: application/octet-stream 


------WebKitFormBoundaryawCJ4mjL1imiO7Ye-- 

これはおそらく(動作しません。

val documentFeeder = Iterator.continually(Map(
     "documentBoundary" -> (Random.alphanumeric.take(16).mkString), 
     "documentUuid" -> ((Random.alphanumeric.take(8).mkString + "-" + 
          Random.alphanumeric.take(4).mkString + "-" + 
          Random.alphanumeric.take(4).mkString + "-" + 
          Random.alphanumeric.take(4).mkString + "-" + 
          Random.alphanumeric.take(12).mkString).toLowerCase))) 

... 

.feed(documentFeeder) 
// a previous exec POST with a check to grab the documentRevisionId 

.exec(http("Post document: upload the file") 
      .post("/api/data/files") 
      .queryParamMap(Map(
       "revisionId" -> "${documentRevisionId}", 
       "uploadType" -> "read_only_file", 
       "fileType" -> "application%2Fpdf", 
       "fileName" -> "testdocument.pdf", 
       "fileSize" -> "10080", 
       "copyToEditable" -> "true")) 
      .headers(Map(
       "Accept-Encoding" -> "gzip, deflate", 
       "Content-Type" -> "multipart/form-data; boundary=----WebKitFormBoundary${documentBoundary}" 
       "Origin" -> url)) 

      .body(StringBody("""------WebKitFormBoundary${documentBoundary} 
           Content-Disposition: form-data; name="resumableChunkNumber" 

           1 
           ------WebKitFormBoundary${documentBoundary} 
           Content-Disposition: form-data; name="resumableChunkSize" 

           1048576 
           ------WebKitFormBoundary${documentBoundary} 
           Content-Disposition: form-data; name="resumableCurrentChunkSize" 

           10080 
           ------WebKitFormBoundary${documentBoundary} 
           Content-Disposition: form-data; name="resumableTotalSize" 

           10080 
           ------WebKitFormBoundary${documentBoundary} 
           Content-Disposition: form-data; name="resumableType" 

           application/pdf 
           ------WebKitFormBoundary${documentBoundary} 
           Content-Disposition: form-data; name="resumableIdentifier" 

           ${documentUuid} 
           ------WebKitFormBoundary${documentBoundary} 
           Content-Disposition: form-data; name="resumableFilename" 

           testdocument.pdf 
           ------WebKitFormBoundary${documentBoundary} 
           Content-Disposition: form-data; name="resumableRelativePath" 

           testdocument.pdf 
           ------WebKitFormBoundary${documentBoundary} 
           Content-Disposition: form-data; name="resumableTotalChunks" 

           1 
           ------WebKitFormBoundary${documentBoundary} 
           Content-Disposition: form-data; name="file"; filename="blob" 
           Content-Type: application/octet-stream 
           Content-Transfer-Encoding: BINARY 


           ------WebKitFormBoundary${documentBoundary}--"""))) 

最後には、ここで我々のアプリでダミーデータを投稿するNode.jsのコードです(I:原因)のユニークなIDに、その()ボディフォルダにtestdocument.pdfを貼り付けた後、私は次のことをやりました私はそれが動作を知っているので、「)を基準として、これを使用してメートル:

var resumableData = { 
     resumableChunkNumber: 1, 
     resumableChunkSize: 1048576, 
     resumableCurrentChunkSize: file.size, 
     resumableTotalSize: file.size, 
     resumableType: guessBestMimeType(file.name, file.type), 
     resumableIdentifier: genUuid(), 
     resumableFilename: file.name, 
     resumableRelativePath: file.name, 
     resumableTotalChunks:1 
    }; 

    var boundaryKey = Math.random().toString(16); // random string 

    // the header for the one and only part (need to use CRLF here) 
    var resumableBody = ''; 

    for(var resumablePart in resumableData){ 
     if(resumableData.hasOwnProperty(resumablePart)){ 
      resumableBody += 
       '--' + boundaryKey + '\r\n' + 
       'Content-Disposition: form-data; name="' + resumablePart + '"\r\n\r\n' + 
       resumableData[resumablePart] + '\r\n'; 
     } 
    } 
    resumableBody += 
     '--' + boundaryKey + '\r\n' + 
     'Content-Disposition: form-data; name="file"; filename="blob"\r\n' + 
      // use your file's mime type here, if known 
     'Content-Type: application/octet-stream\r\n' + 
     'Content-Transfer-Encoding: BINARY\r\n\r\n'; 

    var resumableEnd = '\r\n--' + boundaryKey + '--'; 

    var request = https.request({ 
     method : 'POST', 
     host : config.API_HOST + config.BASE_URL, 
     port : config.API_PORT, 
     path : generateUrl(documentRevision, file, fileType, convertEditable, copyToEditable), 
     headers : { 
      'Content-Type': 'multipart/form-data; boundary='+boundaryKey, 
      'Content-Length' : file.size + Buffer.byteLength(resumableBody + resumableEnd, 'utf-8') 
     } 
    }, function (response) { 
     var data = ''; 
     response.on('data', function(chunk) { 
      data += chunk.toString(); 
     }); 
     response.on('end', function() { 
      resolve(JSON.parse(data)); 
     }); 
     response.on('error', function(err){ 
      console.error(err); 
      reject(err); 
     }); 
    }); 

    request.write(resumableBody); 
    fs.createReadStream(file.path, { bufferSize: 4 * 1024}) 
     .on('end', function() { 
      request.end(resumableEnd); 
     }) 
     .pipe(request, { end: false }); 

私は数日のために、このトラブルシューティングを行うに取り組んできた、これはスカラ座やガトリングへの私の最初の進出です。私はこのPOSTを得るためにここで何が欠けていますか?

私のアプリがヘッダーにContent-Lengthを使用しているということは、ガットリングがそれを省略したことを考えると、これが必要ですか?必要な場合は、ハードコーディングせずにGatlingに番号を挿入できますか?

編集

このpostを読んだ後、私は次のことを試してみました:

.exec(http("test post") 
      .post("/api/data/files") 
      .headers(Headers.headers_6) 
      .formParamMap(Map(
       "revisionId" -> "${documentRevisionId}", 
       "uploadType" -> "read_only_file", 
       "fileType" -> "application%2Fpdf", 
       "fileName" -> "testdocument.pdf", 
       "fileSize" -> "10080", 
       "copyToEditable" -> "true")) 
      .bodyPart(StringBodyPart("""{ "resumableChunkNumber": "1", 
       "resumableChunkSize": "1048576", 
       "resumableCurrentChunkSize": "10080", 
       "resumableTotalSize": "10080", 
       "resumableType": "application/pdf", 
       "resumableIdentifier": "${documentUuid}", 
       "resumableFilename": "testdocument.pdf", 
       "resumableRelativePath": "testdocument.pdf", 
       "resumableTotalChunks": "1" }""")).asJSON 
      .bodyPart(RawFileBodyPart("file", "testdocument.pdf") 
       .fileName("testdocument.pdf") 
       .transferEncoding("binary")).asMultipartForm) 

しかし、私はまだ成功していませんでした。前進するための提案はありますか?

答えて

4

他の人に役立つ場合は、Gatlingがすでにこれを行っているときに私はカスタム境界を設定しようとしていました。ここで私の問題を解決した:

.exec(http("Post document: upload the file") 
      .post("/api/data/files?revisionId=${documentRevisionId}&uploadType=read_only_file&fileType=application%2Fpdf&fileName=testdocument.pdf&fileSize=10080&copyToEditable=true") // ensure testdocument.pdf is in user-files/bodies 
      .headers(Headers.headers_6) 
      .formParamMap(Map(
       "resumableChunkNumber" -> "1", 
       "resumableChunkSize" -> "1048576", 
       "resumableCurrentChunkSize" -> "10080", 
       "resumableTotalSize" -> "10080", 
       "resumableType" -> "application/pdf", 
       "resumableIdentifier" -> "${documentUuid}", 
       "resumableFilename" -> "testdocument.pdf", 
       "resumableRelativePath" -> "testdocument.pdf", 
       "resumableTotalChunks" -> "1")) 
      .bodyPart(RawFileBodyPart("file", "testdocument.pdf") 
       .fileName("testdocument.pdf") 
       .transferEncoding("binary")).asMultipartForm)