Jmeter教程 簡單的壓力測試

Jmeter教程 簡單的壓力測試

 

Jmeter是一個很是好用的壓力測試工具。  Jmeter用來作輕量級的壓力測試,很是合適,只須要十幾分鍾,就能把壓力測試須要的腳本寫好。服務器

什麼是壓力測試 

顧名思義:壓力測試,就是  被測試的系統,在必定的訪問壓力下,看程序運行是否穩定/服務器運行是否穩定(資源佔用狀況)dom

好比: 2000個用戶同時到一個購物網站購物,這些用戶打開頁面的速度是否會變慢,或者網站是否會奔潰工具

 

作壓力測試的經常使用工具

作壓力測試,通常要使用工具, 人工是沒辦法作的。   最經常使用的工具是LoadRunner, 可是LoadRunner畢竟是收費軟件,並且使用上也比較複雜。 如今愈來愈多的人開始使用Jmeter來作壓力測試。 免費, 並且使用上很是簡單。oop

 

作壓力測試的步驟以下:

1. 寫腳本 或者錄製腳本測試

2. 使用用戶自定義參數網站

3. 場景設計ui

4. 使用控制器,來控制 模擬多少用戶。url

5. 使用監聽器, 查看測試結果spa

 

本文作壓力測試的例子

本文舉的實例是: 在一臺電腦用Jmeter模擬200個用戶,同時去使用bing搜索不一樣的關鍵字, 查看頁面返回的時間是否在正常範圍內。線程

 

第一步: 使用CSV Data Set Config 來參數化

首先咱們把測試須要用到的2個參數放在txt文件中,

新建一個data.txt文件,輸入些數據, 一行有兩個數據,用逗號分隔。

 

啓動Jmeter, 先添加一個Thread Group, 而後添加一個CSV Data Set Config (Add -> Config Element -> CSV Data Set Config)

 

第二步:添加HTTP Request.

咱們添加http 請求,發送get 到 http://cn.bing.com/search?q=博客園+小坦克

選擇Thread Group 右鍵 (Add ->Sampler -> HTTP Request),  須要填的數據以下:

 

 

第三步: 使用Thread Group, 控制模擬多少用戶

選中Thread Group

 

Number of Threads(users):     一個用戶佔一個線程,  200個線程就是模擬200個用戶

Ramp-Up Period(in seconds):   設置線程須要多長時間所有啓動。若是線程數爲200 ,準備時長爲10 ,那麼須要1秒鐘啓動20個線程。也就是每秒鐘啓動20個線程。

Loop Count: 每一個線程發送請求的次數。若是線程數爲200 ,循環次數爲10 ,那麼每一個線程發送10次請求。總請求數爲200*10=2000 。若是勾選了「永遠」,那麼全部線程會一直髮送請求,直到選擇中止運行腳本。

 

第四步:  添加Summary Report 用來查看測試結果

選中Thread Group 右鍵(Add -> Listener -> Summary Report)

 

第五步: 運行一下

到目前爲止, 腳本就全寫好了, 咱們來運行下, 如何看下測試的結果

 

附:

1.loadTest.jmx

<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="2.6" jmeter="2.11 r1554548">
  <hashTree>
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
      <stringProp name="TestPlan.comments"></stringProp>
      <boolProp name="TestPlan.functional_mode">false</boolProp>
      <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>
      <stringProp name="TestPlan.user_define_classpath"></stringProp>
    </TestPlan>
    <hashTree>
      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
          <boolProp name="LoopController.continue_forever">false</boolProp>
          <stringProp name="LoopController.loops">10</stringProp>
        </elementProp>
        <stringProp name="ThreadGroup.num_threads">200</stringProp>
        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
        <longProp name="ThreadGroup.start_time">1415933614000</longProp>
        <longProp name="ThreadGroup.end_time">1415933614000</longProp>
        <boolProp name="ThreadGroup.scheduler">false</boolProp>
        <stringProp name="ThreadGroup.duration"></stringProp>
        <stringProp name="ThreadGroup.delay"></stringProp>
      </ThreadGroup>
      <hashTree>
        <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="CSV Data Set Config" enabled="true">
          <stringProp name="delimiter">,</stringProp>
          <stringProp name="fileEncoding">utf-8</stringProp>
          <stringProp name="filename">c:\data.txt</stringProp>
          <boolProp name="quotedData">false</boolProp>
          <boolProp name="recycle">true</boolProp>
          <stringProp name="shareMode">shareMode.all</stringProp>
          <boolProp name="stopThread">false</boolProp>
          <stringProp name="variableNames">boke,user</stringProp>
        </CSVDataSet>
        <hashTree/>
        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" enabled="true">
          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
            <collectionProp name="Arguments.arguments"/>
          </elementProp>
          <stringProp name="HTTPSampler.domain">cn.bing.com</stringProp>
          <stringProp name="HTTPSampler.port"></stringProp>
          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
          <stringProp name="HTTPSampler.response_timeout"></stringProp>
          <stringProp name="HTTPSampler.protocol">http</stringProp>
          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
          <stringProp name="HTTPSampler.path">/search?q=${boke}+${user}</stringProp>
          <stringProp name="HTTPSampler.method">GET</stringProp>
          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
          <boolProp name="HTTPSampler.monitor">false</boolProp>
          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
        </HTTPSamplerProxy>
        <hashTree/>
        <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true">
          <boolProp name="ResultCollector.error_logging">false</boolProp>
          <objProp>
            <name>saveConfig</name>
            <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>
              <bytes>true</bytes>
            </value>
          </objProp>
          <stringProp name="filename"></stringProp>
        </ResultCollector>
        <hashTree/>
      </hashTree>
    </hashTree>
  </hashTree>
</jmeterTestPlan>

2.data.txt

博客園,小坦克 博客園,Fish 博客園,Fiddler 博客園,HTTP

相關文章
相關標籤/搜索