부하 테스트 도구 vegeta에서 multipart/form-data로 이미지 보내기

가정 독자


  • 이미지를 보내는 부하 테스트를 원하는 사람

  • vegeta 에서 더 놀고 싶은 사람
  • multipart/form-data 에 대해 조금 복습하고 싶은 사람

  • 한마디로


  • 아래와 같은 targets.txt , body.txt 준비
  • {その他必要なリクエストヘッダ} 또는 {画像のバイナリ}
  • 다음 명령을 친다!
  • // 3分間、1秒間に2リクエストの頻度でattack!する場合の例
    vegeta attack -rate 2 -duration 3m -targets targets.txt |tee result
    

    targets.txt
    POST http://sample.example.com/images
    {その他必要なリクエストヘッダ}
    Content-Type: multipart/form-data; boundary=----BoundaryPKp7MX1veAsGyi0A
    @body.txt
    
    

    body.txt
    ------BoundaryPKp7MX1veAsGyi0A
    Content-Disposition: form-data; name="attachment"; filename="dummy"
    Content-Type: image/jpeg
    
    {画像のバイナリ}
    ------BoundaryPKp7MX1veAsGyi0A
    Content-Disposition: form-data; name="other-key1"
    
    other-value1
    ------BoundaryPKp7MX1veAsGyi0A
    Content-Disposition: form-data; name="ohter-key2"
    
    other-value2
    ------BoundaryPKp7MX1veAsGyi0A--
    

    또 한마디


  • body.txtname= 다음에 오는 부분 ( attachment 등)도 적절하게 변경하십시오
  • 이미지 만이라면 body.txt의 첫 번째 블록만으로도 좋습니다.

    우선 curl로 해보자



    구그하면 상당히 정보가 많습니다. 다음과 같은 느낌으로 OK입니다.{path/to/img.jpg} 는 이미지의 경로입니다. 간단!
    curl -X POST http://sample.example.com/images \
      -F other-key1=other-value1 \
      -F other-key2=other-value2 \
      -F "file=@{path/to/img.jpg};type=image/jpg"
    

    vegeta에서는 이렇게



    위의 curl의 샘플을 보면 이런 느낌으로 좋을까라고 생각합니다.

    wrong_targets.txt (분위기만 쓴 안되는 예)
    POST http://sample.example.com/images
    {その他必要なリクエストヘッダ}
    Content-Type: multipart/form-data
    Content-Disposition: form-data; name="attachment"; filename="path/to/img.jpg"
    
    other-key1=other-value1
    other-key2=other-value2
    

    정확하게는 다음과 같이 boundary 를 사용해 써야 합니다. 파일의 분할은 필수는 아니지만, 그러한 편을 알기 쉽다고 생각합니다.
    이미지가 아닌 다른 multipart/form-data와 같은 느낌이 듭니다만, 이미지의 경우는 바디에 이미지의 바이너리를 직접 넣어야 하는 것이 특징입니다.

    targets.txt
    POST http://sample.example.com/images
    {その他必要なリクエストヘッダ}
    Content-Type: multipart/form-data; boundary=----BoundaryPKp7MX1veAsGyi0A
    @body.txt
    
    

    body.txt
    ------BoundaryPKp7MX1veAsGyi0A
    Content-Disposition: form-data; name="attachment"; filename="dummy"
    Content-Type: image/jpeg
    
    {画像のバイナリ}
    ------BoundaryPKp7MX1veAsGyi0A
    Content-Disposition: form-data; name="other-key1"
    
    other-value1
    ------BoundaryPKp7MX1veAsGyi0A
    Content-Disposition: form-data; name="ohter-key2"
    
    other-value2
    ------BoundaryPKp7MX1veAsGyi0A--
    

    주의점


  • HTTP 요청에서 줄 바꿈은 비교적 세밀하게 사양에 따라 다르므로주의하십시오.

  • 이미지 바이너리를 직접 삽입해야합니다.
  • 파일을 지정할 수 없습니다 (방법을 모르겠습니다).
  • cat body_before.txt img.jpg body_after.txt > body.txt 같이 바이너리를 넣으면 잘 갔습니다.

  • 마지막 -- 잊지 마세요

  • 후기


    vegeta 에서 multipart/form-data 에 관한 기사는 얼마 안 있었습니다만, 이미지에 특화해 정중하게 쓴 것이 없었기 때문에 써 보았습니다.

    참고문헌



    이하의 기사 등 참고로 하여 시행착오했습니다.
  • HTTP 요청 사양
  • 헤더에 대해서 등
  • htps : //로 ゔぇぺぺr. 모잖아. 오 rg / 그럼 / 두 cs / u b / Ht tP / 메스 s

  • multipart/form-data 정보
  • htps : //로 ゔぇぺぺr. 모잖아. 오 rg / 그럼 / 두 cs / u b / Ht tP / 바시 cs_ 오 f_H tP / 미메 _ ty ぺ s # mu lchipa rt fu rm이었다.


  • vegeta 에서 multipart/form-data
  • htps : // bg. t 치치키. 네 t / ょ ㅎㅎㅎㅎㅎㅎㅎ

  • 좋은 웹페이지 즐겨찾기