首页 >> 历史资讯

机动性测试工具Locust

2025-09-22 12:20:40

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 而无须被测试者的ROM,换用以格式:;还有web-host=WEB_HOST 而无须试运行 Locust Web 链接的ROM,局限性为空 ''。-P PORT, ;还有port=PORT, ;还有web-port=PORT 而无须 ;还有web-host 的TCP,局限性是8089-f LOCUSTFILE, ;还有locustfile=LOCUSTFILE 而无须试运行 Locust 耐用性测试者元将近据,局限性为: locustfile.py;还有csv=CSVFILEBASE, ;还有csv-base-name=CSVFILEBASE 以CSV格式存储设备局限性劝告测试者资料。;还有master Locust 原产式方式也请忽略,局限性结点为 master 结点。;还有slave Locust 原产式方式也请忽略,局限性结点为 slave 结点。;还有master-host=MASTER_HOST 原产式方式也试运行,分设 master 结点的ROM或 IP 地址,只在与 ;还有slave 结点一起试运行时请忽略,局限性为:127.0.0.1.;还有master-port=MASTER_PORT 原产式方式也试运行, 分设 master 结点的TCP号,只在与 ;还有slave 结点一起试运行时请忽略,局限性为:5557。忽略,slave 结点也将连接到这个TCP+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 而无须s顺利顺利完成的采访量,作运用于于 ;还有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 格式列印 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是一种较慢、灵活的二进制绑定格式,适运用于于格外相似JSON的资料格式。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 : 使用者拒绝执行特殊任务彼此之在在匆忙好时在在的不动点,其他部门:毫秒。

分镜请忽略布景阐释:

在这个比如说中的,表述了针对该网站的测试者布景:先为模拟器使用者受保护种系统,然后随机地采访版面(/)和关于链接(/about/),劝告倍数为2:1,demo步骤主要用来阐述client对post适配器的处理方式;并且,在测试者处理过程中的,两次劝告的期中为1->5秒在在的随机绝对值。

从分镜中的可以看出,分镜主要举例来说两个类,一个是WebsiteUser(后继者自HttpLocust,而HttpLocust后继者自Locust),另一个是ScriptTasks(后继者自TaskSet)。事实上,在Locust的测试者分镜中的,所有金融业务测试者布景都是在Locust和TaskSet两个类的后继者一般来讲中的同步进行描的。

那如何理解Locust和TaskSet这两个类呢?最简单地说,Locust类就便是是一群蚂蚁,而每一只蚂蚁就是一个类的程序中。适当的,TaskSet类就便是是蚂蚁的大脑,遏制着蚂蚁的基本上不道德,即基本上金融业务布景测试者互换的特殊任务集。

四、Locust类

程序中分镜

仅仅只是代字码:

from locust import HttpLocust, TaskSet, taskclass WebsiteTasks(TaskSet): def on_start(self): #同步进行函将近函数调用的临时工,每个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()上雕刻的步骤为一个事务,步骤的程序中运用于于而无须该不道德的拒绝执行方差,程序中越少每次被ID使用者拒绝执行的大多值越大,局限性为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

仅仅只是代字码中的对该网站的测试者布景,先为模拟器使用者受保护种系统,然后随机采访版面/和/about/,劝告倍数5:1,并且在测试者处理过程中的,两次劝告的期中1-5秒的随机绝对值;

on_start步骤,在正式拒绝执行测试者在此之前拒绝执行一次,主要运用于于顺利完成一些函将近函数调用的临时工,例如受保护操作方法;

WebsiteTasks类中的如何去函数调用 WebsiteUser(HttpLocust)类中的表述的文件名和步骤呢?

通过在WebsiteTasks类中的self.locust.xxoo xxoo就是我们在WebsiteUser类中的表述的文件名或步骤;

仅仅只是代字码:

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): '''md5TLS步骤''' obj = hashlib.md5() obj.update(bytes(star,encoding="utf-8")) result = obj.hexdigest() return result

仅仅只是代字码中的测试者布景如何表达?

代字码主要举例来说两个类:

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:人口为120人TaskSet 人口为120人 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:人口为120人HttpLocust 人口为120人 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:人口为120人TaskSet 人口为120人 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程序中,测试者开始后,每个ID使用者(Locust程序中)试运行逻辑大多会遵守如下有规律:

先为拒绝执行WebsiteTasks中的的on_start(只拒绝执行一次),作为函将近函数调用;从WebsiteTasks中的随机筛选(如果表述了特殊任务在在的方差父子关系,那么就按照方差父子关系随机筛选)一个特殊任务拒绝执行;根据Locust类中的min_wait和max_wait表述的期中覆盖范围(如果TaskSet类中的也表述了min_wait或者max_wait,以TaskSet中的的优先为),在时在在覆盖范围中的随机取用一个绝对值,则会匆忙好;减法2~3步骤,直到测试者特殊任务终止;

