您当前的位置:首页 >> 工业物联
工业物联

稳定性测试工具Locust

发布时间:2025-08-10

ter. Defaults to * (all available interfaces). ----master-bind-port=MASTER_BIND_PORT Port that locust master should bind to. Only used when running with ----master. Defaults to 5557. Note that Locust will also use this port + 1, so by default the master node will bind to 5557 and 5558. ----no-web Disable the web interface, and instead start running the test immediately. Requires -c and -r to be specified. -c NUM_CLIENTS, ----clients=NUM_CLIENTS Number of concurrent clients. Only used together with ----no-web -r HATCH_RATE, ----hatch-rate=HATCH_RATE The rate per second in which clients are spawned. Only used together with ----no-web -n NUM_requestS, ----num-request=NUM_REQUESTS Number of requests to perform. Only used together with ----no-web -L LOGLEVEL, ----loglevel=LOGLEVEL Choose between DEBUG/INFO/WARNING/ERROR/CRITICAL. Default is INFO. ----logfile=LOGFILE Path to log file. If not set, log will go to stdout/stderr ----print-stats Print stats in the console ----only-summary Only print the summary stats -l, ----list Show list of possible locust classes and exit ----show-task-ratio print table of the locust classes' task execution ratio ----show-task-ratio-JSON print json data of the locust classes' task execution ratio -V, ----version show program's version number and exit

仅合值明确指出:

-h, ----help 拍照协助-H HOST, ----host=HOST 暂定被飞行测到试的伺服机内,运用于以XML:----web-host=WEB_HOST 暂定运转 Locust Web 关键词的伺服机内,转换为空 ''。-P PORT, ----port=PORT, ----web-port=PORT 暂定 ----web-host 的端口,转换是8089-f LOCUSTFILE, ----locustfile=LOCUSTFILE 暂定运转 Locust 精度飞行测到试机密文件,转换为: locustfile.py----csv=CSVFILEBASE, ----csv-base-name=CSVFILEBASE 以CSVXML存储举例来说劝说飞行测到试仅据。----master Locust 分布式方式则也适用,举例来说路由为 master 路由。----slave Locust 分布式方式则也适用,举例来说路由为 slave 路由。----master-host=MASTER_HOST 分布式方式则也运转,新设 master 路由的伺服机内或 IP 电话号码,只在与 ----slave 路由一起运转时适用,转换为:127.0.0.1.----master-port=MASTER_PORT 分布式方式则也运转, 新设 master 路由的端口号,只在与 ----slave 路由一起运转时适用,转换为:5557。同样,slave 路由也将连接到这个端口+1 上的 master 路由。----master-bind-host=MASTER_BIND_HOST Interfaces (hostname, ip) that locust master should bind to. Only used when running with ----master. Defaults to * (all available interfaces).----master-bind-port=MASTER_BIND_PORT Port that locust master should bind to. Only used when running with ----master. Defaults to 5557. Note that Locust will also use this port + 1, so by default the master node will bind to 5557 and 5558.----expect-slaves=EXPECT_SLAVES How many slaves master should expect to connect before starting the test (only when ----no-web used).----no-web no-web 方式则也运转飞行测到试,无需 -c 和 -r 辅以适用.-c NUM_CLIENTS, ----clients=NUM_CLIENTS 暂定比方说普通用户仅,关键作用以 ----no-web 方式则也。-r HATCH_RATE, ----hatch-rate=HATCH_RATE 暂定每秒钟开启的普通用户仅,关键作用以 ----no-web 方式则也。-t RUN_TIME, ----run-time=RUN_TIME 新设运转小时, 例如: (300s, 20m, 3h, 1h30m). 关键作用以 ----no-web 方式则也。-L LOGLEVEL, ----loglevel=LOGLEVEL 选择 log 级别(DEBUG/INFO/WARNING/ERROR/CRITICAL). 转换是 INFO.----logfile=LOGFILE 存档机密文件路径。如果从未新设,存档将去 stdout/stderr----print-stats 在高度集中台里面复印机仅据----only-summary 只复印机内容可统计资料----no-reset-stats Do not reset statistics once hatching has been completed。-l, ----list 推测到飞行测到试类, 固定式 -f 仅合值适用----show-task-ratio 复印机 locust 飞行测到试类的护航指派比重,辅以 -f 仅合值适用.----show-task-ratio-json 以 json XML复印机 locust 飞行测到试类的护航指派比重,辅以 -f 仅合值适用.-V, ----version 拍照举例来说 Locust 工具的版本.

