Locust效能測試設定持續時間(web-UI)

波音666發表於2024-04-30

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秒後停止壓測,完成。

相關文章