若是對python測試開發相關技術感興趣的夥伴,歡迎加入測試開發學習交流QQ羣:696400122,不積跬步,無以致千里。
前面已經對市場上一些比較熱門的性能測試工具進行了對比,這裏主要介紹Locust性能測試框架的使用,若是你喜歡編碼,學習Python自動化測試的時候,同時又能學習一款性能測試工具,何樂而不爲呢。javascript
https://github.com/locustio/locust 13000+星html
Locust是易於使用的分佈式用戶負載測試工具。它旨在對網站(或其餘系統)進行負載測試,並肯定系統能夠處理多少個併發用戶。java
這個想法是,在測試期間,大量的模擬用戶會攻擊您的網站。您可使用Python代碼定義每一個用戶的行爲,而且能夠經過Web UI實時監視羣集過程。這將幫助您在容許真正的用戶進入以前測試測試並肯定代碼中的瓶頸。python
Locust徹底基於事件,所以能夠在一臺計算機上支持數千個併發用戶。與許多其餘基於事件的應用程序相比,它不使用回調。相反,它經過gevent使用輕量級進程。羣集您站點的每一個蝗蟲實際上都在其本身的進程中運行(正確地說,是Greenlet)。git
這使您能夠在Python中編寫很是有表現力的場景,而不會使回調複雜化代碼。————官方文檔:https://locust.iogithub
簡單來講:web
一、支持分佈式;flask
二、純python腳本,易上手;session
三、擴展性高;併發
四、單機支持高併發數;
五、WebUI可視化監控;
...
python 3.6.5 pip3 IDE:Pycharm2019.3
安裝locustio
pip install locustio
查看是否安裝成功:
若是指定最新版本能夠這樣操做:
pip3 install -i https://pypi.douban.com/simple/ locustio==0.14.6
gevent 是在python中實現協程的第三方庫,協程又叫微線程Coroutine。
flask 是python 的一個web開發框架。
requests 是python中可進行http(s)請求的操做庫。
msgpack 是一種快速、緊湊的二進制序列化格式,適用於相似Json的數據。
pyzmq 可用於Locust分佈運行在多個進程/機器上。
注意:版本version:0.11.0不支持between函數
locust框架裏面的請求跟python的requests庫使用方法基本一致,對應關係以下:
requests.get 對應client.get requests.post 對應client.post
Locust 不一樣於 jmeter 能夠用 GUI 來建立壓測腳本。Locust 須要本身編寫 python 腳本,壓測負載腳本主要包含兩個子類UserTask和WebsiteUser,一個用戶行爲類,用於定義用戶的具體行爲,一個設置用戶性能測試類。
兩個類分別繼承TaskSet和Httplocust類,擁有這兩個父類的公共屬性和方法。
# -*- coding: utf-8 -*- ''' @author: Leo @software: pycharm @file: demo_2.py @time: 2020/6/12 0012 23:12 @Desc: ''' __author__ = 'Leo' import os from locust import HttpLocust,TaskSet,task,between import urllib3 """ 使用Python3 requests發送HTTPS請求,已經關閉認證(verify=False)狀況下,控制檯會輸出如下錯誤, 忽略報錯的方法以下: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings """ urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) class Locust_baidu(TaskSet): """ 定義Locust_baidu類,繼承TaskSet類,用於定義測試任務 """ # @task()裝飾的方法爲一個事務。方法的參數用於指定該行爲的執行權重。參數越大每次被虛擬用戶執行的機率越高。若是不設置默認爲1,@task @task(1) def baidu(self): """ 建立baidu方法,訪問百度首頁,並校驗req返回值 task是任務裝飾器,參數爲運行次數的比例 即1表示一個Locust實例被挑選執行的權重,數值越大,執行頻率越高 """ req = self.client.get("/") # 訪問百度首頁,並獲取對應的req if req.status_code == 200: # 校驗返回的status_code,成功則會返回200 print("success") else: print("fail") class WebsiteUser(HttpLocust): """ HttpLocust類繼承Locust類,而Locust類繼承了HttpSession類,HttpSession使用率requests.Session,因此用client方法請求登陸後,會保存登陸狀態, 具備session記憶功能 """ # 指定定義用戶行爲的類,包含一組任務 task_set = Locust_baidu # 設置用戶執行任務之間等待的上下限,單位秒 wait_time = between(3,6) # # 等同於上面wait_time,單位毫秒 # min_wait = 3000 # max_wait = 6000 if __name__ == '__main__': os.system("locust -f demo_2.py --host=https://www.baidu.com")
運行結果:
能夠看出來,腳本主要包含兩個類,一個是WebsiteUser(繼承自HttpLocust,而HttpLocust繼承自Locust),另外一個是Locust_baidu(繼承自TaskSet)。因此Locust性能測試腳本中主要是靠TaskSet類和Locust類來實現全部的業務場景。
Locust類其實比如一羣蝗蟲,每一個蝗蟲就是一個Locust類的實例,而TaskSet類就是蝗蟲的大腦,控制着蝗蟲的行爲。也就是咱們測試中實際場景中的任務集合。
這就是Locust的最基本使用,感興趣的能夠了解一下。
若是對python測試開發相關技術感興趣的夥伴,歡迎加入測試開發學習交流QQ羣:696400122,不積跬步,無以致千里。