1. 程式人生 > >JMeter壓力測試案例大全 之(郵件伺服器測試和元件介紹)

JMeter壓力測試案例大全 之(郵件伺服器測試和元件介紹)

目錄
1.jmeter安裝

2.資料庫的壓力測試

3. ftp伺服器的壓力測試

4. sftp的壓力測試(缺)

5.http請求的壓力測試

6. socket的壓力測試

7.郵件伺服器測試

7.1基於命令列

7.2基於介面

8.元件介紹

9.1執行緒組

9.2控制器

9.3監聽器

9.4定時器

9.5執行順序

7.郵件伺服器測試

7.1基於命令列(此方法其他測試也可以用,但是不推薦,配置檔案可以用GUI方式生成,建議使用第二種基於GUI的方式)

(1)首先建立一個jml檔案,包括類似於GUI方式的“測試計劃”,“執行緒組”,“smpt sampler  等對應的標籤。

如圖:

<?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="測試計劃" 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="變數" enabled="true">
        <collectionProp name="Arguments.arguments"/>
      </elementProp>
      <stringProp name="TestPlan.user_define_classpath"></stringProp>
    </TestPlan>
    <hashTree>
      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="執行緒組" enabled="true">
        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" 
		guiclass="LoopControlPanel" testclass="LoopController" testname="控制器" enabled="true">
          <boolProp name="LoopController.continue_forever">false</boolProp>
          <stringProp name="LoopController.loops">1</stringProp>
        </elementProp>
        <stringProp name="ThreadGroup.num_threads">1</stringProp>
        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
        <longProp name="ThreadGroup.start_time">1392779267000</longProp>
        <longProp name="ThreadGroup.end_time">1392779267000</longProp>
        <boolProp name="ThreadGroup.scheduler">false</boolProp>
        <stringProp name="ThreadGroup.duration"></stringProp>
        <stringProp name="ThreadGroup.delay"></stringProp>
      </ThreadGroup>
      <hashTree>
        <SmtpSampler guiclass="SmtpSamplerGui" testclass="SmtpSampler" testname="SMTP Sampler" enabled="true">
          <stringProp name="SMTPSampler.server">smtp.126.com</stringProp>
          <stringProp name="SMTPSampler.serverPort">25</stringProp>
          <stringProp name="SMTPSampler.mailFrom">
[email protected]
</stringProp> <stringProp name="SMTPSampler.replyTo"></stringProp> <stringProp name="SMTPSampler.receiverTo">[email protected]</stringProp> <stringProp name="SMTPSampler.receiverCC"></stringProp> <stringProp name="SMTPSampler.receiverBCC"></stringProp> <stringProp name="SMTPSampler.subject">test</stringProp> <stringProp name="SMTPSampler.suppressSubject">false</stringProp> <stringProp name="SMTPSampler.include_timestamp">false</stringProp> <stringProp name="SMTPSampler.message">我是一個測試郵件</stringProp> <stringProp name="SMTPSampler.plainBody">false</stringProp> <stringProp name="SMTPSampler.attachFile"></stringProp> <stringProp name="SMTPSampler.useSSL">false</stringProp> <stringProp name="SMTPSampler.useStartTLS">false</stringProp> <stringProp name="SMTPSampler.trustAllCerts">false</stringProp> <stringProp name="SMTPSampler.enforceStartTLS">false</stringProp> <stringProp name="SMTPSampler.useLocalTrustStore">false</stringProp> <stringProp name="SMTPSampler.trustStoreToUse"></stringProp> <boolProp name="SMTPSampler.use_eml">false</boolProp> <stringProp name="SMTPSampler.emlMessageToSend"></stringProp> <stringProp name="SMTPSampler.useAuth">true</stringProp> <stringProp name="SMTPSampler.password">532</stringProp> <stringProp name="SMTPSampler.username">zhangzhiga</stringProp> <stringProp name="SMTPSampler.messageSizeStatistics">false</stringProp> <stringProp name="SMTPSampler.enableDebug">false</stringProp> <collectionProp name="SMTPSampler.headerFields"/> </SmtpSampler> <hashTree/> <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="察看結果樹" 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>

<stringProp name="LoopController.loops">1</stringProp>:配置迴圈次數

 <stringProp name="ThreadGroup.num_threads">1</stringProp>:配置執行緒數

<stringProp name="ThreadGroup.ramp_time">1</stringProp>:配置ramp up

<longProp name="ThreadGroup.start_time">1392779267000</longProp>:開始時間

<longProp name="ThreadGroup.end_time">1392779267000</longProp>:結束時間

<stringProp name="SMTPSampler.server">smtp.126.com</stringProp>

:伺服器地址

<stringProp name="SMTPSampler.serverPort">25</stringProp>

:伺服器埠

:傳送地址

:接收地址