4、Locust主要由前面的几个纳构成:

1) gevent

gevent是一种基于协程的Python互联网纳,它请同样Greenlet备有的,封配有了libevent两件事件周而复始的低层同步API。

2) flask

Python编著的轻量级Web运用于框架。

3) requests

Python Http纳

4) msgpack-python

MessagePack是一种快速、紧凑的二进制数据流XML,仅限于以完全相同JSON的仅据XML。msgpack-python主要备有MessagePack仅据数据流及诬蔑数据流的分析方法。

5) six

Python2和3向上兼容纳,用来封配有Python2和Python3二者之间的差异性

6) pyzmq

pyzmq是zeromq(一种无线通信缓冲区)的Python启动时,主要用来实现Locust的分布式方式则也运转

当我们在安配有 Locust 时,它才会探测到我们举例来说的 Python 生存环境否已经安配有了这些纳,如果从未安配有,它才会可先把这些纳一一配有上。并且对这些纳版本有敦促,有些是必须等同于某版本,有些是相等某版本。我们也可以两件事可先把这些纳全部按敦促配有好,日后安配有Locust时就才会快上许多。

三、编著因特网压到测到剧本机密文件locustfile.py

1 from locust import HttpLocust, TaskSet, task 2 3 class ScriptTasks(TaskSet): 4 def on_start(self): 5 self.client.post("/login", { 6 "username": "test", 7 "password": "123456" 8 }) 9 10 @task(2)11 def index(self):12 self.client.get("/")13 14 @task(1)15 def about(self):16 self.client.get("/about/")17 18 @task(1)19 def demo(self):20 payload={}21 headers={}22 self.client.post("/demo/",data=payload, headers=headers)23 24 class WebsiteUser(HttpLocust):25 task_set = ScriptTasks26 host = "" 27 min_wait = 100028 max_wait = 5000

剧本表述:

1、始创ScriptTasks()类承传TaskSet类: 用以概念飞行测到试经营范围。2、始创index()、about()、demo()分析方法分别指出一个蓄意,访问。用@task() 配有饰该分析方法为一个护航。1、2指出一个Locust下述被拣选指派的也就是说,仅合值变大,指派频率越低。在举例来说ScriptTasks()蓄意下的三个分析方法得指派比重为2:1:13、WebsiteUser()类: 用以概念各种类型普通用户。4、task_set : 相诬蔑一个概念了的普通用户蓄意类。5、host: 暂定被飞行测到试运用于的URL的电话号码6、min_wait : 普通用户指派护航二者之间单次的生灵,各单位:毫秒。7、max_wait : 普通用户指派护航二者之间单次的上界,各单位:毫秒。

剧本适用情景表述:

在这个示例里面,概念了针对com的飞行测到试情景:可先各种类型普通用户暂定种系统,然后随机地访问关键词(/)和关于关键词(/about/),劝说比重为2:1,demo分析方法主要用来揭示client对post因特网的处理方式则;并且,在飞行于在里面,两次劝说的不间断为1->5秒间的随机合值。

从剧本里面可以看出,剧本主要包含两个类,一个是WebsiteUser(承传自HttpLocust,而HttpLocust承传自Locust),另一个是ScriptTasks(承传自TaskSet)。两件事实上,在Locust的飞行测到试剧本里面,所有经营范围飞行测到试情景都是在Locust和TaskSet两个类的承传举例来说里面展开描画的。

那如何解释Locust和TaskSet这两个类呢?有趣地说,Locust类就说是是一群蟑螂,而每一只蟑螂就是一个类的下述。除此以外的,TaskSet类就说是是蟑螂的大脑,高度集中着蟑螂的单单蓄意,即单单经营范围情景飞行测到试对应的护航集。

四、Locust类

下述剧本

假code:

from locust import HttpLocust, TaskSet, taskclass WebsiteTasks(TaskSet): def on_start(self): #展开codice_的工作,每个Locust普通用户开始花钱的第一件两件事 payload = { "username": "test_user", "password": "123456", } header = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36", } self.client.post("/login",data=payload,headers=header)#self.client本体适用Python request纳的所有分析方法,呼叫和适用分析方法和requests完全一致; @task(5) #通过@task()配有饰的分析方法为一个两件事务,分析方法的仅合值用以暂定该蓄意的指派也就是说,仅合值变大每次被真实世界普通用户指派的概率越低,转换为1 def index(self): self.client.get("/") @task(1) def about(self): self.client.get("/about/")class WebsiteUser(HttpLocust): host = "" #被测到种系统的host,在因特网里面开启locust时从未暂定----host仅合值早可先才会请同样 task_set = WebsiteTasks #TaskSet类,该类概念普通用户护航资讯,必填。这里就是:WebsiteTasks类名,因为该类承传TaskSet; min_wait = 5000 #每个普通用户指派两个护航不间断的上下限(毫秒),单单仅合值在上下限里面随机合合值,若不暂定转换不间断浮动为1秒 max_wait = 15000

假code里面对com的飞行测到试情景,可先各种类型普通用户暂定种系统,然后随机访问关键词/和/about/,劝说比重5:1,并且在飞行于在里面,两次劝说的不间断1-5秒的随机合值;

on_start分析方法,在正式指派飞行测到试前指派一次,主要用以已完成一些codice_的工作,例如暂定系统设计;

WebsiteTasks类里面如何去呼叫 WebsiteUser(HttpLocust)类里面概念的字符串和分析方法呢?

通过在WebsiteTasks类里面self.locust.xxoo xxoo就是我们在WebsiteUser类里面概念的字符串或分析方法;

假code:

from locust import HttpLocust, TaskSet, taskimport hashlibimport queue class WebsiteTasks(TaskSet): @task(5) def index(self): data = self.locust.user_data_queue #给与WebsiteUser里面概念的ser_data_queue缓冲区 md5_data=self.locust.md5_encryption() #给与WebsiteUser里面概念的md5_encryption()分析方法 self.client.get("/") class WebsiteUser(HttpLocust): host = "" task_set = WebsiteTasks min_wait = 5000 max_wait = 15000 user_data_queue = queue.Queue() def md5_encryption(self,star): '''md5加密分析方法''' obj = hashlib.md5() obj.update(bytes(star,encoding="utf-8")) result = obj.hexdigest() return result

假code里面飞行测到试情景如何传达?

code主要包含两个类:

WebsiteUser承传(HttpLocust,而HttpLocust承传自Locust)WebsiteTasks承传(TaskSet)

在Locust飞行测到试剧本里面,所有经营范围飞行测到试情景都是在Locust和TaskSet两个类的承传举例来说里面展开描画述;

有趣说:Locust类就完全相同一群蟑螂,而每只蟑螂就是一个类的下述。TaskSet类就完全相同蟑螂的大脑,高度集中蟑螂的单单蓄意,即单单经营范围情景飞行测到试对应的护航集;

源可执行里面:class Locust(object)和class HttpLocust(Locust)

1 class Locust(object): 2 """ 3 Represents a "user" which is to be hatched and attack the system that is to be load tested. 4 5 The behaviour of this user is defined by the task_set attribute, which should point to a 6 :py:class:----TaskSet ---- class. 7 8 This class should usually be subclassed by a class that defines some kind of client. For 9 example when load testing an HTTP system, you probably want to use the10 :py:class:----HttpLocust ---- class.11 """12 13 host = None14 """Base hostname to swarm. i.e: """15 16 min_wait = 100017 """Minimum waiting time between the execution of locust tasks"""18 19 max_wait = 100020 """Maximum waiting time between the execution of locust tasks"""21 22 task_set = None23 """TaskSet class that defines the execution behaviour of this locust"""24 25 stop_timeout = None26 """Number of seconds after which the Locust will die. If None it won't timeout."""27 28 weight = 1029 """Probability of locust being chosen. The higher the weight, the greater is the chance of it being chosen."""30 31 client = NoClientWarningRaiser()32 _catch_exceptions = True33 34 def 短时init短时(self):35 super(Locust, self).短时init短时()36 37 def run(self):38 try:39 self.task_set(self).run()40 except StopLocust:41 pass42 except (RescheduleTask, RescheduleTaskImmediately) as e:43 44 class HttpLocust(Locust):45 """46 Represents an HTTP "user" which is to be hatched and attack the system that is to be load tested.47 48 The behaviour of this user is defined by the task_set attribute, which should point to a49 :py:class:----TaskSet ---- class.50 51 This class creates a *client* attribute on instantiation which is an HTTP client with support52 for keeping a user session between requests.53 """54 55 client = None56 """57 Instance of HttpSession that is created upon instantiation of Locust.58 The client support cookies, and therefore keeps the session between HTTP requests.59 """60 def 短时init短时(self):61 super(HttpLocust, self).短时init短时()62 if self.host is None:63 raise LocustError("You must specify the base host. Either in the host attribute in the Locust class, or on the command line using the ----host option.")64 self.client = HttpSession(base_url=self.host)

在Locust类里面,实例字符串client即客户端的劝说分析方法,这里的client字符串从未启动时客户端劝说分析方法,因此在适用Locust时,无需可先承传Locust类class HttpLocust(Locust),然后在self.client =HttpSession(base_url=self.host)启动时客户端劝说分析方法;

对于完全相同于的HTTP(s)协议,Locust已经实现了HttpLocust类,其self.client=HttpSession(base_url=self.host),而HttpSession承传自requests.Session。因此在飞行测到试HTTP(s)的Locust剧本里面,可以通过client本体来适用Python requests纳的所 有分析方法,呼叫方式则与 reqeusts完全一致。另外,由于requests.Session的适用,client的分析方法呼叫二者之间就自动具有了静止状态遗忘功能。完全相同于的情景就是,在暂定种系统后可以依靠暂定静止状态的Session,从而不足之处HTTP劝说系统设计都能带上暂定静止状态;

Locust类里面,除了client本体,还有几个本体无需关注:

task_set -----> 相诬蔑一个TaskSet类,TaskSet类概念了普通用户的护航资讯,该实例字符串为必填;max_wait/min_wait -----> 每个普通用户指派两个护航间隔的上下限(毫秒),单单仅合值在上下限里面随机合合值,若不暂定则转换不间断为1秒;host ----->被飞行测到试种系统的host,当在因特网里面开启locust时从未暂定----host仅合值早可先才会请同样;weight----->同时运转多个Locust类时,用以高度集中完全相同类型的护航指派也就是说;

Locust流程,飞行测到试开始后,每个真实世界普通用户(Locust下述)运转逻辑都才会遵守如下规律:

可先指派WebsiteTasks里面的on_start(只指派一次),作为codice_;从WebsiteTasks里面随机拣选(如果概念了护航间的也就是说关系,那么就按照也就是说关系随机拣选)一个护航指派;根据Locust类里面min_wait和max_wait概念的不间断之内(如果TaskSet类里面也概念了min_wait或者max_wait,以TaskSet里面的优可先),在小时之内里面随机合一个合值,某种原因等待;以此类推2~3工序,直到飞行测到试护航终止;

