Locust

1、名詞解釋
Locust class:代表被測試系統的用戶,通常被定義了某些client的子類繼承,如HttpLocust class(a locust file 至少要有一個Locust的子類)。
HttpLocust class:Locust的子類,http 用戶,封裝了http協議
TaskSet class:Locust執行的任務集,使用 Locust class的client 向被測系統發送請求。

2、TaskSet中,parent、locust、client 三個屬性之間的關係
TaskSet實例化時,parent屬性(這裏不是繼承中說的父類,單純指TaskSet中有一個屬性叫parent)會被賦值爲TaskSet 或者 Locust 對象。若parent 爲TaskSet,則TaskSet的locust被賦值爲parent.locust;若parent爲Locust對象,則TaskSet的locust被賦值爲parent。TaskSet還有一個client屬性,實際返回的是 self.locust.client。截取部分源碼說明如下:

class TaskSet(object):
	def __init__(self, parent):
        if isinstance(parent, TaskSet):
            self.locust = parent.locust
        elif isinstance(parent, Locust):
            self.locust = parent
        else:
            raise LocustError("TaskSet should be called with Locust instance or TaskSet instance as first argument")
            
        self.parent = parent
      
    @property  # @property把client()方法變成了屬性,可以直接使用taskset.client調用client
    def client(self):
        return self.locust.client

3、自定義client壓測非http協議系統
(1)封裝client、locust events:request_success、request_failure,使得成功或失敗的請求可被記錄。
(2)定義TaskSet子類
(3)定義Locust子類,類變量task_set指向TaskSet類,實例變量client指向第一步封裝的client對象。

4、參數介紹
啓動參數–host:在client初始化時會用於連接服務器。因此–host參數內容,取決於client初始化需要的連接信息,比如"http://localhost:8877","localhost:80"等。

5、測試結果
(1)requests文件:
Method即events.request_success.fire函數的request_type參數,Name即name
Requests/s:**total_requests / total_time **
(2)distribution文件:
Name 即 request_type + name

6、分佈式運行
(1)-t :運行時間選項必須在master節點指定,也只能在master節點指定。
(2)–expect-slaves:master節點指定這個選項後,會等到期望數量的slave都連接到master後再開始測試。
(3)–csv=:這個選項只有在master節點指定有意義,slave即使指定這個選項,生成的文件也沒有數據。每臺slave的測試數據會彙總到master節點,統一計算。
(4)A common set up is to run a single master on one machine, and then run one slave instance per processor core, on the slave machines.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章