<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python 性能測試工具 Locust 極簡入門

          共 2936字,需瀏覽 6分鐘

           ·

          2021-05-11 19:41

          作者:dongfanger
          來源:dongfanger
          Locust是一款Python技術棧的開源的性能測試工具。Locust直譯為蝗蟲,寓意著它能產(chǎn)生蝗蟲般成千上萬的并發(fā)用戶:
          Locust并不小眾,從它Github的Star數(shù)量就可見一斑:
          截止文章寫作時,一共15951Star。
          Locust生態(tài)良好,它已在多家外企(包括世界500強)投入使用:
          如此看來,Locust是非常值得學習和掌握的一款工具。
          Python的魔力在于化繁為簡,基于Python的Locust也能給仍然困惑于性能測試的我們帶來啟發(fā)。

          Locust特點

          • 以純Python方式編寫用戶腳本,提供極大自由度。

          • 用戶腳本可以串行方式編寫,Locust會通過輕量級進程/協(xié)程產(chǎn)生并發(fā),無需自己做并發(fā)編程。

          • 并發(fā)量大,借助于gevent庫,Locust能產(chǎn)生成千上萬并發(fā)請求。

          • 開銷小,Locust用戶運行時開銷很小。

          • 良好的Web UI對性能結果實時監(jiān)測。

          • 能測任何系統(tǒng)任何協(xié)議,只需要寫個client即可。

          • 開放REST API,盡情發(fā)揮。

          安裝Locust

          需要Python版本3.6及以上。
          執(zhí)行pip命令:
          $ pip install locust
          驗證安裝成功:
          $ locust -V
          安裝時會一并安裝依賴庫:
          Installing collected packages: Werkzeug, pywin32, zope.event, greenlet, gevent, geventhttpclient, itsdangerous, flask, Flask-BasicAuth, ConfigArgParse, pyzmq, psutil, locust

          能看出來flask為Locust提供了Web功能。

          快速上手

          使用Locust一般按照以下步驟進行:
          1. 編寫Python用戶腳本。

          2. 使用locust命令執(zhí)行性能測試。

          3. (可選)通過Web界面監(jiān)測結果。

          示例代碼如下,新建locustfile.py文件:
          import time
          from locust import HttpUser, task, between

          class QuickstartUser(HttpUser):
          wait_time = between(1, 2.5)

          @task
          def hello_world(self):
          self.client.get("/hello")
          self.client.get("/world")

          @task(3)
          def view_items(self):
          for item_id in range(10):
          self.client.get(f"/item?id={item_id}", name="/item")
          time.sleep(1)

          def on_start(self):
          self.client.post("/login", json={"username":"foo", "password":"bar"})
          路徑切換到locustfile.py文件所在目錄,執(zhí)行命令:
          $ locust
          也可以通過-f指定某個目錄文件:
          $ locust -f locust_files/my_locust_file.py
          運行后,打開http://127.0.0.1:8089看到Web界面:
          填寫信息后,就能開始壓測了。Web界面提供了結果統(tǒng)計數(shù)據(jù):
          和性能指標走勢圖:

          腳本解析

          示例腳本解析如下:
          # Locust用戶腳本就是Python模塊
          import time
          from locust import HttpUser, task, between

          # 類繼承自HttpUser
          class QuickstartUser(HttpUser):
          # 每個模擬用戶等待1~2.5秒
          wait_time = between(1, 2.5)

          # 被@task裝飾的才會并發(fā)執(zhí)行
          @task
          def hello_world(self):
          # client屬性是HttpSession實例,用來發(fā)送HTTP請求
          self.client.get("/hello")
          self.client.get("/world")

          # 每個類只會有一個task被選中執(zhí)行
          # 3代表weight權重
          # 權重越大越容易被選中執(zhí)行
          # view_items比hello_wolrd多3倍概率被選中執(zhí)行
          @task(3)
          def view_items(self):
          for item_id in range(10):
          # name參數(shù)作用是把統(tǒng)計結果按同一名稱進行分組
          # 這里防止URL參數(shù)不同會產(chǎn)生10個不同記錄不便于觀察
          # 把10個匯總成1個"/item"記錄
          self.client.get(f"/item?id={item_id}", name="/item")
          time.sleep(1)

          # 每個模擬用戶開始運行時都會執(zhí)行
          def on_start(self):
          self.client.post("/login", json={"username":"foo", "password":"bar"})

          小結

          本文先了解了Locust的背景和生態(tài),它是值得學習的,對于Python技術棧來說更加如此。接著介紹了使用pip命令安裝Locust,其中發(fā)現(xiàn)順帶安裝了flask,Locust的Web功能是flask提供的
          然后給出了一段示例代碼,按照步驟上手Locust。最后對示例代碼進行了解析,淺嘗輒止。locustfile實際上該怎么寫呢?
          參考資料:
          https://locust.io/
          https://docs.locust.io/en/stable/
          Python貓技術交流群開放啦!群里既有國內一二線大廠在職員工,也有國內外高校在讀學生,既有十多年碼齡的編程老鳥,也有中小學剛剛入門的新人,學習氛圍良好!想入群的同學,請在公號內回復『交流群』,獲取貓哥的微信(謝絕廣告黨,非誠勿擾!)~


          還不過癮?試試它們




          用 Python 實現(xiàn)簡易 Web 服務器

          2021年,你應該知道的Python打包指南

          教你用 Python 實現(xiàn) HashMap 數(shù)據(jù)結構

          Python 中更優(yōu)雅的日志記錄方案

          如何用 Python 操作 Docker?

          在手機上 Python 編程,可以試試它!


          如果你覺得本文有幫助
          請慷慨分享點贊,感謝啦
          瀏覽 33
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品国产精品国产专区不片 | av电影天堂在线 AV黄色在线网站 av麻豆成人电影 | 2020天天日天天操 | 久久亚洲AV成人无码国产精品 | 操妞视频在线观看免费网站 |