문제

나는 JMeter와 함께 완전한 초보자입니다. JMeter를 사용하여 Tomcat에 배포 된 웹 응용 프로그램에 연결하여 소수의 사용자가 로그인하고 페이지를 탐색하는 것을 시뮬레이션하려고합니다.

테스트 계획을 실행했을 때 JMeter Log는 어딘가에 통신 문제가 있음을 나타내는 일련의 HTTP 404 메시지를 보여주었습니다.

다음 링크는 테스트 계획의 HTTP 기본값을 보여줍니다.

대체 텍스트 http://www.dcs.bbk.ac.uk/~martin/uploads/http_defaults.png

두 개의 간단한 HTTP 요청이 따라야합니다.

첫 번째 요청은 사용자가 로그인 할 수 있어야합니다.

Alt Text http://www.dcs.bbk.ac.uk/~martin/uploads/login.png

두 번째 요청은 새로 로그인 한 사용자가 페이지를 탐색 할 수 있어야합니다.

Alt Text http://www.dcs.bbk.ac.uk/~martin/uploads/browse.png

그러나 내가 말했듯이 JMeter 로그에서받은 모든 것은 HTTP 404 메시지입니다.

2009/09/23 15:10:43 INFO  - jmeter.protocol.http.sampler.HTTPSampler: Error Response Code: 404 

Tomcat은 테스트 중에 실행 중이며 테스트 계획에는 '기본값'으로 설정된 HTTP 쿠키 관리자도 있습니다.

내 응용 프로그램이 Tomcat에서 테스트에서 실행되면 URL은 http://localhost:8080/myDataSharer 그리고 저는 JMeter가 이것을 반영하도록 노력하고 있습니다.

JMeter와 Tomcat이 서로 대화하지 않는 이유를 해결할 수 없으므로 모든 도움을 환영합니다.

감사

남자 이름

도움이 되었습니까?

해결책

그만큼 안에 HTTP 요청 기본값 시작시 추가되지 않습니다 안에 HTTP 요청. 컨텍스트 루트를 추가하십시오 Mydatasharer 안에있는 길로 HTTP 요청.
당신이 그것을 반복하고 싶지 않다면, 구성 요소 Proprties를 정의하고 나중에 다음과 같이 참조 할 수있는 곳 $ {my.propertie}.
또한 요청 및 응답 데이터를 보여주는 요소를 추가해야합니다. 결과 트리 또는 그런 것.

편집 1 : 틀에 박힌 또 다른 것은입니다 로그인 요청의. URL이 맞습니까? 그렇지 않아야합니다 j_acegi_security_check? 로그인 양식의 동작에 나타나는 URL입니까?

편집 2 : Tomcat에는 보안을 테스트하는 데 사용되는 예제 응용 프로그램이 있습니다.
http://example.com:8080/examples/jsp/security/protected/login.jsp

사용자가 있습니다 conf/tomcat-users.xml. 역할과 함께 하나를 추가하십시오. 역할 1 이와 같이:

<role rolename="role1"/>
<user username="test" password="test" roles="role1"/>

서버를 시작하면 로그인 할 수 있어야합니다. 그런 다음 이것을 시도하십시오 JMeter 테스트 계획:

