Locust API 文档

Locust API 官方文档

 

Locust class

  该用户的行为由task_set属性定义,该属性应指向TaskSetclass。这个类通常应该由定义某种客户端的类子类化。 例如,在对HTTP系统进行负载测试时,您可能希望使用HttpLocust类。

max_wait=1000

执行Locust任务之间的最长等待时间

min_wait=1000

执行Locust任务之间的最短等待时间

task_set=None

TaskSet类,用于定义此Locust的执行行为

weight=1000

选择Locust的可能性。 重量越高,被选中的机会就越大。

 

HttpLocust class

  该用户的行为由task_set属性定义,该属性应指向TaskSetclass。此类在实例化上创建客户端属性,该实例化是一个HTTP客户端,支持在请求之间保持用户会话。

client=None

在实例化Locust时创建的HttpSession实例。 客户端支持cookie,因此保持HTTP请求之间的会话。

 

TaskSet class

  定义Locust用户将执行的一组任务的类。当TaskSet开始运行时,它将从tasks属性中选择一个任务,执行它,调用它的wait函数,该函数将在min_wait和max_wait毫秒之间休眠一个随机数。 然后它将安排另一个执行任务,依此类推。

TaskSets可以嵌套,这意味着TaskSet的tasks属性可以包含另一个TaskSet。 如果它计划执行嵌套的TaskSet,它将被实例化并从当前执行的TaskSet中调用。 然后,当前运行的TaskSet中的执行将被移交给嵌套的TaskSet,后者将继续运行,直到它抛出InterruptTaskSet异常,这在调用TaskSet.interrupt()时完成。 (然后执行将在第一个TaskSet中继续)。

client

引用根Locust实例的client属性

interrupt(reschedule=True)