<stringProp name="SMTPSampler.subject">test</stringProp>

:郵件主題

<stringProp name="SMTPSampler.message">我是一個測試郵件</stringProp>

:郵件內容

<stringProp name="SMTPSampler.password">5321</stringProp>

:郵件伺服器登陸密碼

:郵件伺服器登陸賬號

(2)配置好上面的檔案以後,執行下面的命令即可。

Jmeter -n -t c:/smtp.jxm -l c:/log.jtl

-h, --help 列印使用資訊並退出

 -v, --version 列印版本資訊並推出

-p, --propfile {argument} 使用的JMeter屬性檔案

-q, --addprop {argument} 附加的屬性檔案

-t, --testfile {argument} 執行的JMeter測試檔案(.jmx)

-l, --logfile {argument} 日誌取樣檔案

-n, --nongui 非使用者介面執行JMeter

-s, --server 執行JMeter伺服器

-H, --proxyHost {argument} 設定JMeter使用的代理伺服器

-P, --proxyPort {argument} 設定JMeter使用的代理伺服器埠

-u, --username {argument} 設定JMeter使用的代理伺服器使用者名稱

-a, --password {argument} 設定JMeter使用的代理伺服器密碼

-J, --jmeterproperty {argument}={value} 定義附加的 JMeter 屬性

-D, --systemproperty {argument}={value} 定義附加的 System 屬性 -S, --systemPropertyFile {filename} 一個屬性檔案被做為系統屬性新增 -L, --loglevel {argument}={value} 定義日誌等級: [category=]level  jorphan=INFO or jmeter.util=DEBUG

-r, --runremote從非使用者介面模式啟動遠端伺服器

-d, --homedir {argument} 使用的JMeter目錄

(3)執行成功的顯示結果:

輸出的檔案:

(4)pop3測試的JML檔案如下:

<?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="測試計劃" 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="使用者定義的變數" enabled="true">
        <collectionProp name="Arguments.arguments"/>
      </elementProp>
      <stringProp name="TestPlan.user_define_classpath"></stringProp>
    </TestPlan>
    <hashTree>
      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="執行緒組" enabled="true">
        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
        <elementProp name="ThreadGroup.main_controller" elementType="LoopController"
		guiclass="LoopControlPanel" testclass="LoopController" testname="迴圈控制器" enabled="true">
          <boolProp name="LoopController.continue_forever">false</boolProp>
          <stringProp name="LoopController.loops">1</stringProp>
        </elementProp>
        <stringProp name="ThreadGroup.num_threads">1</stringProp>
        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
        <longProp name="ThreadGroup.start_time">1392781456000</longProp>
        <longProp name="ThreadGroup.end_time">1392781456000</longProp>
        <boolProp name="ThreadGroup.scheduler">false</boolProp>
        <stringProp name="ThreadGroup.duration"></stringProp>
        <stringProp name="ThreadGroup.delay"></stringProp>
      </ThreadGroup>
      <hashTree>
        <MailReaderSampler guiclass="MailReaderSamplerGui"
		testclass="MailReaderSampler" testname="Mail Reader Sampler" enabled="true">
          <stringProp name="host_type">pop3</stringProp>
          <stringProp name="folder">INBOX</stringProp>
          <stringProp name="host">pop.126.com</stringProp>
          <stringProp name="port">110</stringProp>
          <stringProp name="username">[email protected]</stringProp>
          <stringProp name="password">5321225zzggdj</stringProp>
          <intProp name="num_messages">-1</intProp>
          <boolProp name="delete">false</boolProp>
          <stringProp name="SMTPSampler.useSSL">false</stringProp>
          <stringProp name="SMTPSampler.useStartTLS">false</stringProp>
          <stringProp name="SMTPSampler.trustAllCerts">false</stringProp>
          <stringProp name="SMTPSampler.enforceStartTLS">false</stringProp>
          <stringProp name="SMTPSampler.useLocalTrustStore">false</stringProp>
          <stringProp name="SMTPSampler.trustStoreToUse"></stringProp>
        </MailReaderSampler>
        <hashTree/>
        <ResultCollector guiclass="ViewResultsFullVisualizer" 
		testclass="ResultCollector" testname="察看結果樹" 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>

說明:

<stringProp name="host_type">pop3</stringProp>:協議

 <stringProp name="host">pop.126.com</stringProp>:伺服器地址

 <stringProp name="port">110</stringProp>:伺服器開放埠

:接收郵件的使用者賬號

 <stringProp name="password">5321</stringProp>

:接收賬號的伺服器密碼

(5)pop3測試結果:

注:此時處於等待接收,如果有郵件接收到會有提示。

7.2基於介面 

1)首先下載javamail,然後開啟lib複製用到的jar包,例如pop3.jar等。

(2)配置smtp伺服器,建立點選測試計劃建立執行緒組