class TaskSet

TaskSet类实现了真实世界普通用户所指派护航的调度算法,包括规划护航指派顺序(schedule_task)、拣选下一个护航(execute_next_task)、指派护航(execute_task)、某种原因等待(wait)、里面断高度集中(interrupt)等待。在此基础上,就可以在TaskSet举例来说里面运用于非常简洁的方式则来描画述真实世界普通用户的经营范围飞行测到试情景,对真实世界普通用户的所有蓄意展开组织和描画述,并可以对完全相同护航的也就是说展开固定式。

@task

通过@task()配有饰的分析方法为一个两件事务。分析方法的仅合值用以暂定该蓄意的指派也就是说。仅合值变大每次被真实世界普通用户指派的概率越低。如果不新设转换为1。

TaskSet举例来说里面概念护航资讯时,采合两种方式则:@task配有饰机内和tasks本体。

运用于@task配有饰机内概念护航资讯时:

from locust import TaskSet, taskclass UserBehavior(TaskSet): @task(1) def test_job1(self): self.client.get('/test1') @task(3) def test_job2(self): self.client.get('/test2')

运用于tasks本体概念护航资讯时

from locust import TaskSetdef test_job1(obj): obj.client.get('/test1')def test_job2(obj): obj.client.get('/test2')class UserBehavior(TaskSet): tasks = {test_job1:1, test_job2:3} # tasks = [(test_job1,1), (test_job1,3)] # 两种方式则formula_

上面两种概念护航资讯方式则里面,外新设了也就是说本体,即指派test_job2的频率是test_job1的两倍。

若不暂定,转换比重为1:1。

低级用法:

共同点

在某些劝说里面,无需收纳以前response里面提合的仅合值,完全相同于情景就是session_id。Python里面可用通过re正则转换,对于返回的html关键词,可用运用于lxml纳来导向给与无需的仅合值;

from locust import HttpLocust, TaskSet, taskfrom lxml import etreeclass WebsiteTasks(TaskSet): def get_session(self,html): #共同点例证 tages = etree.HTML(html) return tages.xpath("//div[@class='btnbox']/input[@name='session']/@value")[0] def on_start(self): html = self.client.get('/index') session = self.get_session(html.text) payload = { "username": "test_user", "password": "123456", 'session' : session } header = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36", } self.client.post("/login",data=payload,headers=header) @task(5) def index(self): self.client.get("/") assert response['ErrorCode']==0 #确实 @task(1) def about(self): self.client.get("/about/")class WebsiteUser(HttpLocust): host = "" task_set = WebsiteTasks min_wait = 5000 max_wait = 15000

仅合值化

关键作用:周而复始合仅据,仅据可以此类推适用

例如:各种类型3个普通用户比方说劝说网站,分别为100个URL电话号码,每个真实世界普通用户都才会分作周而复始加载100个URL电话号码

from locust import TaskSet, task, HttpLocustclass UserBehavior(TaskSet): def on_start(self): self.index = 0 @task def test_visit(self): url = self.locust.share_data[self.index] print('visit url: %s' % url) self.index = (self.index + 1) % len(self.locust.share_data) self.client.get(url)class WebsiteUser(HttpLocust): host = '' task_set = UserBehavior share_data = ['url1', 'url2', 'url3', 'url4', 'url5'] min_wait = 1000 max_wait = 3000

应有比方说飞行测到试仅据唯一性,不周而复始合仅据;

所有比方说真实世界普通用户交换同一份飞行测到试仅据,并且应有真实世界普通用户适用的仅据不以此类推;

例如:各种类型3普通用户比方说持有人twitter,分别为9个twitter,敦促持有人twitter不以此类推,持有人进行时后结束飞行测到试:

运用于缓冲区

