主頁 >  其他 > python輕量級性能工具-Locust

python輕量級性能工具-Locust

2023-05-03 07:27:58 其他

Locust基于python的協程機制,打破了執行緒行程的限制,可以能夠在一臺測驗機上跑高并發

性能測驗基礎

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

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

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

  1 負載測驗load testing

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

  2 壓力測驗

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

  3 并發測驗:

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

性能負載模型

locust安裝

安裝存在問題,可以通過豆瓣源下載

pip install locust

locust模板

基本上多數的場景我們都可以基于這個模板read.py去做修改

from locust import HttpUser, TaskSet, task, tag, events

# 啟動locust時運行
@events.test_start.add_listener
def setup(environment, **kwargs):
    # print("task setup")

# 停止locust時運行
@events.test_stop.add_listener
def teardown(environment, **kwargs):
    print("task teardown")

class UserBehavor(TaskSet):
    #虛擬用戶啟用task運行
    def on_start(self):
        print("start")
        locusts_spawned.wait()
    #虛擬用戶結束task運行
    def on_stop(self):
        print("stop")

    @tag('test1')
    @task(2)
    def index(self):
        self.client.get('/yetangjian/p/17320268.html')
    @task(1)
    def info(self):
        self.client.get("/yetangjian/p/17253215.html")

class WebsiteUser(HttpUser):
    def setup(self):
        print("locust setup")

    def teardown(self):
        print("locust teardown")

    host = "https://www.cnblogs.com"
    task_set = task(UserBehavor)
    min_wait = 3000
    max_wait = 5000

注:這里我們給了一個webhost,這樣我們可以直接在瀏覽器中打開locust

 集合點lr_rendezvous

當然我們可以把集合點操作放入上述模板的setup中去運行起來

locusts_spawned = Semaphore()
locusts_spawned.acquire()

def on_hatch_complete(**kwargs):
    """
    select_task類的鉤子函式
    :param kwargs:
    :return:
    """
    locusts_spawned.release()

events.spawning_complete.add_listener(on_hatch_complete)
n = 0
class UserBehavor(TaskSet):
    def login(self):
        global n
        n += 1
        print(f"第{n}個用戶登陸")

    def on_start(self):
        self.login()
        locusts_spawned.wait()
    @task
    def test1(self):
        #catch_response獲取回傳
        with self.client.get("/yetangjian/p/17253215.html",catch_response=True):
            print("查詢結束")

class WebsiteUser(HttpUser):
    host = "https://www.cnblogs.com"
    task_set = task(UserBehavor)
    wait_time = between(1,3)

if __name__ == '__main__':
    os.system('locust -f read.py --web-host="127.0.0.1"')

比較常見的用法

在上面兩個例子中我們已經看到了一些,例如裝飾器events.test_start.add_listenerevents.test_stop.add_listener用來在負載測驗前后進行一些操作,又例如on_start、on_stop,在task執行前后運行,又例如task,可以用來分配任務的權重

 等待時間

# wait between 3.0 and 10.5 seconds after each task
#wait_time = between(3.0, 10.5)
#固定時間等待
# wait_time = constant(3)
#確保每秒運行多少次
constant_throughput(task_runs_per_second)
#確保每多少秒運行一次
constant_pacing(wait_time)

同樣也可以在User類下發重寫wait_time來達到自定義

tag標記

@tag('test1')
@task(2)
def index(self):
    self.client.get('/yetangjian/p/17320268.html')

通過對任務打標記,就可以在運行時候執行運行某一些任務:

#只執行標記test1
os.system('locust -f read.py --tags test1 --web-host="127.0.0.1"')
#不執行標記過的
os.system('locust -f read.py --exclude-tags --web-host="127.0.0.1"')
#除去test1執行所有
os.system('locust -f read.py --exclude-tags test1 --web-host="127.0.0.1"')

 自定義失敗

#定義回應時間超過0.1就為失敗
with self.client.get("/yetangjian/p/17253215.html", catch_response=True) as response:
    if response.elapsed.total_seconds() > 0.1:
        response.failure("Request took too long")

#定義回應碼是200就為失敗
with self.client.get("/yetangjian/p/17320268.html", catch_response=True) as response:
    if response.status_code == 200:
        response.failure("回應碼200,但我定義為失敗")

 自定義負載形狀

自定義一個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

 

作者: yetangjian

出處: https://www.cnblogs.com/yetangjian/p/17366389.html

關于作者: yetangjian

本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出, 原文鏈接 如有問題, 可郵件([email protected])咨詢.

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/551541.html

標籤:其他

上一篇:基于ChatGPT用AI實作自然對話

下一篇:返回列表