(3)配置smtp伺服器,建立smpt sampler 如圖:

插曲:

首先點選建立好的smpt sampler,然後新增如圖:

Csv檔案配置器:用來配置多條獨立檔案,可以在測試的時候使用多個賬號同時測試。

配置如下:

看test.txt檔案:

回到smpt sampler配置:

(4)配置smtp伺服器,新增檢視結果樹:

(5)執行run:結果如圖下:

到郵箱看看:

(6)配置POP3服務:建立執行緒組(建立過程同上,如果需要,記得配置“執行緒屬性”)

7配置POP3服務:建立mail reader sampler

配置如下:

(8)配置POP3服務:建立表格分析資料:新增->監聽器-.>檢視結果樹

圖:看第(9)步驟

(9)執行接收郵件測試

如圖:

8元件介紹

執行緒組引數說明

執行緒數:為設定傳送請求的使用者數目,如設定為5,則有5個使用者傳送請求。

Ramp-up period: 所有執行緒數對應的請求發生的總時間間隔,單位是秒。比如你的請求數目是5,而這個引數是10,那麼每個請求之間的間隔就是105,也就是2,即每個請求都要在之前的那個請求發生後10秒啟動。如果設定為0,則請求併發執行。

迴圈次數:請求發生的重複次數,如果選擇後面的“永遠”(預設),那麼 請求將一直繼續,如果不選擇“永遠”,而在輸入框中輸入數字,那麼請求將重複指定的次數,如果輸入0,那麼請求將執行一次。

控制器

JMeter有兩種控制器:取樣器和邏輯控制器。

取樣器告訴JMeter傳送請求到伺服器。例如,如果你要JMeter傳送一個HTTP請求新增一個HTTP請求取樣器。你也可以通過新增一個或者多個配置元件到一個取樣器來定製一個請求。更多資訊,見取樣器。

邏輯控制器讓你定製當傳送請求時JMeter使用的判斷邏輯。例如,你可以新增交替控制器來在兩個HTTP請求取樣器之間交替。更多資訊,見邏輯控制器。

取樣器

JMeter取樣器包括:

FTP 請求

HTTP 請求

JDBC 請求

Java object 請求

LDAP 請求

SOAP/XML-RPC 請求

WebService (SOAP) 請求

每個取樣器有一些你可以設定的屬性。你可以通過新增一個或多個配置元件到取樣器來進一步定製它。注意JMeter傳送請求按照取樣器出現在樹中的順序。如果你想傳送多個相同型別的請求(例如,HTTP Request)到相同的伺服器,可以考慮使用一個預設配置元件。每個控制器有一個或者多個預設配置元件(見下)。

記得新增一個監聽器到執行緒組來檢視/儲存你的請求結果到磁碟。

如果你對使用JMeter平臺的基礎驗證器到你的請求響應感興趣,新增一個斷言到請求控制器。例如,在壓力測試一個web程式時,伺服器會返回一個成功的HTTP響應程式碼,但是這個頁面有錯誤或者被忽略部分。你可以新增斷言來檢查某個HTML標籤,一些錯誤字串,等等。JMeter允許你使用正則表示式建立斷言。

JMeter 內建取樣器

邏輯控制器

邏輯控制器讓你定製當傳送請求時JMeter使用的判斷邏輯。邏輯控制器還可以作為下列任何元件的子元件:取樣器(請求)、配置元件、和其他邏輯控制器。

監聽器

監聽器提供訪問JMeter收集當JMeter執行的關於測試計劃的資訊。圖形結果監聽器在一張圖上繪製響應時間。

"檢視結果樹"監聽器顯示了請求和響應取樣器的細節,並且以基礎的HTMLXML顯示響應表現。

其他監聽器提供了摘要或者集合資訊。

另外,監聽器可以指導它們收集的資料到一個檔案供以後用。在JMeter中每一個監聽器提供一個域來指出儲存資料的檔案。

在測試中監聽器可以新增到任何位置。它們僅僅會從它們等級或者它們以下等級的元件收集資料。

伴隨JMeter有很多有趣的監聽器

定時器

預設,JMeter執行緒傳送請求時不在請求間暫停。我們建議你通過新增一個可用的定時器到你的執行緒組來指定一個延遲。如果你不新增延遲,JMeter會在短時間內產生太多請求,可能會壓倒你的服務。

定時器會使JMeter在一個執行緒開始每個請求間延遲一段時間。

如果你選擇新增多於一個定時器到一個執行緒組,JMeter會在執行取樣器前獲得定時器數量並暫停那個時間量。

執行順序

1. 配額制元件

2. 前置處理器

3. 定時器

4. 取樣器

5. 後置處理器 (如果SampleResult不為空

6. 斷言 (如果SampleResult不為空

7. 監聽器 (如果SampleResult不為空