class TaskSet

TaskSet类付诸了ID使用者所拒绝执行特殊任务的调度算法,之外规划特殊任务拒绝执行顺序(schedule_task)、筛选下一个特殊任务(execute_next_task)、拒绝执行特殊任务(execute_task)、则会匆忙好(wait)、中的断遏制(interrupt)匆忙好。在此新,就可以在TaskSet一般来讲中的换用相当朴素的方式来详细描述ID使用者的金融业务测试者布景,对ID使用者的所有不道德同步进行组织和详细描述,并可以对不同特殊任务的方差同步进行内置。

@task

通过@task()上雕刻的步骤为一个事务。步骤的程序中运用于于而无须该不道德的拒绝执行方差。程序中越少每次被ID使用者拒绝执行的大多值越大。如果不分设局限性为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)] # 两种方式等价关系

上面两种表述特殊任务个人信息方式中的,大多分设了方差类型,即拒绝执行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地址,每个ID使用者大多会由南向北减法顺利顺利完成时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

保障即刻测试者资料唯一性,不减法取用资料;

所有即刻ID使用者共享同一份测试者资料,并且保障ID使用者请忽略的资料不减法;

例如:模拟器3使用者即刻持有人帐号,共约9个帐号,尽快持有人帐号不减法,持有人即刻后结束测试者:

换用队列

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

保障即刻测试者资料唯一性,减法取用资料;

所有即刻ID使用者共享同一份测试者资料,保障即刻ID使用者请忽略的资料不减法,并且资料可减法减法请忽略;

例如:模拟器3个使用者即刻受保护帐号,一共约9个帐号,尽快即刻受保护帐号不并不相同,但资料可减法请忽略;

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挫败后代字码就不能向下走,且挫败后不能被Locust报表统计数据进去;

局限性不写程序中catch_response=False确信强制执行,将catch_response=True才续期;

比如说比如说中的:

首先为请忽略python确信对适配器回到绝对值同步进行推论(python确信不通过,代字码就不向下拒绝执行,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所有的ID即刻使用者大多试运行在单个Python某种程度中的,基本上从请忽略型式上,又总称no_web和web两种型式。该种方式也由于单某种程度的缘故,并不能完全发挥压力机所有Intel的能力也,因此主要运用于于则会化分镜和小即刻压测的具体情况。

当即刻压力尽快较较低时,就能够请忽略Locust的多某种程度原产式试运行方式也。从字面意即上看,大家或许第一反应就是机房压力机同时试运行,每台压力机分担接地一部分的压力生成。的确,Locust支持任意机房压力机(一主多从)的原产式试运行方式也,但这里说到的多某种程度原产式试运行方式也还有另外一种具体情况,就是在同对讲机压力机上带进多个slave的具体情况。这是因为局限性阶段性大多将近计算机的CPU都是多Intel(multiple processor cores),单某种程度试运行方式也下根本无法请忽略一个Intel的能力也,而通过在对讲机压力机上试运行多个slave,就能函数调用多个Intel的能力也了。相比较好的认真法是,如果对讲机压力机有N个Intel多线程,那么就在这台压力机上顺利顺利完成一个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局限性换用8089TCP顺利顺利完成web;如果要请忽略其它TCP,就可以请忽略如下程序中同步进行而无须。

-P, ;还有port:而无须webTCP,局限性为8089.终端设备中的;还有->重回到代字码目录: locust -f locustfile.py ;还有host = xxxxx.com-f 而无须耐用性测试者分镜元将近据-host 被测试者运用于的URL地址【如果不填上,读取用后继者(HttpLocust)类中的表述的host】如果Locust试运行在本机,在运用于程序中的采访只需重回Locust的Web管理链接;如果Locust试运行在其它的设备上,那么在运用于程序中的采访_machine_ip:8089只需。

多某种程度原产式试运行

不管是单机多某种程度,还是多机接地方式也,试运行方式都是一样的,都是先为试运行一个master,再顺利顺利完成多个slave。

顺利顺利完成master时,能够请忽略;还有master程序中;同样的,如果要请忽略8089以外的TCP,还能够请忽略-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中的,就不能够再而无须TCP了。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 分设ID采访量,互换中的no_web方式也的-c, ;还有clients程序中;

Hatch rate(users spawned/second)s转化成(顺利顺利完成)的ID采访量 , 互换着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:是s钟劝告的个将近。

相比于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好的一点就是较低即刻,但是相对的极差的地方也有,就是能够另外的方法去监视路由器,而且能够去编写代字码。

北京哪家医院治疗卵巢早衰好
佛山哪个男科医院好
武汉癫痫正规的医院
少精症的早期症状
武汉看男科哪间医院好

上一篇: 猫咪卡栏杆上不动弹,网友好心前往救济,却被眼前一幕给笑翻

下一篇: 继支付宝后微信也来“认真减法”,其他app能不能赶紧跟上?

友情链接