一、Locust工具介紹
1.概述
Locust是一款易於使用的分散式負載測試工具,完全基於事件,使用python開發,即一個locust節點也可以在一個程式中支援數千併發使用者,不使用回撥,通過gevent使用輕量級過程(即在自己的程式內執行)。
2.常見效能測試工具比較
3.環境搭建
Python3.7.9
原始碼安裝:下載原始碼https://github.com/locustio/locust,進入資料夾執行安裝命令:python setup.py install
pip安裝:pip install locust==1.4.3
二、Locust常用類和方法
三、Locust常用參
四、案例
1.引數化
# -*- coding: utf-8 -*- import os,random from locust import TaskSet, task,HttpUser, between #任務類 class Testlocust(TaskSet): def on_start(self): self.login_headers={'x-client-id': 'xxxxxx'} #標頭檔案 self.data=[ { "account_name": "登入賬號1", "user_name": "登入賬號1", "hashed_password": "登入密碼1" }, { "account_name": "登入賬號2", "user_name": "登入賬號2", "hashed_password": "登入密碼2" }, { "account_name": "登入賬號3", "user_name": "登入賬號3", "hashed_password": "登入密碼3" } ] #登入賬號密碼 print("------on start------") @task() def userlogin(self): r = self.client.post(url='/v1/auth/users/login', headers=self.login_headers,json=random.choice(self.data),name='登入',verify=False) #使用choice方法引數化隨機登入 assert r.status_code == 200 and r.json()['status']==0 #登入斷言 def on_stop(self): print("------on stop------") #使用者類 class WebsiteUser(HttpUser): #locust1.0版本以前是HttpLocust tasks = [Testlocust] #locust1.0版本以前是task_set=Testlocust host = 'https://xxxxxx' #被測主機地址 wait_time = between(min_wait=1,max_wait=5) #任務之間的等待時間 if __name__ == "__main__": os.system("locust -f locust_XX.py") #執行locust指令碼
2.關聯
# -*- coding: utf-8 -*- import os,requests from locust import TaskSet, task,HttpUser, between #任務類 class Testlocust(TaskSet): def on_start(self): print("------on start------") access_token = self.userlogin() #返回登入token self.headers = {} #定義headers self.headers['x-api-key'] = 'fZkQSHC1dp2s0tL21EMtaNX3UjF7P6L9' #新增headers值 self.headers['Authorization'] = 'Bearer ' + access_token self.headers['x-key-hash'] = '1607675936446;abcdefg;bca1ef2b5835e454a15929f7ce9cb5d7ebaf580377624019002' self.headers['Content-Type'] = 'application/json' self.params = {"name": "CDR", "page": "1", "size": "10", "series": "CDR80"} #查詢介面引數 def userlogin(self): #登入方法 login_url = 'https://xxxxxx/v1/auth/users/login' #登入url data = { "account_name": "賬號1", "user_name": "賬號1", "hashed_password": "密碼1" } #登入賬號密碼 login_headers = {'x-client-id': '46bf882df2959ea2'} r = requests.request('POST', url=login_url, headers=login_headers, json=data) #登入 return r.json()['access_token'] #返回登入token @task() def search(self): #查詢裝置資訊 r = self.client.get(url='/v1/assets/device/search', headers=self.headers,params=self.params, name='查詢', verify=False) #查詢 assert r.status_code == 200 and r.json()['code'] == 0 #結果斷言 #使用者類 class WebsiteUser(HttpUser): #locust1.0版本以前是HttpLocust tasks = [Testlocust] #locust1.0版本以前是task_set=Testlocust host = 'https://xxxxxx.com' #被測主機地址 wait_time = between(min_wait=1,max_wait=5) #任務之間的等待時間 if __name__ == "__main__": os.system("locust -f locust_XX.py") #執行引數