from locust import TaskSet, task, HttpLocustimport queueclass UserBehavior(TaskSet): @task def test_register(self): try: data = self.locust.user_data_queue.get() except queue.Empty: print('account data run out, test ended.') exit(0) print('register with user: {}, pwd: {}' .format(data['username'], data['password'])) payload = { 'username': data['username'], 'password': data['password'] } self.client.post('/register', data=payload)class WebsiteUser(HttpLocust): host = '' task_set = UserBehavior user_data_queue = queue.Queue() for index in range(100): data = { "username": "test%04d" % index, "password": "pwd%04d" % index, "email": "test%04d@debugtalk.test" % index, "phone": "186%08d" % index, } user_data_queue.put_nowait(data) min_wait = 1000 max_wait = 3000

应有比方说飞行测到试仅据唯一性,周而复始合仅据;

所有比方说真实世界普通用户交换同一份飞行测到试仅据,应有比方说真实世界普通用户适用的仅据不以此类推,并且仅据可周而复始以此类推适用;

例如:各种类型3个普通用户比方说暂定twitter,总分别为9个twitter,敦促比方说暂定twitter不不尽相同,但仅据可周而复始适用;

from locust import TaskSet, task, HttpLocustimport queueclass UserBehavior(TaskSet): @task def test_register(self): try: data = self.locust.user_data_queue.get() except queue.Empty: print('account data run out, test ended') exit(0) print('register with user: {0}, pwd: {1}' .format(data['username'], data['password'])) payload = { 'username': data['username'], 'password': data['password'] } self.client.post('/register', data=payload) self.locust.user_data_queue.put_nowait(data)class WebsiteUser(HttpLocust): host = '' task_set = UserBehavior user_data_queue = queue.Queue() for index in range(100): data = { "username": "test%04d" % index, "password": "pwd%04d" % index, "email": "test%04d@debugtalk.test" % index, "phone": "186%08d" % index, } user_data_queue.put_nowait(data) min_wait = 1000 max_wait = 3000

确实(即检查点)

精度飞行测到试也无需新设确实么? 某些前提是无需,比如你在劝说一个关键词时,就可以通过静止状态来明确指出返回的 HTTP 静止状态可执行真的 200。

通过with self.client.get("url电话号码",catch_response=True) as response的基本上;

response.status_code给与http号召可执行展开明确指出,失利后才会添加统计资料出错表里面;

python自带的确实assert失利后code就不才会向上走,且失利后不才会被Locust电子表格统计资料进去;

转换不写成仅合值catch_response=False确实无效,将catch_response=True才生效;

前面例证里面:

首可先适用python确实对因特网返回合值展开明确指出(python确实不通过,code就不向上指派,get劝说仅为0),通过后对该因特网的http号召否为200展开明确指出;

@taskdef all_interface(self): #豆瓣左图书api为例证 with self.client.get("",,catch_response=True) as response: assert response.json()['rating']['max']==10 #python确实对因特网返回合值里面的max字符串展开确实 if response.status_code ==200: #对http号召可执行否200展开明确指出 response.success() else: response.failure("GetActConfig[Failed!]")五、Locust运转方式则也

运转Locust时,通常才会适请同样两种运转方式则也:单程序在运转和多程序在分布式运转。

单程序在运转方式则也

Locust所有的真实世界比方说普通用户外运转在单个Python程序在里面,单单从适用基本上上,又分为no_web和web两种基本上。该种方式则也由于单程序在的原因,并很难完全发挥负荷机所有推测到卡的灵活性,因此主要用以试验性剧本和小比方说压到测到的情形。

