locust壓力測試

安裝

pip install locust

驗證是否安裝成功

locust -V

使用

網上的教程基本上是前幾年的,locust已經更新了好幾個版本,有點過時了,在此做一個總結

啟動

默認是使用瀏覽器進行設置的

# 使用瀏覽器
locust -f .\main.py

其他參數

Usage: locust [options] [UserClass ...]常用選項:-h, --help            顯示幫助消息并退出-f <filename>, --locustfile <filename>包含測試的Python文件或模塊,例如“my_test.py”。接受多個逗號分隔.py文件、包名/目錄或指向的url遠程locustfile。默認為“locustfile”。--config <filename>   從中讀取其他配置的文件。-H <base url>, --host <base url>主機負載測試,格式如下:https://www.example.com-u <int>, --users <int>并發Locust用戶的峰值數量。主要使用與無頭或自動啟動一起。可以是在測試期間通過鍵盤輸入w、W(spawn110個用戶)和s,S(停止110用戶)-r <float>, --spawn-rate <float>生成用戶的速率為(每秒用戶數)。主要是與--headless或--autostart一起使用-t <time string>, --run-time <time string>在指定的時間量后停止,例如(300s,20m、3h、1h30m等)。僅與一起使用--headless 或 --autostart。默認為永遠運行。-l, --list            顯示可能的用戶類列表并退出--config-users [CONFIG_USERS ...]用戶配置為JSON字符串或文件。列表參數或JSON配置數組Web UI 選項:--web-host <ip>       將web界面綁定到的主機。默認為“*”(所有接口)--web-port <port number>, -P <port number>運行web主機的端口--headless            禁用web界面,然后立即開始測試。使用-u和-t來控制用戶數量和運行時間--autostart           立即開始測試(比如--headless,但是不禁用web UI)--autoquit <seconds>  完全退出Locust,運行后X秒完成。僅與 --autostart一起使用。這個默認設置是保持Locust運行,直到您按下CTRL+C關閉它--web-login           使用登錄頁面保護web界面。--tls-cert <filename>用于提供服務的TLS證書的可選路徑HTTPS--tls-key <filename>  用于提供服務的TLS私鑰的可選路徑HTTPS--class-picker        在web界面中啟用選擇框進行選擇從所有可用的用戶類和形狀類主選項:
在分布式運行Locust時運行LocustMaster節點的選項。主節點需要連接到它的Worker節點,然后才能運行負載測試。--master              將locust作為主節點啟動,工作節點連接到該節點。--master-bind-host <ip>主機監聽的IP地址,例如'192.168.1.1'. 默認為*(全部可用接口)。--master-bind-port <port number>主機監聽的端口。默認為5557--expect-workers <int>延遲開始測試,直到達到此數量的workers(僅與結合使用 --headless/ --autostart)。--expect-workers-max-wait <int>master等待workers連接時間。默認為永遠等待--enable-rebalancing  如果在測試運行期間添加或刪除了新的worker,請重新分配用戶。實驗。Worker選項:
在分布式運行Locust時運行LocustWorker節點的選項。
通常只需要在workers上指定這些選項(和--locostfile),因為其他選項(-u、-r、-t、…)由主節點控制。--worker              將locust設置為以分布式模式運行,并將此進程設置為worker。可以與設置相結合--locustfile設置為“-”,以便從master下載。--processes <int>     分流 locust 進程的數量,以啟用系統。結合--worker標志或讓它自動設置--worker和--master標志,以實現一體化解決方案。在 Windows 上不可用。實驗。--master-host <hostname>要連接的locust主節點的主機名。默認值127.0.0.1--master-port <port number>主節點上要連接的端口。默認值為5557。標記選項:
Locust任務可以使用@tag裝飾器進行標記。這些選項允許指定在測試期間包含或排除哪些任務。-T [<tag> ...], --tags [<tag> ...]測試中要包含的標簽列表,只會執行至少有一個匹配標簽的任務-E [<tag> ...], --exclude-tags [<tag> ...]要從測試中排除的標簽列表,只會執行沒有匹配標簽的任務請求統計選項:--csv <filename>      將請求統計數據以CSV格式存儲到文件中。設置此選項將生成三個文件:<filename>_stats.csv、<filename>_stats_history.csv和<filename>_failures.csv。前綴文件夾部分將自動創建--csv-full-history    將每個統計條目以CSV格式存儲到_statshistory.csv文件。您還必須指定“--csv”參數來啟用此功能。--print-stats         在UI運行中啟用請求統計數據的定期打印--only-summary        禁用請求統計信息的定期打印--headless 運行--reset-stats         生成完成后重置統計信息。在分布式模式下運行時,應同時在master和worker上設置--html <filename>     將HTML報告存儲到指定的文件路徑--json                將JSON格式的最終統計數據打印到stdout。可用于解析其他程序/腳本中的結果。與--headless和--skip-log一起使用,僅用于json數據的輸出。日志記錄選項:--skip-log-setup      禁用Locust的日志記錄設置。相反,配置是由Locust測試或Python默認值提供的。--loglevel <level>, -L <level>在DEBUG/INFO/WARNING/ERROR/CRITICAL之間進行選擇。默認值為INFO。--logfile <filename>  日志文件的路徑。如果未設置,日志將轉到stderr其他選項:--show-task-ratio     打印用戶類任務執行率表。如果某些類定義了非零的fixed_count屬性,請將其與非零--user選項一起使用。--show-task-ratio-json打印User類任務執行率的json數據。如果某些類定義了非零的fixed_count屬性,請將其與非零--user選項一起使用。--version, -V         顯示程序的版本號并退出--exit-code-on-error <int>設置測試結果包含任何失敗或錯誤時使用的進程退出代碼。默認為1-s <number>, --stop-timeout <number>退出前等待模擬用戶完成所有執行任務的秒數。默認情況是立即終止。當運行分布式時,只需要在主服務器上指定。--equal-weights       使用均勻分布的任務權重,覆蓋locostfile中指定的權重。User classes:<UserClass1 UserClass2>在命令行末尾,您可以列出要使用的User類(可用的User類可以用--list列出)。LOCUST_USER_CLASS環境變量也可用于指定USER類。默認設置是使用所有可用的用戶類示例:locust -f my_test.py -H https://www.example.comlocust --headless -u 100 -t 20m --processes 4 MyHttpUser AnotherUser有關更多詳細信息,包括如何使用文件或環境變量設置選項,請參閱文檔:
https://docs.locust.io/en/stable/configuration.html

