jemter的執行緒組可以設定排程器的持續時間,這樣如壓測1分鐘,半小時,一個小時就非常方便
但我們想要設定locust持續執行時間,web-UI 頁面是不支援的。解決辦法有2個,主要講第二個:
1、透過命令列的方式來啟動,我們可以配置locust啟動配置引數,參考 https://blog.csdn.net/weixin_45805339/article/details/121167157 https://blog.csdn.net/arron_12/article/details/130086390
核心配置如下,然後透過命令列 後臺執行,時間到了停止。
locustfile = LocustScripts/taskCenter/api_xxx_query.py #功能指令碼檔案路徑 logfile = Logs/infoLog.log # 日誌檔案路徑 loglevel = debug # 日誌等級 web-port = 8089 #web頁面埠,設定預設時間可忽略該埠 host = https://xxxtest.com #待測伺服器地址 headless = true # # 禁用web介面,並立即開始測試。使用-u和-t來控制使用者數量和執行時間 user = 1 # 併發使用者的峰值數 spawn-rate = 1 # 生成使用者的速率(使用者每秒)。主要與-headless或-autostart一起使用 run-time = 10s # locust執行時間 (300s、20m、3h、1h30m)
2、那麼我們想在web-UI上點,又不想整配置,還想設定持續時間,怎麼辦?(我喜歡)
整個思路:首先需要一個計時器,簡單點,讀秒的那種
# 秒錶計時,到時間返回t1 def time_meter(sec): t1=0 while True: startTime=time.time() print(startTime) print('開始') while True: t1=round(time.time()-startTime,0) print('計時:' + str(t1) + '秒') time.sleep(1) if t1==sec: print('我要整點啥') break break return t1 print((time_meter(20)))
幾行拙劣的程式碼搞定。
執行結果:
然後整點啥呢?到時間停止執行locust,檢視api文件,get http://localhost:8089/stop 就能停止
# 秒錶計時,到時間返回t1 def time_meter(sec): t1=0 while True: startTime=time.time() print(startTime) print('開始') while True: t1=round(time.time()-startTime,0) print('計時:' + str(t1) + '秒') time.sleep(1) if t1==sec: res = requests.get('http://localhost:8089/stop') break break return t1 print((time_meter(5)))
最後為了簡單的操作,當然是讓我們的老朋友tkinter來包裝下
class locust_Program(Frame): def __init__(self,master=None): super().__init__(master) self.master=master self.pack() self.createWidget() def createWidget(self): #標籤:locust壓測時間 self.lable_title=Label(self,text='locust壓測時間',bg="light gray",fg='black',anchor='w',width=40,font=('宋體',10,'bold')) self.lable_title.grid(row=0,column=0,sticky="w",columnspan=4,padx=5,pady=5) self.lable_stamp = Label(self, text='設定壓測時間/秒') self.lable_stamp.grid(row=3, column=0) self.lable_res = Label(self, text='執行結果') self.lable_res.grid(row=3, column=3) self.inputValue=StringVar() self.entry_res=Entry(self,textvariable=self.inputValue,width=10) self.entry_res.grid(row=4, column=0,padx=5,pady=5) self.btn01 = Button(self, text='開始', bg='green',fg='white',width=10,command=self.beginTime) self.btn01.grid(row=4, column=1) self.result_time=Text(self,width=15,height=2) # self.result_time.insert(2.3, f'請稍等{self.inputValue.get()}秒') self.result_time.grid(row=4, column=3,padx=5,pady=5) def beginTime(self): result=0 try: sec=self.inputValue.get() result = self.time_meter(sec) except: messagebox.showerror(title='錯誤',message='請輸入數字!') self.result_time.delete(1.0, END) self.result_time.insert(INSERT,'壓測完成,已持續壓測'+str(result)+'秒') # 計時器 def time_meter(self,second): t1=0 while True: startTime=time.time() print(startTime) print('開始') second=float(second) while True: t1=round(time.time()-startTime,0) print('計時:' + str(t1) + '秒') time.sleep(1) try: if t1==second: res = requests.get('http://localhost:8089/stop') break except Exception as error: messagebox.showerror(title='錯誤', message=error) break break return t1 root=Tk() root.title('locust壓測小程式') root.geometry('350x150+500+150') app = locust_Program(master=root) root.mainloop()
執行小程式
開始使用,設定壓測時間(手點的慢,可以多設定1秒,老夫十年功能手速點點點,無視那幾毫秒),點選開始。設定locust併發數,啟動使用者數,Start swarming
20秒後停止壓測,完成。