中断TaskSet并将执行控制移交给父TaskSet。如果重新安排为True(默认),则父Locust将立即重新安排并执行新任务根TaskSet不应该调用此方法(立即附加到Locust类'task_set属性),而是在层次结构中的嵌套TaskSet类中调用

locust=None
在实例化TaskSet时将引用根Locust类实例

max_wait=None

执行locust任务之间的最长等待时间。 可用于覆盖根Locust类中定义的max_wait,如果未在TaskSet上设置,将使用该max_wait。

min_wait=None

执行locust任务之间的最短等待时间。 可用于覆盖根Locust类中定义的min_wait,如果未在TaskSet上设置,将使用该min_wait

parent=None

在实例化TaskSet时,将引用父TaskSet或Locust类实例。 对嵌套的TaskSet类很有用。

schedule_task(task_callable, args=None, kwargs=None, first=False)

将任务添加到Locust的任务执行队列。

参数:

  • task_callable:要安排的locust任务
  • args:将传递给可调用任务的参数
  • kwargs:将传递给可调用任务的关键字参数的字典。
  • first:可选关键字参数。 如果为True,则任务将首先放入队列中。

tasks=[]

列出了代表locust用户任务的python callables。如果任务是列表,则将随机选择要执行的任务。

如果tasks是一个(callable,int)两元组列表,或者{callable:int} dict,将随机挑选要执行的任务.但每个任务将根据其对应的int值进行加权。 所以在下面的例子中,ThreadPage的拾取可能性是write_post的十五倍:

class ForumPage(TaskSet):
tasks = {ThreadPage:15, write_post:1}

 

task decorator

tast(weight=1)

用作便利装饰器,以便能够在类中内联任务集的任务。 例:

class ForumPage(TaskSet):
    @task(100)
    def read_thread(self):
        pass
    
    @task(7)
    def create_thread(self):
        pass

 

 

HttpSession class

classHttpSession(base_url, *args, **kwargs)

用于在请求之间执行Web请求和保留(会话)cookie的类(以便能够登录和退出网站)。 记录每个请求,以便locust可以显示统计信息

这是python-request的requests.Session类的略微扩展版本,并且大多数这个类的工作方式完全相同。 但是,发出请求的方法(get,post,delete,put,head,options,patch,request)现在可以获取一个url参数,该参数只是URL的路径部分,在这种情况下,URL的主机部分将被预先添加 使用HttpSession.base_url,它通常继承自Locust类的主机属性。

每个发出请求的方法还需要两个额外的可选参数,这些参数是特定于Locust的,并且在python-requests中不存在。 这些是:

参数:

name-(可选)可以指定在Locust的统计信息中用作标签而不是URL路径的参数。 这可用于将请求的不同URL分组到Locust统计信息中的单个条目中。

catch-response   -(可选)布尔参数,如果设置,可用于发出请求,返回上下文管理器作为with语句的参数。 这将允许根据响应内容将请求标记为失败,即使响应代码正常(2xx)。 相反也有效,可以使用catch_response来捕获请求,然后将其标记为成功,即使响应代码不是(即500或404)。

__init__(base_url, *args, **kwargs)

x .__ init __(...)初始化x; 请参阅帮助(类型(x))以进行签名

 

delete(url, **kwargs)

发送DELETE请求。返回响应对象。

参数:

url - 新Request对象的URL

**kwargs - 请求的可选参数

返回值类型:requests.Response

 

get(url, **kwargs)

发送GET请求。返回响应对象。

参数:

url - 新Request对象的URL。

**kwargs - 请求的可选参数。

返回值类型:requests.Response

 

head(url, **kwargs)

发送HEAD请求。返回响应对象。

参数:

url - 新Request对象的URL。

**kwargs - 请求的可选参数。

返回值类型:requests.Response

 

options(url, **kwargs)

发送OPTIONS请求。返回响应对象。

参数:

url - 新Request对象的URL

**kwargs - 请求的可选参数。

返回值类型:requests.Response

 

patch(url, data=None, **kwargs)

发送PATCH请求。返回响应对象。

参数:

url - 新Request对象的URL。

data - (可选)要在Request的正文中发送的字典,字节或类文件对象。

**kwargs - 请求的可选参数。

返回值类型:requests.Response

 

post(url, data=None, json=None, **kwargs)

发送POST请求。返回响应对象。

参数:

url - 新Request对象的URL。

data - (可选)要在Request的正文中发送的字典,字节或类文件对象。

json - (可选)json发送请求的正文。

**kwargs - 请求的可选参数。

返回值:requests.Response

 

put(url, data=None, **kwargs)

发送PUT请求。返回响应对象。

参数:

url - URL用于新的Request对象。

data - (可选)要在Request的正文中发送的字典,字节或类文件对象.

**kwargs - 请求的可选参数。

返回值:requests.Response

 

request(method, url, name=None, catch_response=False, **kwargs)

构造并发送requests.Request。返回requests.Response对象。

参数:

method - 新Request对象的方法。

url - 新Request对象的URL。

name - (可选)可以指定在Locust的统计信息中用作标签而不是URL路径的参数。 这可用于将请求的不同URL分组到Locust统计信息中的单个条目中。

catch_response - (可选)布尔参数,如果设置,则可用于发出请求,返回上下文管理器作为with语句的参数。 这将允许根据响应内容将请求标记为失败,即使响应代码正常(2xx)。 相反也有效,可以使用catch_response来捕获请求,然后将其标记为成功,即使响应代码不是(即500或404)。

params - (可选)要在Request的查询字符串中发送的字典或字节。

data - (可选)在Request主体中发送的字典或字节。

headers - (可选)要与请求一起发送的HTTP标头字典。

cookies - (可选)与请求一起发送的Dict或CookieJar对象。

files - (可选)'filename'的字典:用于多部分编码上传的类文件对象。

auth - (可选)Auth tuple或callable以启用Basic / Digest / Custom HTTP Auth。

timeout(float或tuple) - (可选)在放弃之前等待服务器发送数据的时间,浮点数或(连接超时,读取超时)元组。

allow_redirects(bool) - (可选)默认设置为True。

proxies - (可选)字典映射协议到代理的URL。

stream - (可选)是否立即下载响应内容。 默认为False。

verify - (可选)如果为True,将验证SSL证书。 还可以提供CA_BUNDLE路径。

cert - (可选)if String,ssl客户端证书文件(.pem)的路径。 如果Tuple,('cert','key')配对。

 

Response class

这个类实际上驻留在python-requests库中,因为这就是Locust用于发出HTTP请求的内容,但它包含在蝗虫的API文档中,因为它在编写蝗虫负载测试时非常重要。 您还可以在请求文档中查看Response类。Response对象,包含服务器对HTTP请求的响应。

apparent_encoding

明文编码,由chardet库提供。

close()

将连接释放回池中。 调用此方法后,不得再次访问基础原始对象。
注意:通常不需要显式调用

cookies= None

服务器发回的CookieJar of Cookies。

elapsed= None

发送请求和响应到达之间经过的时间(作为timedelta)。 此属性专门测量发送请求的第一个字节和完成解析标头之间所需的时间。 因此,它不会受到响应内容或stream关键字参数值的影响。

encoding= None

编码以便在访问r.text时进行解码。

headers= None

不区分大小写的响应标头词典。 例如,headers ['content-encoding']将返回'Content-Encoding'响应头的值。

history= None

请求历史记录中的Response对象列表。 任何重定向响应都将在此处结束。 该列表从最旧的请求到最近的请求排序。

is_permanent_redirect

如果此响应是永久版本的重定向之一,则为True。

is_redirect

如果此响应是格式良好的HTTP重定向(可以自动处理(由Session.resolve_redirects()),则为True。

iter_content(chunk_size=1, decode_unicode=False)

迭代响应数据。 当在请求上设置stream = True时,这避免了立即将内容读入内存以获得大响应。 块大小是它应该读入内存的字节数。 这不一定是因为可以进行解码而返回的每个项目的长度。chunk_size必须是int或None类型。 值None将根据stream的值而有所不同。 stream = True将在接收到块的任何大小时读取数据。 如果stream = False,则将数据作为单个块返回。如果decode_unicode为True,则将使用基于响应的最佳可用编码对内容进行解码。

iter_lines(chunk_size=512, decode_unicode=None, delimiter=None)

迭代响应数据,一次一行。 当在请求上设置stream = True时,这避免了立即将内容读入内存以获得大响应。

json(**kwargs)

返回响应的json编码内容。

参数:

** kwargs - 可选参数

json.loads take.Raises:ValueError - 如果响应主体不包含有效的json。

links

返回响应的已解析标题链接。

next

返回重定向链中下一个请求的PreparedRequest。

ok

如果status_code小于400,则返回True。

此属性检查响应的状态代码是否介于400和600之间,以查看是否存在客户端错误或服务器错误。 如果状态代码介于200和400之间,则返回True。 这不是检查响应代码是否为200 OK。

raise_for_status()

如果发生了HTTPError,则引发存储的HTTPError。

reason= None

响应HTTP状态的文本原因,例如 “未找到”或“确定”。

request= None

PreparedRequest对象,这是一个响应。

status_code= None

响应HTTP状态的整数代码,例如 404或200。

text

响应的内容,以unicode为单位。如果Response.encoding为None,则使用chardet猜测编码。响应内容的编码仅基于HTTP标头确定,遵循RFC 2616到字母。 如果您可以利用非HTTP知识来更好地猜测编码,则应在访问此属性之前适当地设置r.encoding。

url= None

响应的最终URL位置。

 

 

ResponseContextManager class

class ResponseContextManager(response)

一个Response类,它还充当上下文管理器,提供手动控制是否应将HTTP请求标记为成功或者是否在Locust的统计信息中失败的功能.此类是Response的子类,有两个额外的方法:成功和失败。

failure(exc)

将响应报告为失败。

exc可以是python异常,也可以是字符串,在这种情况下,它将被包装在CatchResponseError中。

with self.client.get("/", catch_response=True) as response:
    if response.content == "":
        response.failure("No data")

success()

报告回复成功

with self.client.get("/does/not/exist", catch_response=True) as response:
    if response.status_code == 404:
        response.success()

 

 

InterruptTaskSet Exception

exception InterruptTaskSet(reschedule=True)

在任务中抛出时会中断Locust的异常

 

 

Event hooks

事件挂钩是locust.events.EventHook类的实例:

class EventHook

简单事件类,用于为Locust中的不同类型的事件提供挂钩。

 

my_event = EventHook()
def on_my_event(a, b, **kw):
    print "Event was fired with arguments: %s, %s" % (a, b)my_event += on_my_eventmy_event.fire(a="foo", b="bar")

   

Available hooks

locust.events模块下提供了以下事件挂钩

request_success= <locust.events.EventHook object>

成功完成请求后会触发request_success。

监听应该采取以下参数:

request_type:使用的请求类型方法
name:被调用的URL的路径(如果在调用客户端时使用了名称,则覆盖名称)
response_time:响应时间,以毫秒为单位
response_length:响应的内容长度

 

request_failure= <locust.events.EventHook object>

请求失败时会触发request_failure

使用以下参数触发事件:

request_type:使用的请求类型方法
name:被调用的URL的路径(如果在调用客户端时使用了名称,则覆盖名称)
response_time:抛出异常的时间(以毫秒为单位)
exception:抛出的异常实例

 

locust_error= <locust.events.EventHook object>

在执行Locust类内发生异常时会触发locust_error。

使用以下参数触发事件:

locust_instance:发生异常的Locust类实例
exception:抛出的异常
tb:回溯对象(来自sys.exc_info()[2])

 

report_to_master= <locust.events.EventHook object>

当Locust在-slave模式下运行时,将使用report_to_master。 它可用于将数据附加到定期发送给主服务器的dicts。 当报告发送到主服务器时,它会定期触发。

请注意,“统计信息”和“错误”键是由Locust使用的,不应该被覆盖。

使用以下参数触发事件:

client_id:正在运行的蝗虫进程的客户端ID。
data:可以修改的数据字典,用于附加应发送给主服务器的数据。

 

slave_report= <locust.events.EventHook object>

当Locust在主模式下运行时使用slave_report,并在主服务器从Locust从服务器接收报告时触发。此事件可用于聚合来自Locust从属服务器的数据。

使用以下参数触发事件:

client_id:报告蝗虫从属的客户端ID
data:数据来自从节点的数据

 

hatch_complete= <locust.events.EventHook object>

生成所有蝗虫用户时会触发hatch_complete。

使用以下参数触发事件:

user_count: 孵化的用户数

 

quitting= <locust.events.EventHook object>

当蝗虫进程退出时,将触发告警

 

posted @ 2018-07-31 07:58  西夏一品唐  阅读(3034)  评论(0编辑  收藏  举报