<jmeterTestPlan version="1.2" properties="1.8">
  <hashTree>
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Plan de Pruebas" enabled="true">
      <boolProp name="TestPlan.functional_mode">false</boolProp>
      <stringProp name="TestPlan.comments"></stringProp>
      <stringProp name="TestPlan.user_define_classpath"></stringProp>
      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
      <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        <collectionProp name="Arguments.arguments"/>
      </elementProp>
    </TestPlan>
    <hashTree>
      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Grupo de Hilos" enabled="true">
        <boolProp name="ThreadGroup.scheduler">false</boolProp>
        <stringProp name="ThreadGroup.num_threads">1</stringProp>
        <stringProp name="ThreadGroup.duration"></stringProp>
        <stringProp name="ThreadGroup.delay"></stringProp>
        <longProp name="ThreadGroup.start_time">1157555458000</longProp>
        <stringProp name="ThreadGroup.on_sample_error">stoptest</stringProp>
        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
          <stringProp name="LoopController.loops">1</stringProp>
          <boolProp name="LoopController.continue_forever">false</boolProp>
        </elementProp>
        <longProp name="ThreadGroup.end_time">1157555458000</longProp>
      </ThreadGroup>
      <hashTree>
        <CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="Gestor de Cookies HTTP" enabled="true">
          <boolProp name="CookieManager.clearEachIteration">false</boolProp>
          <collectionProp name="CookieManager.cookies"/>
        </CookieManager>
        <hashTree/>
        <HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Petición HTTP" enabled="true">
          <stringProp name="HTTPSampler.domain">localhost</stringProp>
          <stringProp name="HTTPSampler.FILE_NAME"></stringProp>
          <stringProp name="HTTPSampler.path">/examples/jsp/security/protected/login.jsp</stringProp>
          <stringProp name="HTTPSampler.method">GET</stringProp>
          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
            <collectionProp name="Arguments.arguments"/>
          </elementProp>
          <stringProp name="HTTPSampler.FILE_FIELD"></stringProp>
          <stringProp name="HTTPSampler.mimetype"></stringProp>
          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
          <stringProp name="HTTPSampler.port">8080</stringProp>
          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
          <stringProp name="HTTPSampler.monitor">false</stringProp>
          <stringProp name="HTTPSampler.protocol"></stringProp>
        </HTTPSampler>
        <hashTree/>
        <HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Petición HTTP" enabled="true">
          <stringProp name="HTTPSampler.domain">localhost</stringProp>
          <stringProp name="HTTPSampler.FILE_NAME"></stringProp>
          <stringProp name="HTTPSampler.path">/examples/jsp/security/protected/j_security_check</stringProp>
          <stringProp name="HTTPSampler.method">POST</stringProp>
          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
            <collectionProp name="Arguments.arguments">
              <elementProp name="" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.name">j_username</stringProp>
                <stringProp name="Argument.value">test</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
              </elementProp>
              <elementProp name="" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.use_equals">true</boolProp>
                <boolProp name="HTTPArgument.always_encode">false</boolProp>
                <stringProp name="Argument.name">j_password</stringProp>
                <stringProp name="Argument.value">test</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
              </elementProp>
            </collectionProp>
          </elementProp>
          <stringProp name="HTTPSampler.FILE_FIELD"></stringProp>
          <stringProp name="HTTPSampler.mimetype"></stringProp>
          <boolProp name="HTTPSampler.auto_redirects">true</boolProp>
          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
          <stringProp name="HTTPSampler.port">8080</stringProp>
          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
          <stringProp name="HTTPSampler.monitor">false</stringProp>
          <stringProp name="HTTPSampler.protocol">http</stringProp>
        </HTTPSampler>
        <hashTree/>
        <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="Ver Árbol de Resultados" enabled="true">
          <objProp>
            <value class="SampleSaveConfiguration">
              <time>true</time>
              <latency>true</latency>
              <timestamp>true</timestamp>
              <success>true</success>
              <label>true</label>
              <code>true</code>
              <message>true</message>
              <threadName>true</threadName>
              <dataType>true</dataType>
              <encoding>false</encoding>
              <assertions>true</assertions>
              <subresults>true</subresults>
              <responseData>false</responseData>
              <samplerData>false</samplerData>
              <xml>false</xml>
              <fieldNames>false</fieldNames>
              <responseHeaders>false</responseHeaders>
              <requestHeaders>false</requestHeaders>
              <responseDataOnError>false</responseDataOnError>
              <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
              <assertionsResultsToSave>0</assertionsResultsToSave>
            </value>
            <name>saveConfig</name>
          </objProp>
          <stringProp name="filename"></stringProp>
          <boolProp name="ResultCollector.error_logging">false</boolProp>
        </ResultCollector>
        <hashTree/>
      </hashTree>
    </hashTree>
  </hashTree>
</jmeterTestPlan>

로그인하기 전에 추가 요청을 추가하여 쿠키를 얻을 수 있습니다. 하지 않으면 해당 로그인은 408 코드로 실패합니다.

이 작업을 수행하면 응용 프로그램을 동일한 방식으로 테스트 할 수 있습니다.

다른 팁

마지막으로,이 작업이 작동합니다. 요청에서 리디렉션을 따르도록 자동으로 리디렉션을 변경하는 경우였습니다. 그의 도움을 주신 Rodrigoap에게 감사드립니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top