參數介紹在其他文章上有有很多,這里不多贅述,下面主要介紹一下項目中的應用

TaskSet

新版的locust使用的方式與舊版有點區別,寫用例時需要繼承 TaskSet來實現

代碼如下:

# coding: utf-8
from locust import TaskSet
from locust.clients import ResponseContextManagerfrom .settings import USER_AGENTclass UserBehaviorBase(TaskSet):token = Nonedef setToken(self, token):self.token = tokendef request(self, method, url, **kwargs):headers = kwargs.pop("headers", {})headers.update({"User-Agent": USER_AGENT})if self.token:headers.update({"token": self.token})kwargs.update({'headers': headers, 'catch_response': True})response: ResponseContextManagerwith self.client.request(method, url, **kwargs, ) as response:response.encoding = "utf-8"if response.status_code != 200:response.failure(f"Request {method} {url} failed, status_code: {response.status_code}, text: {response.text}")if response.headers.get("Content-Type", "").startswith("application/json"):js = response.json()if js.get("code") != 2000:response.failure(f"Request {method} {url} failed, response: {js}")return responsedef get(self, url, **kwargs):return self.request("GET", url, **kwargs)def post(self, url, **kwargs):return self.request("POST", url, **kwargs)def put(self, url, **kwargs):return self.request("PUT", url, **kwargs)def delete(self, url, **kwargs):return self.request("DELETE", url, **kwargs)def options(self, url, **kwargs):return self.request("OPTIONS", url, **kwargs)def head(self, url, **kwargs):return self.request("HEAD", url, **kwargs)def patch(self, url, **kwargs):return self.request("PATCH", url, **kwargs)

