locust分布式時,需借助命令locust 一個一個啟動worker,在使用中有點繁瑣,
下面借助于多進程,按既定worker數(shù)量,一鍵啟動;
class WebsiteUser(HttpUser): tasks = [TaskSet] host = "https://www.baidu.com" wait_time = between(0, 0) def processFun(cmd): os.system(cmd) def start_by_process(tst_locust_file, slave_num, master_host='127.0.0.1', locust_web_port=8090, no_web=False, user_num=10, user_rate=1, result_log='result.log', run_log='run.log'): p_lst = [] if no_web: slave_cmd = f"locust -f {tst_locust_file} --worker --master-host={master_host}" master_cmd = f"locust -f {tst_locust_file} --headless -u {user_num} -r {user_rate} --master" else: slave_cmd = f"locust -f {tst_locust_file} --worker --master-host={master_host}" master_cmd = f"locust -f {tst_locust_file} --web-host {master_host} --web-port {locust_web_port} --master" master_cmd += f' --logfile {result_log} --loglevel INFO 1>{run_log} 2>&1' # 啟動master process_master = multiprocessing.Process(target=processFun, args=(master_cmd,)) process_master.start() p_lst.append(process_master) # 啟動 worker for index_num in range(slave_num): process = multiprocessing.Process(target=processFun, args=(slave_cmd,)) process.start() p_lst.append(process) # 阻塞等待 for process in p_lst: process.join() if __name__ == "__main__": tst_locust_path = 'wms/wms_test' slave_num = 3 # 計劃所啟動worker數(shù)量, 不可超過運行機的CPU數(shù)量 master_host = '127.0.0.1' master_host = '192.168.1.102' locust_web_port = 8099 # locust web頁面掛載端口 no_web = False tst_locust_file = os.path.basename(__file__) # 本腳本名 os.chdir(os.getcwd().replace(tst_locust_path.replace('/', os.sep), '')) tst_locust_file = f'{tst_locust_path}/{tst_locust_file}' start_by_process(tst_locust_file, slave_num, master_host, locust_web_port, no_web=no_web)
公告
浙公網(wǎng)安備 33010602011771號