python輕量級效能工具-Locust

2023-05-02 15:00:22

Locust基於python的協程機制,打破了執行緒程序的限制,可以能夠在一臺測試機上跑高並行

效能測試基礎

  1.快慢:衡量系統的處理效率:響應時間

  2.多少:衡量系統的處理能力:單位時間內能處理多少個事務(tps)

效能測試根據測試需求最常見的分為下面三類

  1 負載測試load testing

    不斷向伺服器加壓,值得預定的指標或者部分系統資源達到瓶頸,目的是找到系統最大負載的能力

  2 壓力測試

    通過高負載持續長時間,來驗證系統是否穩定

  3 並行測試:

    同時像伺服器提交請求,目的發現系統是否存在事務衝突或者鎖升級的現象

效能負載模型

 自定義負載形狀

自定義一個shape.py通過繼承LoadTestShape並重寫tick

這個形狀類將以100塊為單位,20速率的增加使用者數,然後在10分鐘後停止負載測試(從執行開始的第51秒開始user_count會round到100)

from locust import LoadTestShape


class MyCustomShape(LoadTestShape):
    time_limit = 600
    spawn_rate = 20

    def tick(self):
        run_time = self.get_run_time()

        if run_time < self.time_limit:
            # User count rounded to nearest hundred.
            user_count = round(run_time, -2)
            return (user_count, self.spawn_rate)

        return None

執行圖如下所示

通過命令列去觸發

os.system('locust -f read.py,shape.py --web-host="127.0.0.1"')

不同時間階段的例子

from locust import LoadTestShape

class StagesShapeWithCustomUsers(LoadTestShape):

    stages = [
        {"duration": 10, "users": 10, "spawn_rate": 10},
        {"duration": 30, "users": 50, "spawn_rate": 10},
        {"duration": 60, "users": 100, "spawn_rate": 10},
        {"duration": 120, "users": 100, "spawn_rate": 10}]

    def tick(self):
        run_time = self.get_run_time()

        for stage in self.stages:
            if run_time < stage["duration"]:
                tick_data = (stage["users"], stage["spawn_rate"])
                return tick_data

        return None