自定義錯誤

locustassert函數只能拋出錯誤只能在Exceptions中查看,這是錯誤,但是用例還是成功的

在這里插入圖片描述

如果標記失敗需要在ResponseContextManager中進行指定,在locust中用例狀態只有兩種,成功,失敗
自定義失敗需要在 ResponseContextManager 中指定一個參數 catch_response= True

例:

若不指定failure,默認用例是成功的,locust中status_code小于400就是成功的用例,不滿足需求常常是自定義的

在這里插入圖片描述

task

項目中一個task便是一個用例,用例必須要有task裝飾器
task有個weight參數,若weight=2,可以簡單的理解為,不指定參數的運行一次,指定參數的運行兩次
例:

# coding: utf-8
from locust import taskfrom common import UserBehaviorBase, operationToken, USER_MANAGEclass InsuranceUser(UserBehaviorBase):"""保險端用戶"""# def on_start(self):#     insurance = Login.login(USER_MANAGE['operation'])#     token = operation.get('result', {}).get('token')#     self.setToken(token)def on_start(self) -> None:self.setToken(operationToken)@taskdef test01(self):"""承保管理 - 詢價申請"""url = '/gateway/spli/insurance/apply/page'payload = {"param": {},"page": {"current": 1,"size": 10}}self.post(url, json=payload)

on_start/on_stop

類運行前、后的函數,只運行一次,通常用于登錄、清理內存

執行程序

這里只說一下單使用locust自己寫的用例運行。項目中經常需要在多個文件中寫用例,官方文檔中并沒有明確說該怎么運行多個文件的用例。
其實也比較簡單

例:

# coding: utf-8
from locust import HttpUser, between, run_single_userfrom common import HOST
# 從其他文件中引入類
from tasks import *class WebSite(HttpUser):# 將用例類添加到任務重tasks = [RegulatoryUser, CustomerUser, ProjectUser, InsuranceUser]# tasks = [InsuranceUser]host = HOSTwait_time = between(0.5, 2)if __name__ == '__main__':# 調試模式下,只運行一個用戶run_single_user(WebSite)

參數解析

class WebSite(HttpUser):host = '' # 需要測試的主機地址 eg: http://127.0.0.1:1234tasks: list[TaskSet | Callable] = [] # 任務列表min_wait= 1 # 最小等待時間,已棄用,使用wait_timemax_wait = 2 # 最大等待時間,已棄用 使用 wait_timewait_time=between(3, 25) # 等待時間,這個例子是在2-25秒中隨機選擇一個wait_function=None	# 自定義等待函數,已棄用weight: float = 1	# 與`task`中相同fixed_count: int = 0 # 如果值為> 0,則權重屬性將被忽略,并且將生成'fixed_count'-實例。首先生成這些用戶。如果總目標計數(由——users參數指定)不足以生成具有已定義屬性的每個User類的所有實例,則每個User的最終計數是未定義的。abstract: bool = True	# 如果abstract為True,則該類將被子類化,并且在測試期間不會生成該類的用戶

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903256.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903256.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903256.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

優先隊列和單調隊列(雙端隊列實現的)

這里寫自定義目錄標題 一、優先隊列與單調隊列二、優先隊列2.1 概念2.2 增刪查 判空2.3 示例代碼 三、雙端隊列四、單調隊列4.1 單調遞增隊列4.2 單調遞減隊列 一、優先隊列與單調隊列 二、優先隊列 2.1 概念 一種特殊的隊列&#xff0c;它與普通隊列的主要區別在于元素的出…

如何在idea中寫spark程序

