Locust学习总结分享
簡介: ?
?Locust是一個用于可擴展的,分布式的,性能測試的,開源的,用Python編寫框架/工具,它非常容易使用,也非常好學。它的主要思想就是模擬一群用戶將訪問你的網站。每個用戶的行為由你編寫的python代碼定義,同時可以從Web界面中實時觀察到用戶的行為。
Locust完全是事件驅動的,因此在單臺機器上能夠支持幾千并發用戶訪問。與其它許多基于事件的應用相比,Locust并不使用回調,而是使用gevent,而gevent是基于協程的,可以用同步的方式來編寫異步執行的代碼。每個用戶實際上運行在自己的greenlet中。
特點:
①用簡單python語言編寫測試腳本,非常簡單輕便。不需要笨重的UI和臃腫的xml代碼,基于協同而非回調。
②分布式的,可擴展性的,可模擬上百萬用戶。Locust支持多機器的性能測試,每臺機器可以模擬上千用戶,當然這可以控制的,
③Locust有一個整潔的HTML+JS的用戶界面,實時顯示相關測試細節。由于用戶界面是基于網絡的,它是跨平臺的和容易擴展。
④可以測試任何系統,盡管Locust是基于網站的,但它幾乎可以測試任何系統,只要你寫一個客戶端。
?
安裝:
Locust可以通過pip或者easy_install安裝:
pip install locustio
或者
easy_install locustio
安裝完Locust后,shell命令locust就可以使用了,可以查看locust命令有哪些選項:
(注意,要確保你安裝好了python,版本必須是2.6以上的,但不能是3.0版以上的,3.0以上的改動好大,還沒法兼容)
locust --help
如果打算以分布式模式運行Locust,建議同時安裝pyzmq(一種通信隊列):
pip install pyzmq
或者
easy_install pyzmq
?
在windows上安裝:
下載二進制安裝包,然后按照提示安裝
網址:http://www.lfd.uci.edu/~gohlke/pythonlibs/
需要注意的是,當需要大規模的測試時,安裝在Linux上的性能比windows上的好。
?
在蘋果電腦上安裝:
①先安裝Homebrew
②安裝libevent
brew install libevent ?????????????????????????????????????????????????????
③參照在linux上的安裝過程。
?
增加打開文件限制的最大數量:
在每一個HTTP連接的機器上打開一個新文件(技術文件描述符)。操作系統可以設置一個可以打開的文件的最大數量的下限。如果限制小于模擬用戶的數量,在測試時,會發生故障。增加操作系統的默認最大數量的文件限制到一個數字高于模擬用戶數的數量,才能達到你想要的測試,具體操作參考本機的操作系統。
?
快速啟動:
下面是一個簡單的列子,保持為python文件,文件名隨意
from?locust?import?HttpLocust,?TaskSet
def?login(l):
????l.client.post("/login", {"username":"ellen_key",?"password":"education"})
def?index(l):
????l.client.get("/")
def?profile(l):
????l.client.get("/profile")
class?UserBehavior(TaskSet):
????tasks?=?{index:2,?profile:1}
?
????def?on_start(self):
????????login(self)
class?WebsiteUser(HttpLocust):
????task_set?=?UserBehavior
????min_wait=5000
????max_wait=9000
?
這個幾行短短的代碼就是一個完成的測試腳本。定義了兩個類,一個User Behavior類,繼承了TaskSet類,用于定義測試任務的,給屬性tasks增加了兩個任務,index函數和profile函數,這些人物被執行,然后返回執行時間,正常情況下,是在下面的最小時間和最大時間之間,從on_start?開始,就像java的main函數一樣,是任務開口,然后隨機的挑選任務,通過client(相當于一個Httpsession)的方法執行http請求,但是會按照設置的比率來執行。Tasks屬性把上面定義的函數變成任務,它是一個dict類型。相當于java的map類型。
一個WebsiteUser類,繼承了HttpLocust類,這個類用于代表用戶,生成一個實例,為每個每個模擬用戶,發送http請求和設置測試參數,Task_set屬性,它是唯一必須要有的,它指向Task Set類,定義用戶的行為,請求等待最小時間min_wait和請求等待最大時間max_wait屬性,單位是毫秒。,weight屬性指定用戶的執行的比率,host屬性是測試的應用的網址。
注意最大時間和最小時間屬性可以在locust類中定義,也可以在task set類中定義,完全是一樣的
下面是一種更簡單的定義task的方法,用@task?構造器。下面的代碼和上面的效果是一樣的:但這是順序執行任務的,第一種是隨機挑選任務
?
?
from?locust?import?HttpLocust,?TaskSet,?task
class?UserBehavior(TaskSet):
????def?on_start(self):
????????""" on_start is called when a Locust start before any task is scheduled """
????????self.login()
?
????def?login(self):
????????self.client.post("/login", {"username":"ellen_key",?"password":"education"})
?
????@task(2)
????def?index(self):
????????self.client.get("/")
?
????@task(1)
????def?profile(self):
????????self.client.get("/profile")
class?WebsiteUser(HttpLocust):
????task_set?=?UserBehavior
????min_wait=5000
????max_wait=9000
?
?
?
TaskSet還可以嵌套:參考下面的代碼
第一種:
?
?
class?ForumPage(TaskSet):
????@task(20)
????def?read_thread(self):
????????pass
?
????@task(1)
????def?new_thread(self):
????????pass
?
????@task(5)
????def?stop(self):
????????self.interrupt()
class?UserBehaviour(TaskSet):
????tasks?=?{ForumPage:10}
?
????@task
????def?index(self):
????????pass
?
?
第一種需要注意的是interrupt這個函數,如果沒有這個函數locust就會一直執行formpage這個任務,只有通過這個函數,才能跳出來。執行formpage之外的函數。
第二種:
?
?
class?MyTaskSet(TaskSet):
????@task
????class?SubTaskSet(TaskSet):
????????@task
????????def?my_task(self):
????????????pass
?
?
運行Locust:
locust -f ../locust_files/上面的文件名.py --host=http://example.com
??????????????代碼存放地址 ??????????????????????????主機的名字和應用
分布式多處理器的Locust運行:
主處理器,負責分發任務的
locust -f ../locust_files/上面的文件名.py --master --host=http://example.com
--master-port=8888(默認的是8080端口)
從處理器,負責執行代碼腳本的
llocust -f ../locust_files/上面的文件名.py --slave --master-host=192.168.0.100 --host=http://example.com?--master-bind-host=8888
?
打開Locust web?界面
?http://127.0.0.1:8089?
由于example是在本地的,所以ip也是本地的
?
需要輸入模擬多少個用戶數和每秒啟動多少個用戶,就是并發數。
?
轉載于:https://www.cnblogs.com/tiechui2015/p/10557417.html
總結
以上是生活随笔為你收集整理的Locust学习总结分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: COCI 2020/2021 Svjet
- 下一篇: 开发进度