1. 程式人生 > 實用技巧 >locust效能測試02—檢查點

locust效能測試02—檢查點

前言

上一篇文章已經簡單的介紹了locust的基本使用和檔案結構的組成,以及報告如何檢視。

那麼這篇文章,就來說說怎麼樣給locust設定檢查點。

和jmeter一樣,locust的效能測試也有檢查點。

檢查點

locust預設情況下會使用預設的檢查點,比如當介面超時、連結失敗等原因是,會自動判斷這條失敗了。

但是這好像不太能滿足我們的需求,我們需要的是能夠自主的控制這個是否失敗了,就像jmeter一樣提供了豐富的斷言元件。我們可以自由的選擇一個元件或多個元件進行檢查點的設定。

讓我們看看怎麼樣給locust設定檢查點吧,回到我們上一篇編寫的程式碼中:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from locust import HttpUser, task, between


class DemoTest(HttpUser):
    host = 'https://www.baidu.com'
    wait_time = between(2, 15)

    def on_start(self):
        self.client.get('/')

    @task
    def search_locust(self):
        self.client.get('/s?ie=utf-8&wd=locust')

要在這個實現一個檢查點我們只需要把self.client方法改造一下就好了,接下來我們開始改造。

怎麼改造呢,首先self.client提供了一個catch_response=True引數,把這個引數新增在請求中我們就可以使用locust提供的ResponseContextManager類的上下文方法來手動設定檢查點。ResponseContextManager裡面的有兩個方法來宣告成功和失敗,分別是successfailure。其中failure方法需要我們傳入一個引數,內容就是失敗的原因。

既然是上下文,我們就應該用with表示式來實現這個功能。我們先來簡單的實現一下吧:

with self.client.get('/', catch_response=True) as r: # 傳入catch_response引數,值為True
    if r.status_code == 200:
        r.success()
    else:
        r.failure("執行失敗了哦哦哦")

就這樣實現了一個檢查點的功能當然你可以自己定義一個更復雜的判斷。

改造程式碼

我們把上一篇的程式碼改造一下

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from requests import codes
from locust import HttpUser, task, between


class DemoTest(HttpUser):
    host = 'https://www.baidu.com'
    wait_time = between(2, 15)

    def on_start(self):
        with self.client.get('/', catch_response=True) as r:
            if r.status_code == codes.bad:
                r.success()
            else:
                r.failure("請求百度首頁失敗了哦哦")

    @task
    def search_locust(self):
        with self.client.get('/s?ie=utf-8&wd=locust', catch_response=True) as r:
            if r.status_code == codes.ok:
                r.success()
            else:
                r.failure("搜尋locust失敗了哦哦")

其中我們把on_start的判斷條件故意設定成失敗的,來驗證我們編寫的檢查點是否真實有效。

執行分析

我們啟動locust執行一下。

D:\VScode\locust-demo>locust -f demo.py
[2020-10-14 21:52:41,782] LAPTOP-5ELHTT45/WARNING/locust.main: System open file limit setting is not high enough for load testing, and the OS wouldnt allow 
locust to increase it by itself. See https://docs.locust.io/en/stable/installation.html#increasing-maximum-number-of-open-files-limit for more info.        
[2020-10-14 21:52:41,783] LAPTOP-5ELHTT45/INFO/locust.main: Starting web interface at http://:8089
[2020-10-14 21:52:41,789] LAPTOP-5ELHTT45/INFO/locust.main: Starting Locust 1.1.1

我這次設定了10個使用者進行測試。

  • 類似jmeter的聚合報告

可以看到報告裡面箭頭所指的/方法10次全部都失敗了,因為我們在設定檢查點的時候預先設定了一個錯誤的結果,所以就失敗了。

  • 趨勢圖

再看看趨勢圖可以看到的執行了大約15秒錯誤的就執行完了,因為我們的on_start請求只有10次。紅顏色的線表示的是我們的失敗的請求。

  • 失敗的請求

可以看到裡面詳細的說明了失敗的請求的次數、方法、和名稱以及我們定義的內容。我們在程式碼定義的錯誤訊息是請求百度首頁失敗了哦哦,所以這裡顯示也是這個內容了(滑稽)。

好了說到這裡,檢查點的內容就這麼些了,其實也並不複雜,locust這個工具還是值得學習的,簡單又實用。

如果你有其他更好的玩法,歡迎留言。