在 IntelliJ IDEA 中編寫 Spark 程序是一個高效且便捷的方式&#xff0c;以下是一個詳細的步驟指南&#xff0c;幫助你在 IntelliJ IDEA 中創建和運行 Spark 程序。 一、環境準備 安裝 Java&#xff1a; 確保已經安裝了 JDK 1.8 或更高版本。可以通過以下命令檢查&#xff1a;…

BERT BERT

BERT ***** 2020年3月11日更新&#xff1a;更小的BERT模型 ***** 這是在《深閱讀的學生學得更好&#xff1a;預訓練緊湊模型的重要性》&#xff08;arXiv:1908.08962&#xff09;中提到的24種較小規模的英文未分詞BERT模型的發布。 我們已經證明&#xff0c;標準的BERT架構和…

SpringBoot啟動警告:OpenJDK 64-Bit Server VM warning

問題描述 以Debug模式啟動Spring boot項目之后&#xff0c;日志打印&#xff1a;OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended&#xff0c; 警告信息 解決方案&#xff1a;配置VM opt…

“該虛擬機似乎正在使用中“

當某一天打開虛擬機突然彈出"該虛擬機似乎正在使用中"。 遇到這種問題的解決方法很簡單&#xff0c;出現這種問題是因為錯誤關閉虛擬機導致&#xff0c;當我們點擊獲取所有權時發現不能解決問題。這里分享一種簡單的解決方法。 打開虛擬機的文件目錄 找到lck文件夾下…

【CSS】層疊,優先級與繼承(三):超詳細繼承知識點

目錄 繼承一、什么是繼承&#xff1f;2.1 祖先元素2.2 默認繼承/默認不繼承 二、可繼承屬性2.1 字體相關屬性2.2 文本相關屬性2.3 列表相關屬性 三、不可繼承屬性3.1 盒模型相關屬性3.2 背景相關屬性 四、屬性初始值4.1 根元素4.2 屬性的初始值4.3 得出結論 五、強制繼承5.1 in…

Android LiveData關鍵代碼

