Python性能測試工具Locust入門教程


1、安裝:    

終端輸入:pip install locust 安裝,安裝后locust --version查看當前Locust版本

終端輸入: locust --help  顯示幫助信息

locust官網: https://www.locust.io/

官網幫助文檔: https://docs.locust.io/en/latest/installation.html

大並發量測試時,建議在linux系統下進行;

2、python編寫性能測試腳本

  locust通過client屬性來使用Python requests庫的所有方法,調用方式與reqeusts一樣(源碼中變量client賦值了HttpSession類,而HttpSession繼承自requests.Session,故client可以使用requests庫中的所有方法,感興趣的可以看下源碼)。

  以訪問博客園為例,編寫實例腳本如下:

from locust import HttpLocust, TaskSet, task


# 定義用戶行為
class UserBehavior(TaskSet):
    def on_start(self):
        print("start")

    @task(1)
    def bky_index(self):
        self.client.get("/")

    @task(2)
    def blogs(self):
        self.client.get("/Clairewang/p/8622280.html")


class WebsiteUser(HttpLocust):
    host = "https://www.cnblogs.com"
    task_set = UserBehavior
    min_wait = 1500
    max_wait = 5000

  UserBehavior類繼承TaskSet類,用於描述用戶行為:

  • 使用@task裝飾的方法為一個事務,方法的參數用於指定該行為的執行權重,參數越大每次被用戶執行的概率越高,默認為1(事務blogs()被執行的概率是bky_index()的2倍);
  • on_start():每個locust用戶執行測試事務之前執行一次,用於做初始化的工作,如登錄;

  WebsiteUser類用於設置性能測試屬性:

  • host :要加載主機的URL前綴(即“https://www.cnblogs.com”),通常是在命令行啟動locust時使用--host選項指定,若命令行啟動時未指定,該屬性被使用;
  • task_set:指向定義的一個用戶行為類;
  • min_wait:模擬用戶在執行每個任務之間等待的最小時間,單位為毫秒;
  • max_wait:模擬用戶在執行每個任務之間等待的最大時間,單位為毫秒(min_wait和max_wait默認值為1000,因此,如果沒有聲明min_wait和max_wait,則locust將在每個任務之間始終等待1秒。);
  • weight:一個文件中有多個locust用戶類時,指定用戶類的權重(默認新增locust用戶時會隨機選擇一個用戶類);
class WebUserLocust(Locust):
    weight = 3
    ...

class MobileUserLocust(Locust):
    weight = 1
    ...

  WebUserLocus用戶執行的概率是MobileUserLocust用戶的三倍。

  實例中只用了get方式請求,post方式請求操刀實例如下:

class JingClue(TaskSet):

    def on_start(self):
        self.login()
        self.header = {
            "Authorization": self.token
        }

    def login(self):
        username = '18200389565'
        password = '123456'
        with self.client.post('/security/log/login', {'username': username, "password": password}) as response:
            if response.status_code == 200:
                self.token = "Bearer " + response.json()["data"]["token"]
  
    @task
    def publicoceanclues(self):
        url = '/DataService/publicOcean/getPublicOceanClues'
        data = {
            "pageSize": 20,
            "pageIndex": 1,
            "sortField": "discardTime",
            "sortType": -1
        }
        self.client.post(url, json=data, headers=self.header)

 

3、啟動:

  終端進入代碼目錄,輸入 locust -f  bokeyuan.py  --host=https://www.cnblogs.com

  

  • -f       :指定要運行的測試腳本文件;
  • -host :要加載主機的URL前綴,不指定時,讀取WebsiteUser類中定義的host;
  • --master:單台機器不能模擬更多用戶時,分布式模式,通過--master指定主進程;

4、打開Locust的web界面

  使用上面的命令行啟動Locust之后,應該打開瀏覽器並將其指向http://127.0.0.1:8089(如果您在本地運行Locust)。

  

  • Number of users to simulate :設置模擬用戶數;
  • Hatch rate(users spawned/second) :每秒產生(啟動)的虛擬用戶數;

  設置好模擬用戶后,點擊Start swarming開始測試,測試結果如下:

  

  • Type   :請求的類型,如GET/POST;
  • Name      :請求的路徑;
  • request    :已發出請求數量;
  • fails          :請求失敗的數量;
  • Median    :響應時間的中間值(單位:毫秒);
  • Average  :平均響應時間(單位:毫秒);
  • Min         :請求的最小響應時間(單位:毫秒);
  • Max        :請求的最大響應時間(單位:毫秒);
  • Content Size:單個請求的大小(單位:字節);
  • reqs/sec:每秒鍾請求的個數;

  今日先更到這里吧,斷點、使用隊列參數化、分布式測試等后續空了再繼續更。

  加微信交流或打賞鼓勵:

            

 交流QQ:1271782085


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM