成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Locust性能測試工具核心技術@task和@events

開發 開發工具
Tasks和Events是Locust性能測試工具的核心技術,有了它們,Locust才能稱得上是一個性能工具。

[[403128]]

本文轉載自微信公眾號「dongfanger」,作者dongfanger。轉載本文請聯系dongfanger公眾號。

Tasks和Events是Locust性能測試工具的核心技術,有了它們,Locust才能稱得上是一個性能工具。

Tasks

從上篇文章知道,locustfile里面必須要有一個類,繼承User類,當性能測試開始后,會產生一個User類實例,這就是常說的模擬用戶。這些用戶會選擇task執行,休眠一會,再選擇新的task,不斷迭代。

task是Python中的可調用對象,它是一項任務,對于Web系統來說,可以是登錄、查詢、下訂單、支付等等。

@task裝飾器

@task是定義task最簡單直接的方式,比如:

  1. from locust import User, task, constant 
  2.  
  3. class MyUser(User): 
  4.     wait_time = constant(1) 
  5.  
  6.     @task 
  7.     def my_task(self): 
  8.         print("User instance (%r) executing my_task" % self) 

@task有一個可選參數,用來設置task的選擇權重,比如:

  1. from locust import User, task, between 
  2.  
  3. class MyUser(User): 
  4.     wait_time = between(5, 15) 
  5.  
  6.     @task(3) 
  7.     def task1(self): 
  8.         pass 
  9.  
  10.     @task(6) 
  11.     def task2(self): 
  12.         pass 

task2比task1被選擇的可能性大兩倍。

tasks屬性

除了@task裝飾器,還可以設置User類的tasks屬性來定義任務,比如:

  1. from locust import User, constant 
  2.  
  3. def my_task(user): 
  4.     pass 
  5.  
  6. class MyUser(User): 
  7.     tasks = [my_task] 
  8.     wait_time = constant(1) 

注意,my_task()函數有一個參數,它是User類的實例。

tasks可以是一個列表:

  1. tasks = [my_task1, my_task2, my_task3] 

Locust會使用Python中的random.choice()從里面隨機選取。

tasks也可以是一個字典:

  1. {my_task: 3, another_task: 1} 

后面的int型鍵值代表的是被選擇權重,這個字典等價于列表:

  1. [my_task, my_task, my_task, another_task] 

@tag裝飾器