当比方说负荷敦促较低时,就无需请同样Locust的多程序在分布式运转方式则也。从语意意思上看,大家意味著第一中间体就是多台负荷机同时运转,每台负荷机分担负载一部分的负荷转化成。的确,Locust支持随意多台负荷机(一主多从)的分布式运转方式则也,但这里说到的多程序在分布式运转方式则也还有另外一种情形,就是在同对讲机负荷机上开启多个slave的情形。这是因为举例来说以前大多仅人工智能的CPU都是多推测到卡(multiple processor cores),单程序在运转方式则也下必需请同样一个推测到卡的灵活性,而通过在对讲机负荷机上运转多个slave,就能呼叫多个推测到卡的灵活性了。比较好的花钱法是,如果对讲机负荷机有N个推测到卡内核,那么就在这台负荷机上开启一个master,N个slave。当然,我们也可以开启N的倍仅个slave,但是根据我的试验仅据,精准度跟N个仅有,因此只无需开启N个slave亦可。

no_web基本上开启locust:

如果运用于no_web基本上,则需适用----no-web仅合值,并才会请同样如下几个仅合值。

-c, ----clients:暂定比方说普通用户仅;-n, ----num-request:暂定总指派飞行测到试次仅;-r, ----hatch-rate:暂定比方说高压到速率,转换合值位1。

示例:

$ locust -f locustfile.py ----host = xxxxx.com ----no-web -c 1 -n 2

在此基础上,当我们只想试验性Locust剧本时,就可以在剧本里面无需试验性的;也通过print复印机存档,然后将比方说仅和总指派次仅都暂定为1

$ locust -f locustfile.py ----host = xxxxx.com ----no-web -c 1 -n 1

指派飞行测到试

通过这种方式则,我们就能很方便地对Locust剧本展开试验性了。

Locust剧本试验性通过后,就算是已完成了所有匆忙工作,可以开始展开负荷飞行测到试了。

web基本上开启locust:

如果运用于web基本上,,则通常前提无需暂定其它额外仅合值,Locust转换运用于8089端口开启web;如果要适用其它端口,就可以适用如下仅合值展开暂定。

-P, ----port:暂定web端口,转换为8089.因特网里面----->带入到code附录: locust -f locustfile.py ----host = xxxxx.com-f 暂定精度飞行测到试剧本机密文件-host 被飞行测到试运用于的URL电话号码【如果不个人资料,读合承传(HttpLocust)类里面概念的host】如果Locust运转在Tu-,在浏览机内里面访问亦可带入Locust的Web负责管理关键词;如果Locust运转在其它工具上,那么在浏览机内里面访问_machine_ip:8089亦可。

多程序在分布式运转

不管是两台多程序在,还是多机负载方式则也,运转方式则都是一样的,都是可先运转一个master,日后开启多个slave。

开启master时,无需适用----master仅合值;同样的,如果要适用8089以外的端口,还无需适用-P, ----port仅合值。

D:workSpacesApiAutoTestTestCasesOpsUltraAPITestMonitorAPITest>locust -f monitorAgent.py ----master ----port=8089[2018-06-05 15:36:30,654] dengshihuang/INFO/locust.main: Starting web monitor at *:8089[2018-06-05 15:36:30,684] dengshihuang/INFO/locust.main: Starting Locust 0.8.1

开启slave时无需适用----slave仅合值;在slave里面,就不无需日后暂定端口了。master开启后,还无需开启slave才能指派飞行测到试护航。

D:workSpacesApiAutoTestTestCasesOpsUltraAPITestMonitorAPITest>locust -f monitorAgent.py ----slave[2018-06-05 15:36:30,654] dengshihuang/INFO/locust.main: Starting web monitor at *:8089[2018-06-05 15:36:30,684] dengshihuang/INFO/locust.main: Starting Locust 0.8.1D:workSpacesApiAutoTestTestCasesOpsUltraAPITestMonitorAPITest>locust -f monitorAgent.py ----slave ----master-host=

master和slave都开启进行时后,就可以在浏览机内里面通过_machine_ip:8089带入Locust的Web负责管理关键词了。适用方式则跟单程序在web基本上完全不尽相同,只是此时是通过多程序在负载来转化成比方说负荷,在web负责管理GUI里面也能看见单单的slave仅量。如果slave与master不在同对讲机工具上,还无需通过----master-host仅合值日后暂定master的IP电话号码。

