2013-11-26 6 views
3

JMeter를 사용하여 바이너리 컨텐츠로 HTTP 요청을 보내려고합니다. 문서에서 바이너리 컨텐트로 파일을 보낼 수 있음을 발견했습니다. 모든 요청에는 자체 바이너리 콘텐츠가 있기 때문에 이것이 내 필요에 대한 좋은 해결책이 아니라고 생각합니다. 여기 JMeter를 사용하여 이진 본문으로 HTTP 요청 보내기

내가 달성하려고 무엇을 보여주는 내가 Perl로 쓴 클라이언트의 예입니다

$date_time = sprintf "%08X", time(); 
$BODY_TEMPLATE = "00${date_time}0015"; 
$body_len = (length (sprintf($BODY_TEMPLATE,0,0)))/2; 
# Here I set $TARGET & $HOST 
$MSG_HEADER = "POST \/unil?URL=${TARGET} HTTP\/1.1\r\nHost: ${HOST}\r\ncontent-type:application/binary\r\ncontent-length: ${body_len}\r\n\r\n"; 
$body = pack ("H*", $BODY_TEMPLATE); 
$message_to_send = $MSG_HEADER . $body; 
# at this point I sent the entire message over a TCP socket I previously opened. 

어떤 아이디어? 감사합니다. Yuval

답변

4

JMeter를 사용하는 것이 가능합니다. 나는

  • 이 설정 (당신이 JMeter를 당신을 위해 그것을 할 똑똑 같은 컨텐츠 길이를 계산 할 필요가 없습니다) 요청의 몸을 구성하고 JMeter를 변수에 저장하는

    1. Beanshell Pre-Processor를 사용하는 것이 좋습니다 HTTP를 샘플러는 vars.put("mybody",generatedbodystring); 같은 것을 수행해야합니다 몸 생성 코드의 끝에서 (으로 Beanshell 사전 프로세서에서 발생하는 "바디 데이터"와. 당신도 ${mybody} 또는 ${__V(mybody)}
    2. 가 추가로 mybody 변수를 참조 할 수 있습니다 당신의 HTTP 샘플러에서 HTTP Header Manager을 사용하여 Content-Type을 "application/binary"로 설정하십시오.

    HTTP 헤더 관리자 및 BeanShell Pre Processor는 HTTP 요청의 자식이어야합니다.

    디버그 샘플러 및 결과 트리 수신기를 사용하여 요청/응답 세부 정보 및 전송중인 데이터를 검사 할 수 있습니다.

    희망이 도움이됩니다.

  • +0

    감사합니다. Dmitri. Beanhell (및 Java)를 처음 사용했습니다. 그걸 사용하여 발견 : javax.xml.bind.DatatypeConverter.parseHexBinary (hexadecimalString); 내 코드에서 이진 데이터를 사용하도록 변환 할 수 있습니다. 일단 모든 것을 정리하면 효과가 있기를 바랍니다. – Yuval

    +4

    Dmitri, 작성자가 바이너리 데이터를 요청할 때 "generatedbodystring"을 사용하는 것이 좋습니다. 내 문제가 생겼어. 비록 내 BeanShell에서 "vars.putObject ("mybody ", byteArray)"라고해도 바이너리 POST 요청을 보낼 수 없다. 그런 다음 "$ {mybody}"HTTP 요청의 본문 데이터에서 Jemeter는 암시 적으로 "toString()"을 보내기 전에 전송합니다. 이유와 수정 방법을 알지 못합니다. – invis