1、observer方法 public void observe(NonNull LifecycleOwner owner, NonNull Observer<? super T> observer) {assertMainThread("observe");if (owner.getLifecycle().getCurrentState() DESTROYED) {// ignorereturn;}LifecycleBoundObserver wrapper …

Docker-高級使用

前言 書接上文Docker-初級安裝及使用_用docker安裝doccano-CSDN博客&#xff0c;我們講解了Docker的基本操作&#xff0c;下面我們講解的是高級使用&#xff0c;請大家做好準備&#xff01; 大家如果是從初級安裝使用過來的話&#xff0c;建議把之前鏡像和搭載的容器數據卷里面…

Spring Boot常用注解詳解:實例與核心概念

Spring Boot常用注解詳解&#xff1a;實例與核心概念 前言 Spring Boot作為Java領域最受歡迎的快速開發框架&#xff0c;其核心特性之一是通過注解&#xff08;Annotation&#xff09;簡化配置&#xff0c;提高開發效率。注解驅動開發模式讓開發者告別繁瑣的XML配置&#xff…

TRO再添新案 TME再拿下一熱門IP,涉及Paddington多個商標

4月2日和4月8日&#xff0c;TME律所代理Paddington & Company Ltd.對熱門IP Paddington Bear帕丁頓熊的多類商標發起維權&#xff0c;覆蓋文具、家居用品、毛絨玩具、紡織用品、游戲、電影、咖啡、填充玩具等領域。跨境賣家需立即排查店鋪內的相關產品&#xff01; 案件基…

經驗分享-上傳ios的ipa文件

.ipa格式的二進制文件&#xff0c;是打包后生成的文件&#xff0c;無論我們是放上去testflight測試還是正式上傳到app store&#xff0c;都需要先上傳到蘋果開發者中心的app store connect上的構建版本上。 在app store connect上&#xff0c;上傳構建版本的功能&#xff0c;它…

docker(3) -- 圖形界面

1. 前言 在wsl(8) – 圖形界面文章中介紹了wsl2默認是支持圖形界面的&#xff0c;現在我們嘗試下在docker中運行gui程序試試看。 2. x11-apps 啟動一個docker&#xff0c;安裝一些gui小程序&#xff0c;然后運行&#xff0c;發現會失敗。ubuntu_base詳見文章wsl(6) – 安裝d…

Docker容器跑定時任務腳本

最近搞了一個Docker容器跑腳本&#xff0c;想設置一個定時任務&#xff0c;每天8點運行一次&#xff0c;結果死活不成功。排查了一天&#xff0c;有一點當局者迷了&#xff0c;明明時間是對的&#xff0c;明明時區是對的&#xff0c;定時任務也是啟動的&#xff0c;它就是不執行…

【Linux】什么是完全限定域名

FQDN 是 “完全限定域名” (Fully Qualified Domain Name) 的縮寫。 FQDN 是一個互聯網上特定計算機或主機的完整且唯一的域名。它詳細說明了該主機在域名系統 (DNS) 層級結構中的確切位置。 一個 FQDN 通常由以下幾個部分組成&#xff0c;從左到右依次是&#xff1a; 主機名…

小結:BFD

*BFD&#xff08;雙向轉發檢測&#xff0c;Bidirectional Forwarding Detection&#xff09;是一種快速、輕量級的故障檢測機制&#xff0c;用于檢測網絡中兩點之間的連通性。它廣泛應用于各種場景 1. 檢測 IP 鏈路 應用場景&#xff1a; BFD 用于檢測兩臺設備之間的 IP 層連…

配置Spark歷史服務器,輕松查看任務記錄

在大數據處理中&#xff0c;Spark是一個強大的分布式計算框架。但當Spark服務重啟后&#xff0c;之前的運行記錄就會消失&#xff0c;給我們排查問題和分析任務執行情況帶來不便。這時&#xff0c;配置Spark歷史服務器就顯得尤為重要&#xff0c;它能幫助我們保存和查看歷史任務…

(六)RestAPI 毛子(外部導入打卡/游標分頁/Refit/Http resilience/批量提交/Quartz后臺任務/Hateoas Driven)

文章目錄 項目地址一、外部導入打卡功能1.1 創建實體1. Entry實體2. EntryImport實體3. 添加數據庫配置4. 創建表 1.2 創建DTOs1.3 創建GetEnties Controller 二、游標分頁2.1 創建所需要的DTOs1. 創建游標分頁的請求參數2. 創建CollectionResponse3. 添加游標編碼和解碼的DTO …

Node.js CSRF 保護指南:示例及啟用方法

解釋 CSRF 跨站請求偽造 (CSRF/XSRF) 是一種利用用戶權限劫持會話的攻擊。這種攻擊策略允許攻擊者通過誘騙用戶以攻擊者的名義提交惡意請求,從而繞過我們的安全措施。 CSRF 攻擊之所以可能發生,是因為兩個原因。首先,CSRF 攻擊利用了用戶無法辨別看似合法的 HTML 元素是否…

Flink介紹——實時計算核心論文之Dataflow論文總結

數據流處理的演變與 Dataflow 模型的革新 在大數據處理領域&#xff0c;流式數據處理系統的發展歷程充滿了創新與變革。從早期的 S4 到 Storm&#xff0c;再到 MillWheel&#xff0c;每一個系統都以其獨特的方式推動了技術的進步。S4 以其無中心架構和 PE&#xff08;Processi…

Arduino 入門學習筆記(五):KEY實驗

Arduino 入門學習筆記&#xff08;五&#xff09;&#xff1a;KEY實驗 開發板&#xff1a;正點原子ESP32S3 例程源碼在文章頂部可免費下載&#xff08;審核中…&#xff09; 1. GPIO 輸入功能使用 1.1 GPIO 輸入模式介紹 在上一文章中提及到 pinMode 函數&#xff0c; 要對…