Locust性能測試1-環境準備與基本使用

前言

提到性能測試,大部分小夥伴想到的就是LR和jmeter這種工具,小編一直不太喜歡寫這種工具類的東西,我的原則是能用代碼解決的問題,儘量不去用工具。 python裏面也有一個性能測試框架Locust,本篇簡單的介紹Locust的基本使用,希望越來越多的小夥伴能一起愛上它!

環境準備: python3.6 windows電腦 locust

Locust簡介

Locust是一款易於使用的分佈式用戶負載測試工具。它用於對網站(或其他系統)進行負載測試,並確定系統可以處理多少併發用戶。 這個想法是,在測試期間,一羣蝗蟲(Locust)會攻擊你的網站。您定義了每個蝗蟲Locust(或測試用戶)的行爲,並且實時地從Web UI監視羣集過程。這將有助於您在讓真正的用戶進入之前進行測試並識別代碼中的瓶頸。 Locust完全基於事件,因此可以在一臺計算機上支持數千個併發用戶。與許多其他基於事件的應用程序相比,它不使用回調。相反,它通過協程(gevent)機制使用輕量級過程。每個蝗蟲蜂擁到你的網站實際上是在自己的進程內運行(或者是greenlet,這是正確的)。這允許您在Python中編寫非常富有表現力的場景,而不會使代碼複雜化。

gevent是第三方庫,通過greenlet實現協程。greenlet是python的並行處理的一個庫。 python 有一個非常有名的庫叫做 stackless ,用來做併發處理, 主要是弄了個叫做tasklet的微線程的東西, 而greenlet 跟stackless的最大區別是greenlet需要你自己來處理線程切換, 就是說,你需要自己指定現在執行哪個greenlet再執行哪個greenlet。

環境安裝

Locust支持Python 2.7, 3.4, 3.5, and 3.6的版本,小編的環境是python3.6直接用pip安裝就行

$ pip install locustio

安裝完成後,使用pip查看版本號0.9.0

$ pip show locustio

使用—help查看幫助信息

$ locust —help

快速開始

locust裏面請求是基於requests的,每個方法請求和requests差不多,請求參數、方法、響應對象和requests一樣的使用,之前學過requests庫的,這裏就非常簡單了

  • requests.get 對應client.get
  • requests.post 對應client.post
# 保存爲demo.py
# coding:utf-8
from locust import HttpLocust,TaskSet,task

class BlogDemo(TaskSet):
    '''用戶行爲:打開我的博客首頁demo'''
    @task(1)
    def open_blog(self):
        # 定義requests的請求頭
        header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"}

        r = self.client.get("/yoyoketang",  headers=header, verify=False)
        print(r.status_code)
        assert r.status_code == 200

class websitUser(HttpLocust):
    task_set = BlogDemo
    min_wait = 3000  # 單位毫秒
    max_wait = 6000  # 單位毫秒

if __name__ == "__main__":
    import os
    os.system("locust -f demo.py --host=https://www.cnblogs.com")

代碼註解: 新建一個類BlogDemo(TaskSet),繼承TaskSet,該類下面寫一些準備請求的行爲(訪問的接口) 裏面的self.client調用get和post方法,跟requests是一樣的 @task裝飾該方法表示爲用戶行爲。括號裏面參數表示該行爲挑選執行的權重,數值越大,執行頻率越高,不設置默認是1

WebsiteUser()類用於設置性能測試。 task_set :指向一個定義了的用戶行爲類。 min_wait :用戶執行任務之間等待時間的下界,單位:毫秒。 max_wait :用戶執行任務之間等待時間的上界,單位:毫秒。

啓動locust

啓動locust可以直接在pycharm裏面執行上面的代碼,運行後編輯器出現兩行 [2018-09-12 23:23:57,500] DESKTOP-HJ487C8/INFO/locust.main: Starting web monitor at *:8089 [2018-09-12 23:23:57,500] DESKTOP-HJ487C8/INFO/locust.main: Starting Locust 0.9.0

也可以通過cmd執行

$ locust -f demo.py —host=https://www.cnblogs.com

  • -f 參數是指定運行的腳本
  • —host是指定運行項目的host地址,這裏用的https://www.cnblogs.com,代碼裏面get訪問的是"/yoyoketang",拼接起來就是完整地址了

8089是該服務啓動的端口號。由於是在本機上搭建的locust,所以可以直接在瀏覽器輸入http://localhost:8089/打開, 如果是在其它機器上搭建的locust服務,那就通過http://其它機器IP:8089/打開

  • Number of users to simulate 設置虛擬用戶總數
  • Hatch rate (users spawned/second) 每秒啓動虛擬用戶數
  • 點擊Start swarming 開始運行性能測試

效果展示

設置虛擬用戶數30,每秒啓動5個用戶,點擊Start swarming 開始運行

  • Type:請求類型;
  • Name:請求路徑;
  • requests:當前請求的數量;
  • fails:當前請求失敗的數量;
  • Median:中間值,單位毫秒,一般服務器響應時間低於該值,而另一半高於該值;
  • Average:所有請求的平均響應時間,毫秒;
  • Min:請求的最小的服務器響應時間,毫秒;
  • Max:請求的最大服務器響應時間,毫秒;
  • Content Size:單個請求的大小,單位字節;
  • reqs/sec:每秒鐘請求的個數。

點stop可以停止測試

New test可以重新設置用戶數

Charts圖標展示

三個圖標分別是

  • 吞吐量/每秒響應事務數(rps)實時統計
  • 平均響應時間/平均事務數實時統計
  • 虛擬用戶數運行

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