运转结果:

Number of users to simulate 新设真实世界普通用户仅,对应里面no_web方式则也的-c, ----clients仅合值;

Hatch rate(users spawned/second)每秒钟消除(开启)的真实世界普通用户仅 , 对应着no_web方式则也的-r, ----hatch-rate仅合值,转换为1。点击Start swarming 操纵杆,开始运转精度飞行测到试。

上左图:开启了一个 master 和两个 slave,由两个 slave 来向被飞行测到试种系统发送给劝说

精度飞行测到试仅合值

Type: 劝说的类型,例如GET/POST。Name:劝说的路径。这里为搜索引擎关键词,即:request:举例来说劝说的仅量。fails:举例来说劝说失利的仅量。Median:里面间合值,各单位毫秒,一半的服务机内端号召小时很低该合值,而另一半很低该合值。Average:平外合值,各单位毫秒,所有劝说的平外号召小时。Min:劝说的很小服务机内端号召小时,各单位毫秒。Max:劝说的最大服务机内端号召小时,各单位毫秒。Content Size:单个劝说的大小,各单位元组。reqs/sec:是每秒钟钟劝说的个仅。

来得于LoadRunner,Locust的结果演示格外有趣,主要就四个低效率:比方说仅、RPS、号召小时、诬蔑常率。但对于大多仅情景来说,这几个低效率已经充足了。

在上左图里面,RPS和平外号召小时这两个低效率推测到的合值都是根据最近2秒劝说号召仅据计算得到的统计资料合值,我们也可以解释为瞬时合值。

如果想看精度低效率仅据的走势,就可以在Charts右边拍照。在这里,可以拍照到RPS和平外号召小时在整个运转处理过程里面的波动情形。

除了以上仅据,Locust还备有了整个运转处理过程仅据的百分比统计资料合值,例如我们完全相同于的90%号召小时、号召小时里面位合值;平外号召小时和出错仅的统计资料,该仅据可以通过Download response time distribution CSV和Download request statistics CSV获得,仅据演示精准度如下所示。

---------------------------------------------------------------------------------------------------------------------同样:

locust虽然功能强大,但是高压到精度和号召小时上面还是有贫富差距的,如果项目有非常大的比方说高压到劝说,可以选择wrk

对比分析方法与结果:

可以匆忙两台服务机内端,服务机内端A作为施压到方,服务机内端B作为承压到方服务机内端B上有趣的运转一个nginx服务就行了

服务机内端A上可以安配有一些完全相同于的压到测到工具,比如locust、ab、wrk

我以前测到下来,施压到灵活性上 wrk> golang>> ab> locust

因为locust一个程序在只适用一核CPU,所以用locust压到测到时,必须适用主从分布式(zeromq通讯)方式则也,并根据服务机内端CPU核仅来起slave路由仅

wrk平均为55K QPSgolang net/http 平均 45K QPSab 大平均 15K QPSlocust 最糟,而且response time明显比较长

-------------------------------------------------------------------------------------------------------------------------------------

好文延揽:

1、

这篇博文从精度飞行测到试分析方法、精度窘境导向、精度飞行测到试工具的基本组成、精度飞行测到试工具延揽(比较了loadrunner,jmeter,Locust长处)等方面花钱了深入的参阅,延揽!

蟑螂比Jmeter好的一点就是低比方说,但是相对的不好的;也也有,就是无需另外的工具去防范服务机内端,而且无需去编著code。

深圳看牛皮癣的医院哪家好
辽宁白癜风正规的医院
汉中白癜风医院哪家好
云南哪家专科医院做人流好
天津白癜风专科医院哪个好

上一篇: 没整整又想养宠物?三大萌宠,省心又好养,总有一种适合你

下一篇: 北京析置内银行已为9.3万余人次提供按揭贷款纾困

友情链接