Tsung學習筆記(HTTP篇)

先來測一個靜態網頁。html

這裏能夠算tsung的文檔最坑的地方了。若是你照着官網上的入門指南一步一步作下來,我能夠告訴你必定跑不通!理由是,tsung給出的工具tsung-recorder生成的配置文件不是完整的配置文件!! 若是你想入門,請忘了tsung-recorder,並嚴格按照如下步驟操做,不然後果就是各類運行時異常。程序員

1. 建立文件 ~/.tsung/tsung.xml

內容以下:瀏覽器

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung>
  <clients>
    <!-- 在這裏添加測試主機(客戶端) -->
  </clients>

  <servers>
    <!-- 在這裏添加被測試的主機(服務端) -->
  </servers>

  <load>
    <!-- 在這裏添加加載過程配置 -->
  </load>

  <sessions>
    <!-- 在這裏添加會話(即一系列HTTP請求) -->
  </sessions>
</tsung>

以上是tsung最小配置的骨架,裏面的東西一個都不能少,並且必須按照這個順序來配置!!(該死的官方文檔,讀的時候有一種只見樹木不見森林的趕腳)。服務器

2. 添加客戶端

一個客戶端(client)是一個系統進程(Erlang/Elixir程序員注意,是系統進程,不是BEAM進程。一個系統進程就是一個Erlang虛擬機)。cookie

<clients>
  <client host="localhost" cpu="4" maxusers="30000"/>
</clients>

這裏定義了一個客戶端,它在localhost這臺主機上開4個進程同時發送請求。最好把cpu的值設得和該主機的CPU數量相等,過低沒法徹底利用測試主機性能,過高則有一些併發問題。Tsung保證會把這些進程分配到不一樣的CPU內核上。注意:即便客戶端開在本機上,Tsung也會經過SSH遠程開啓進程,並且不會使用密碼。因此請確保SSH配置爲PublicKey驗證,而且把localhost加進known_hosts。 若是實在不想用SSH開新進程,能夠配成下面這樣:session

<client host="localhost" use_controller_vm="true" maxusers="30000"/>

參數maxusers設置了這個客戶端最多可同時虛擬多少個用戶,也就至關於併發量啦。注意,若是這個數值大於你的ulimit -Sn,則tsung會開多個系統進程來確保這個數值。併發

3. 添加服務端(被測試主機)

服務端的配置相對簡單:dom

<servers>
  <server host="localhost" port="80" type="tcp"/>
</servers>

因爲服務端(被測試)的應用能夠是任何HTTP應用,因此沒有Erlang進程的配置,熟悉HTTP的朋友應該一目瞭然了。tcp

4. 添加負載配置

Tsung有一個概念叫到達階段(arrival phase),它有如下幾個參數:工具

  • 當前階段是第幾個階段(phase)
  • 一個階段持續多長時間(duration和unit)
  • 在這個階段裏,每多長時間產生多少(虛擬)用戶
<load>
  <arrivalphase phase="1" duration="1" unit="minute">
    <users arrivalrate="10000" unit="second"/>
  </arrivalphase>
</load>

這裏定義了一個用戶到達階段(arrival phase),這個階段的總時長是1分鐘,在這一分鐘裏,每秒鐘會有1萬個虛擬用戶來訪問。你能夠添加更多階段,在每一個階段配置更多種用戶到達模式。

5. 添加會話

所謂會話,就是每一個用戶前後作哪些事情,對於HTTP的測試,固然就意味着發請求,收響應。Tsung對每一個會話會自動管理cookie。

<sessions>
  <session name="s1" type="ts_http">
    <request>
      <http url="/" method="GET" version="1.1"/>
    </request>
    <thinktime min="2" max="10" random="true">
  </session>
</session>

在這個例子裏,每一個用戶的會話會作兩件事:

  1. 發送一個HTTP 1.1的GET請求到/,並接收響應
  2. 收到響應後,「想」了一下子(能夠用來模擬閱讀網頁的時間),時間從2秒鐘到10秒鐘不等(均勻分佈)

至此,整個配置完成。下面是完整的配置文件(~/.tsung/tsung.xml)的內容:

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung>
  <clients>
    <client host="localhost" cpu="4" maxusers="30000"/>
  </clients>

  <servers>
    <server host="localhost" port="80" type="tcp"/>
  </servers>

  <load>
    <arrivalphase phase="1" duration="1" unit="minute">
      <users arrivalrate="10000" unit="second"/>
    </arrivalphase>
  </load>

  <sessions>
    <session name="s1" type="ts_http" weight="1">
      <request>
        <http url="/" method="GET" version="1.1"/>
      </request>
      <thinktime min="2" max="10" random="true"/>
    </session>
  </sessions>
</tsung>

關於weight=1這個配置,在單個session的狀況下沒有什麼做用,可是仍是得配。若是你有多種session,則weight表示每一種session的相對比例,例如你有兩種session,s1:weight=1s2:weight=2,且一共有30000個用戶,則其中10000個用的session種類是s1,20000個是s2。

若是想配成更高級的配置(例如隨機請求參數、虛擬IP等)請參閱官方文檔

6. 運行測試

接下來就讓咱們跑一下

$ tsung start

在跑的時候,咱們能夠打開瀏覽器,訪問http://localhost:8091/來查看摘要。不過說實話,這東西沒啥用,由於等測試跑完了,這個tsung的內置服務器也就關了(你能夠用tsung -k start來阻止這個服務器自動關閉)。並且網頁也不會實時更新,還得你手動刷。

注意看tsung命令行的提示信息,它會告訴你log出在什麼位置,一般是~/.tsung/log/xxxx。這個很重要,由於咱們立刻要進到這個目錄下去生成圖表!

7. 生成可視化報告

首先cd到上述的log位置,而後運行下列命令:

$ tsplot "Nginx" ./tsung.log -d .

這會在當前目錄下生成一堆圖表,有鏈接數、用戶數、請求數等,並且每一個指標都有大小兩張圖。本身去看吧。若是你想把報告出到其餘位置,只須要修改-d後的參數就好了。

另外,若是想要一份完整的測試報告,能夠cd到log目錄,運行

$ /usr/lib/tsung/bin/tsung_stat.pl
相關文章
相關標籤/搜索