python模拟用户压力测试_Python 工具 Locust 进行负载测试
Locust 是一個(gè)用?Python?編寫的開源的負(fù)載測(cè)試工具。 它允許您針對(duì)模擬用戶行為的 Web 應(yīng)用程序編寫測(cè)試,然后按規(guī)模運(yùn)行測(cè)試以幫助查找瓶頸或其他性能問題。
安裝
安裝是使用 Python 常用的工具 pip 完成的:$pip?install?locustio
配置
Locust 最好的功能之一是通過”Plain Old Python”1?完成配置。您只需創(chuàng)建一個(gè)名為 locustfile.py 的文件,為您的負(fù)載測(cè)試任務(wù)進(jìn)行所有配置,并在其中進(jìn)行測(cè)試。
下面是 locustfile.py 的一個(gè)例子,它定義了一個(gè)簡(jiǎn)單的用戶行為,它由一個(gè)獲取特定網(wǎng)頁的“任務(wù)”組成:from?locust?import?HttpLocust,?TaskSet,?task
class?UserBehavior(TaskSet):
@task
def?get_something(self):
self.client.get("/something")
class?WebsiteUser(HttpLocust):
task_set?=?UserBehavior
我們?cè)賮硖砑拥诙€(gè)任務(wù):class?UserBehavior(TaskSet):
@task
def?get_something(self):
self.client.get("/something")
@task
def?get_something_else(self):
self.client.get("/something-else")
當(dāng)上面的 UserBehavior 運(yùn)行時(shí),Locust 將在每個(gè)任務(wù)之間隨機(jī)選擇并運(yùn)行它們。 如果你想為不同的任務(wù)定義權(quán)重,那么你可以按照下面的方法來加權(quán):class?UserBehavior(TaskSet):
@task(2)
def?get_something(self):
self.client.get("/something")
@task(1)
def?get_something_else(self):
self.client.get("/something-else")
權(quán)重定義了所有任務(wù)執(zhí)行的比例,所以這里 get_something 在負(fù)載測(cè)試中的頻率會(huì)是 get_something_else 的兩倍。
您也可以編寫嵌套的任務(wù),以執(zhí)行一系列連續(xù)的或有特殊順序的任務(wù)。 這使您可以通過多個(gè)請(qǐng)求來定義用戶操作流。 例如:class?UserBehavior(TaskSet):
@task
def?get_something(self):
self.client.get("/something")
@task
def?get_something_else(self):
self.client.get("/something-else")
@task
def?get_two_things(self):
self.get_something()
self.get_something_else()
TaskSet 類可以有選擇地聲明一個(gè) on_start 函數(shù),當(dāng)模擬用戶開始執(zhí)行該 TaskSet 類時(shí)會(huì)調(diào)用該函數(shù)。 在開始負(fù)載測(cè)試之前,可以使用它來登錄:class?UserBehavior(TaskSet):
def?on_start(self):
self.client.post("/login",?{
'username':?'foo',?'password':?'bar'
})
@task
def?get_something(self):
self.client.get("/something")
在本地運(yùn)行
要運(yùn)行 Locust,可以在與 locustfile.py 相同的目錄下運(yùn)行 locust 命令:$?locust?--host=http://localhost:5000
一旦命令運(yùn)行,Locust 啟動(dòng)一個(gè)本地 Web 服務(wù)器,您可以在瀏覽器中訪問:
選擇用戶數(shù)量和用戶產(chǎn)生速率后,您可以開始測(cè)試,這將顯示正在運(yùn)行的測(cè)試的實(shí)時(shí)視圖:
分布式運(yùn)行
在本地運(yùn)行對(duì)于開始使用 Locust 和基本的測(cè)試來說是好的,但是如果您只是從本地機(jī)器運(yùn)行它,大多數(shù)應(yīng)用程序?qū)⒉粫?huì)收到很大的負(fù)載。在分布式模式下運(yùn)行它幾乎是不可避免的。用戶可以輕松使用幾個(gè)云節(jié)點(diǎn)來增加負(fù)載。
安裝 Locust 并將 locustfile.py 移動(dòng)到所有節(jié)點(diǎn)后,可以啟動(dòng)“主”節(jié)點(diǎn):$?locust?--host=http://localhost:5000?--master
然后啟動(dòng)任何 slave 節(jié)點(diǎn),給他們對(duì)主節(jié)點(diǎn)的引用:$?locust?--host=http://localhost:5000?--slave\
--master-host=192.168.10.100
不足
盡管 Locust 很好用,但是仍有有一些缺點(diǎn)。 首先,對(duì)于測(cè)試結(jié)果來說,統(tǒng)計(jì)信息相當(dāng)糟糕(gen ben bu cun zai),或者說完全應(yīng)該做得更好(例如,沒有圖表,并且不能在沒有運(yùn)行多個(gè)測(cè)試的情況下將增加的故障率與較高的負(fù)載相關(guān)聯(lián))。其次,有時(shí)候除了錯(cuò)誤的狀態(tài)外,很難獲得錯(cuò)誤響應(yīng)的細(xì)節(jié)。 最后,做非 HTTP 或非 RESTful 請(qǐng)求的測(cè)試可能是會(huì)有一定復(fù)雜度的(盡管這很少見)。
優(yōu)點(diǎn)
總的來說,Locust 是一個(gè)非常有用的負(fù)載測(cè)試工具,特別是作為一個(gè)開源項(xiàng)目。 如果您的代碼庫是基于 Python 的,由于有機(jī)會(huì)從現(xiàn)有的代碼庫中獲取數(shù)據(jù),模型或業(yè)務(wù)邏輯,所以這自然是您可以使用的最舒服的工具,但即使您不使用 Python,也可以輕松整合它。
本文來自投稿,不代表訪得立場(chǎng),如若轉(zhuǎn)載,請(qǐng)注明出處:http://www.found5.com//view/1460.html
總結(jié)
以上是生活随笔為你收集整理的python模拟用户压力测试_Python 工具 Locust 进行负载测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java职业发展路线图_Java程序员如
- 下一篇: 怎么判断间隙过渡过盈配合_尺寸公差配合与