標籤雲
其他(158356) Python(38110) JavaScript(25398) Java(18011) C(15221) 區塊鏈(8261) C#(7972) AI(7469) 爪哇(7425) MySQL(7154) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5870) 数组(5741) R(5409) Linux(5334) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4565) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2432) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1964) Web開發(1951) HtmlCss(1929) python-3.x(1918) 弹簧靴(1913) C++(1912) xml(1889) PostgreSQL(1874) .NETCore(1857) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • python輕量級性能工具-Locust

    Locust基于python的協程機制,打破了執行緒行程的限制,可以能夠在一臺測驗機上跑高并發 性能測驗基礎 1.快慢:衡量系統的處理效率:回應時間 2.多少:衡量系統的處理能力:單位時間內能處理多少個事務(tps) 性能測驗根據測驗需求最常見的分為下面三類 1 負載測驗load testing 不斷 ......

    uj5u.com 2023-05-03 07:27:58 more
  • 基于ChatGPT用AI實作自然對話

    1.概述 ChatGPT是當前自然語言處理領域的重要進展之一,通過預訓練和微調的方式,ChatGPT可以生成高質量的文本,可應用于多種場景,如智能客服、聊天機器人、語音助手等。本文將詳細介紹ChatGPT的原理、實戰演練和流程圖,幫助讀者更好地理解ChatGPT技術的應用和優勢。 2.內容 在當今快 ......

    uj5u.com 2023-05-01 07:34:37 more
  • Vulnhub之Gigroot靶機詳細測驗程序

    Gigroot 識別目標主機IP地址 ─(kali?kali)-[~/Vulnhub/Gigroot] └─$ sudo netdiscover -i eth1 -r 192.168.56.0/24 Currently scanning: 192.168.56.0/24 | Screen View: ......

    uj5u.com 2023-05-01 07:32:46 more
  • Nginx 入門實戰(2)--簡單使用

    本文主要介紹 Nginx 的實際使用,文中所使用到的軟體版本:Centos 7.9.2009、Nginx 1.22.1。 1、環境準備 這里主要演示使用 Nginx 代理 Http 及 TCP 應用,環境資訊如下: 主機 用途 Http 埠 TCP 埠 10.49.196.30 部署 Http、 ......

    uj5u.com 2023-05-01 07:32:41 more
  • 基于ChatGPT用AI實作自然對話

    1.概述 ChatGPT是當前自然語言處理領域的重要進展之一,通過預訓練和微調的方式,ChatGPT可以生成高質量的文本,可應用于多種場景,如智能客服、聊天機器人、語音助手等。本文將詳細介紹ChatGPT的原理、實戰演練和流程圖,幫助讀者更好地理解ChatGPT技術的應用和優勢。 2.內容 在當今快 ......

    uj5u.com 2023-05-01 07:26:08 more
  • AtCoder Beginner Contest 300

    A - N-choice question (abc300 a) 題目大意 給定一個元素互不相同的陣列$c$和 $a,b$,找到 $i$使得 $c_i = a + b$ 解題思路 直接for回圈尋找即可。 神奇的代碼 ```cpp #include using namespace std; usin ......

    uj5u.com 2023-04-30 07:50:49 more
  • 中國剩余定理(CRT)學習筆記

    約定 $A\perp B$ 表示 $\gcd(A,B)=1$。 $A\mid B$ 表示 $B\equiv 0\pmod{A}(A\neq0)$。 引入 考慮以下這道題: 有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二。 問物幾何?—— 《孫子算經》 也就是說,求出下列關于 $x$ 方程組的 ......

    uj5u.com 2023-04-30 07:50:44 more
  • Vulnhub之GreenOptics靶機詳細測驗程序

    GreenOptics 識別目標主機IP地址 ─(kali?kali)-[~/Vulnhub/GreenOptic] └─$ sudo netdiscover -i eth1 -r 192.168.56.0/24 Currently scanning: Finished! | Screen View ......

    uj5u.com 2023-04-30 07:50:40 more
  • 一文帶你了解區塊鏈中15種共識演算法

    所有主要的區塊鏈共識演算法解釋 區塊鏈技術席卷全球,提供了一種去中心化且安全的資訊存盤和傳輸方式。它還徹底改變了交易的執行方式,隨之而來的是廣泛的共識演算法。在這里,共識演算法在確保區塊鏈網路的完整性方面發揮著關鍵作用。在本文中,我們將探討所有主要型別的區塊鏈共識演算法、它們的含義、優點、缺點,以及為什么它 ......

    uj5u.com 2023-04-30 07:50:19 more
  • Spring RCE漏洞

    Spring RCE漏洞 一、漏洞概況與影響 CVE編號:CVE-2022-22965 受影響范圍: Spring Framework 5.3.X < 5.3.18 Spring Framework 5.2.X < 5.2.20 JDK >=9 使用Tomcat中間件且開啟了Tomcat日志記錄的應 ......

    uj5u.com 2023-04-30 07:50:04 more