2009-12-22 6 views
1

JMeter를 사용하여 레일스 애플리케이션을로드 테스트하려고합니다. 응용 프로그램의 중요한 부분은 텍스트 입력과 파일 업로드를 모두 포함하는 양식을 포함합니다. 브라우저에서 잘 작동하지만 JMeter에 해당 페이지를 게시하려고 할 때 Rails는 멀티 파트 폼의 모든 부분을 임시 파일로 저장하므로 문자열을 찾을 때 중단되고 대신 임시 파일이 생성됩니다.로드 테스트 멀티 파트 양식

이 차이가 브라우저에서 텍스트 입력을 포함하는 멀티 요청의 조각은 다음과 같습니다 있다는 것을 나타납니다

-----------------------------7d159c1302d0y0 
Content-Disposition: form-data; name="field_name" 
Content-Type: text/plain; charset=utf-8 
Content-Transfer-Encoding: 8bit 

test 
-----------------------------7d159c1302d0y0 
:
-----------------------------7d93b4186074c 
Content-Disposition: form-data; name="field_name" 

test 
-----------------------------7d93b4186074c 

하여 JMeter에서이 같이 보이지만

분명히 레일스는 그것을 전자 문자로보고 일반 텍스트 값으로 해석하고 문자열로 취급하지만 후자를보고 임시 파일에 저장합니다.

JMeter가 비 파일 필드에 대해 멀티 파트 양식에서 추가 헤더를 보내지 않도록 설득 할 수있는 설정을 찾을 수 없었습니다.

Rails가 해당 헤더를 무시하고 텍스트/일반 텍스트를 텍스트 파일 대신 문자열로 취급하도록 설득 할 수있는 방법이 있습니까? 또는 여분의 헤더를 제거 할 컨트롤러 앞에 필터를 넣는 빠른 방법은 무엇입니까?

또는 파일 업로드가 포함 된 Rails 애플리케이션을로드 테스트하는 데 더 좋은 도구가 있습니까?

답변

0

가 더 나은 방법이있을 수 있습니다,하지만 난 매개 변수 해시 내에서 문자열로 텍스트/일반 TEMPFILES을 설정하는 빠른 필터를 추가 결국 : 그런데

def change_text_files_to_strings 
    params.each_pair do |key, value| 
     params[key] = value.read if (value.class.to_s=='Tempfile' && value.content_type.start_with?('text/plain')) 
    end 
    end 

, 그것은 JMeter가이 밝혀 RFC 2388에 따르면 멀티 파트 요청의 각 항목은 파일이 아닌 콘텐츠 유형을 가져야하므로 레일스가 실제로 content-type 헤더가 있는지 여부를 판별해서는 안됩니다. 파일. 아 ~.

0

또한 ColdFusion에서 각 양식 데이터와 함께 유사한 헤더 (Content-Transfer-Encoding 빼기)를 보내므로 위의 솔루션을 사용했습니다. 더 좋은 방법이 있는지 궁금합니다.

편집 : 누구든지 레일 3에서 수정 되었으면 알 수 있습니까?

1

그래서 레일즈가 이해할 수있는 요청을 내보내려면 소스 코드에 JMeter의 멀티 파트 요청 게시 부분을 사용자 정의했습니다. 아래 그림과 같이 변경이 쉽지만 컴파일하는 Java/JMeter 환경을 생성하는 데 시간이 걸립니다. :(

어쨌든, 지금은 성공적으로 JMeter를 통해 멀티 우편으로 파일을 업로드 할 수 있습니다. SRC/프로토콜


/HTTP/조직/아파치/JMeter를/프로토콜/HTTP/샘플러/PostWriter.java

writeStartFileMultipart() 
//writeln(out, "Content-Transfer-Encoding: binary"); // $NON-NLS-1$ 

writeFormMultipart() 
/***** 
writeln(out, "Content-Type: text/plain; charset=" + charSet); // $NON-NLS-1$ 
writeln(out, "Content-Transfer-Encoding: 8bit"); // $NON-NLS-1$ 
*****/ 

PS

선단 팁 (2)의 빌드 환경을 생성한다.4는

  1. 입니다. build.xml 파일에서 타사 라이브러리 체크를 주석 처리합니다.

+0

오픈 소스가 훌륭하지 않습니다! –

0

당신이 오류의 어떤 종류를 얻을 수 있습니까

  • 복사 lib 디렉토리/lib 디렉토리에 바이너리 아카이브에서 XStream을-1.3.1.jar/디렉토리? 예 :

    NoMethodError (undefined method `rewind' for "1":String): 
    

    문제를 설명 할 수있는 랙에 문제가 있습니다. https://github.com/rack/rack/issuesearch?state=open&q=rewind#issue/116

  • +0

    고마워,하지만이 사실은 정반대의 문제처럼 보입니다. 랙 문제에서 Tempfile을 사용해야 할 때 문자열이 있지만 문제는 문자열 (간단한 양식 필드 값)이 표시되어야한다고 생각했습니다. Tempfiles로 설정합니다. –

    2

    요즘에는 JMeter에서 "브라우저 호환 헤더 사용"을 체크 할 수 있습니다.

    0

    위의 답변 이외에도 해당 요청의 HTTP 헤더 관리자 X-CSRF-Token과 관련하여 이 성공적이었습니다. 필요한 미디어를 원하는만큼 업로드 할 수 있습니다.

    관련 문제