Locust 斷言的實現?

yongheng999發表於2024-03-19

一、檢查點的方式有哪些:

主要是python 內建的assert 斷言(自動斷言)還有locust 中的catch_response 斷言(手動斷言);那麼這兩者之間有什麼區別呢?

其實主要區別在與生成locust 報告上面,手動斷言失敗,我們在locust上面可以清楚的看到報錯資訊,如果透過內建斷言,即使斷言失敗

我們也看不到錯誤資訊

  

二、**手動斷言**


使用self.client提供的catch_response=True`引數, 新增locust提供的ResponseContextManager類的上下文方法手動設定檢查點。
ResponseContextManager裡面的有兩個方法來宣告成功和失敗,分別是 success和 failure。其中failure方法需要我們傳入一個引數,內容就是失敗的原因。
程式碼實現
```
@task
def login(self):
with self.client.post('/login', json={'username': 'admin', 'password': '<PASSWORD>'},name='登入',catch_response=True)as response:
if json.loads(response.text)['status'] == 'success':
response.success()
else:
response.failure("登入失敗")
```

在報告上,這裡我們就能捕獲到錯誤:

如果透過下方的自動斷言,及時斷言失敗,我們的locust報告依舊不會顯示執行失敗,也不會有失敗提示


三、**自動斷言(assert)**


**Python**的 `assert`是用來檢查一個條件,如果它為真,就不做任何事。如果它為假,則會丟擲AssertError並且包含錯誤資訊,如果不做處理的話,如果斷言失敗的話,它不會繼續往下走,而且不會在我們的locust頁面裡面進行顯示

**assert** **2**==**0**,"2是不等於0的"

如果使用assert不想讓其報錯,想讓其往下走的話,可以使用

`try:`

```
try:
assert len(formhash)==9
except AssertionError
print("出錯了")
```

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

相關文章