@tag用來打標記,在運行時選擇哪些task執行,哪些task不執行。比如:

  1. class MyUser(User): 
  2.     wait_time = constant(1) 
  3.  
  4.     @tag('tag1'
  5.     @task 
  6.     def task1(self): 
  7.         pass 
  8.  
  9.     @tag('tag1''tag2'
  10.     @task 
  11.     def task2(self): 
  12.         pass 
  13.  
  14.     @tag('tag3'
  15.     @task 
  16.     def task3(self): 
  17.         pass 
  18.  
  19.     @task 
  20.     def task4(self): 
  21.         pass 
  • 如果使用--tags tag1,那么只有task1和task2會被選擇。
  • 如果使用--tags tag2 tag3,那么只有task2和task3會被選擇。
  • 如果使用--exclude-tags tag3,那么只有task1、task2和task4會被選擇。

注意,exclude的優先級更高,如果某個tag既包括又排除,那么會被排除。

Events

@task定義了性能測試的執行動作,@events作為補充,定義了測試開始前和測試結束后的處理。

注意,每個模擬用戶開始和結束的處理是使用的User類的on_start()和on_stop()方法。

test_start和test_stop

測試開始前和測試結束后觸發。示例:

  1. from locust import events 
  2.  
  3. @events.test_start.add_listener 
  4. def on_test_start(environment, **kwargs): 
  5.     print("A new test is starting"
  6.  
  7. @events.test_stop.add_listener 
  8. def on_test_stop(environment, **kwargs): 
  9.     print("A new test is ending"

分布式執行時,它們只會在master節點生效。

init

init和test_start不同,它會在每個Locust進程開始時觸發,分布式執行時,每個節點(worker進程)都會生效。

  1. from locust import events 
  2. from locust.runners import MasterRunner 
  3.  
  4. @events.init.add_listener 
  5. def on_locust_init(environment, **kwargs): 
  6.     if isinstance(environment.runner, MasterRunner): 
  7.         print("I'm on master node"
  8.     else
  9.         print("I'm on a worker or standalone node"

Events是一項hook技術,在學習Locust高級用法時再做進一步介紹。

Locust項目結構

官方建議如下:

common/

__init__.py

auth.py

config.py

locustfile.py或者locustfiles/

api.py

website.py

requirements.txt

FastHttpUser

從上篇文章可以知道,HttpUser類比User類更常用,它的client屬性是HttpSession類(requests.Session子類)的一個實例,可以使用requests發HTTP請求:

  1. # 使用HttpUser 
  2. from locust import HttpUser,task,constant 
  3.  
  4.  
  5. class MyUser(User): 
  6.     wait_time = constant(1) 
  7.      
  8.     @task 
  9.     def my_task1(self): 
  10.         with self.client.get("https://www.baidu.com/", catch_response=Trueas res: 
  11.             if res.status_code == 200: 
  12.                 print("成功"
  13.             else
  14.                 print("失敗"

但是requests性能是不太好的,如果要產生更高的壓力,建議使用FastHttpUser,性能可以提升5到6倍:

  1. # 使用FastHttpUser 
  2. from locust import task, constant 
  3. from locust.contrib.fasthttp import FastHttpUser 
  4.  
  5.  
  6. class MyUser(FastHttpUser): 
  7.     wait_time = constant(1) 
  8.  
  9.     @task 
  10.     def my_task(self): 
  11.         with self.client.get("https://www.baidu.com/", catch_response=Trueas response: 
  12.             if response.status_code == 200: 
  13.                 print("成功"
  14.             else
  15.                 print("失敗"

由于它們的API不一樣,都有各自的適用場景,所以FastHttpUser不能完全替代HttpUser。

小結

本文嚴格來說是上篇文章《locustfile中的User類和HttpUser類》的下篇,介紹了核心技術Tasks和Events,并給出了官方推薦的項目結構,最后介紹了比HttpUser性能更好的FastHttpUser,如果想要更多的并發,可以考慮使用后者。經過這兩篇文章的學習,已經可以開始動手實踐使用Locust進行性能測試了。如果使用locust命令啟動后,無法打開網頁,可以試試加上參數:locust --web-host="127.0.0.1"。

參考資料:

https://zhuanlan.zhihu.com/p/118470760

https://docs.locust.io/en/stable/writing-a-locustfile.html#tasks

https://www.axihe.com/tools/locust/increase-performance.html

 

https://blog.csdn.net/u012002125/article/details/113363768

 

責任編輯:武曉燕 來源: dongfanger
相關推薦

2021-05-07 07:27:51

Python測試工具

2010-06-07 14:42:47

Linux性能測試工具

2012-08-01 10:50:48

性能測試測試架構

2010-06-04 16:07:09

Linux 性能測試工

2024-08-23 11:38:05

2025-01-27 11:52:23

2025-01-26 11:05:23

2010-06-13 17:16:15

Linux性能測試工具

2024-03-06 18:09:06

Linux性能工具

2010-06-04 09:12:23

Linux性能測試工具

2016-09-14 11:09:06

Web工具運維

2010-10-15 09:37:14

MySQL性能測試

2012-12-24 22:54:31

2010-06-10 17:37:08

Linux 性能測試工

2017-09-19 18:34:16

Mysql數據庫性能測試

2022-05-07 14:31:46

物聯網

2023-07-13 23:21:02

2021-05-17 10:44:24

Python 工具編程語言

2011-04-07 13:53:25

Web工具

2009-06-26 10:22:58

JSF測試
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人免费视频网站视频社区 | 国产成人精品一区二区三区 | 亚洲3级 | 亚洲精品一区二区在线观看 | 国产成人精品一区二区三 | 国产亚洲精品美女久久久久久久久久 | 久久伊人影院 | 欧美日在线 | 有码一区 | 国产精品黄 | 91文字幕巨乱亚洲香蕉 | 免费国产一区二区 | 国产成人亚洲精品 | 男人的天堂久久 | 欧美乱码精品一区二区三区 | 男女在线免费观看 | 男女羞羞在线观看 | 国产精品久久久久aaaa九色 | 黄网站在线观看 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 夜夜骑首页 | 亚洲一区二区三区在线 | 一级a爱片性色毛片免费 | 国产一区二区在线91 | 国产精品无码久久久久 | 女人夜夜春 | 91精品一区二区三区久久久久久 | 国产69精品久久久久777 | 一区二区三区精品视频 | 国产精品一区在线 | 一级毛片在线看 | 一久久久 | 天堂av在线影院 | 国产一区三区在线 | 一二三区视频 | 国产精品成人一区二区三区吃奶 | 97免费在线观看视频 | 亚洲午夜精品久久久久久app | 日本不卡高字幕在线2019 | 国产乱码精品一区二区三区忘忧草 | 我要看一级片 |