接口測試-工作心得記錄八(使用locust庫書寫接口併發)

年前功能不提測,這幾天看了pytest強大是強大,但是不知道怎麼用和怎麼替換之前用unittest寫的case,我最近在想想多看看文檔找找思路。換個腦子就把之前想寫的接口併發locust寫的東西拿出來寫一個,目前還不到以後什麼時候能用到就拿出來直接改改就用了。接口性能本身也是一個非常大的概念,太複雜了,各種參數的意義,怎麼調整等等都需要在實踐中慢慢體會,雖然目前工作還沒有這個條件(我司不允許線上做接口併發的,只能在測試環境自己寫的玩練練手),我現在主要也就寫了起壓的部分。

1.多接口併發:




這是一個標準的官方文檔書寫的格式,也不復雜。簡單說一下我的理解,WebsiteUser類繼承HtppLocust類,主要是設置併發併發間隔,通過屬性min_wait和max_wait兩個屬性,

task_set屬性用於指向繼承TaskSet類的類名,host表示接口的域名。

LocustTask繼承TaskSet類用於誰知併發行爲,比如說併發什麼接口,其中on_start()方法只運行一個用於初始化(我覺得和unittest的setUp()用法一樣用於準備併發環境),最常用的就是請求登錄接口獲取登錄態(task_set類調用了requests.session所以是session級別的,後面請求都是自帶登錄態的)。下面2個方法就是要併發的接口,裝飾器@task用於設置接口權重,畢竟併發也是要模擬用戶行爲,我的想法還是要根據服務端請求的具體情況設置權重併發纔有意義。

通過終端運行結果如圖:





命令行 -f 表示要運行.py文件,--no-web表示不是web啓動,-r表示併發用戶數,-n表示併發數(這個併發數我還是不是理解怎麼算的,我回頭在看看文檔,看看怎麼計算的)。

運行結果就是這樣,結果裏面還有很多指標我一個個想通了在另寫一篇。

2.接口循環併發


共享的數據用列表保存(思路來及debugtalk的博客,後面我會附上他的博客地址),我寫了4個接口和對應接口的請求參數(其實我覺得這個也不算共享數據,只能想到這個場景),通過索引取值。這裏面有兩個點我想說說,第一個就是在WebsiteUser類裏面定義的變量在UserBehavior類中想調用就需要self.locust.去弄。第二個index判斷當索引越界了,終端運行的時候會有提示報錯但是不會停止不知道爲什麼。運行結果如圖:



2.數據唯一不循環取:

數據一樣但是調用時候用完了就去除,用的隊列(思路也是debugtalk博客有書寫,例子也是登錄接口不同的賬號,其他場景我目前沒有想到),隊列蠻複雜,我也是寫的時候瞭解一點點,首先先往隊列(最普通的先進先出,其實先進先出還是後進先出在這個場景都是可以的)裏面放數據,然後get一個隊列少一個數據,這樣保證數據唯一性不循環取。如圖:

賬號循環登錄的場景,那麼肯定要mobile是連續的,這個通過號碼遞增去取,要不然還要定義一個列表手寫數據(想想都恐怖),測試環境直接orm在user表在一個號段區間直接creat了50條數據,代碼如圖:



寫入結果如圖:


最後就是併發結果如圖:


上面切圖表示mobile字段循環取值且沒有重複,感覺寫寫蠻有意思的,下面附上參考的博客:

http://debugtalk.com/tags/Locust/

locust的官方文檔大家也可以看看,debugtalk寫的很讚的給了很多思路,最近看的很多,覺得越來越多的QA真的好厲害,也發現QA路越來越寬了,想想以後AI和大數據方向,還是覺得蠻開心,大概這些吧,我準備後面再看看pytest,想想怎麼把接口數據維護這塊弄一下。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章