zoukankan      html  css  js  c++  java
  • Locust 介绍篇

    Locust介绍:

    Locust作为基于Python语言的性能测试框架。

    其优点在于他的并发量可以实现单机10倍于LoadRunner和Jmeter工具。他的工作原理为协程并发,也就是gevent库。

    Locust的缺点也显而易见,他没有友好的性能监控页面,没有任何关联,参数化,检查点之类的定义。他仅仅就是一个轻量级的框架,但是正因为如此,我们可以通过python成千上万的库支持,定制自己任何想要的东西!

    安装

    通过pip 安装locust

    pip install locustio

    样例

    简单的Locust框架样例:

    Locust每生成一个实例都代表一个虚拟的用户,用来发送请求到进行负载测试的系统。

    该用户的行为由task_set属性定义,该属性应指向一个 TaskSet类。

    这个类通常应该由某些类继承并且重新定义。

    例如:

     1 from locust import Locust, TaskSet, task
     2  
     3 class WebsiteTasks(TaskSet):
     4     def on_start(self):
     5        pass 
     6 
     7     @task(1)
     8     def index(self):
     9        pass   
    10    
    11     @task(5)
    12     def about(self):
    13       pass
    14 
    15 class WebsiteUser(Locust):
    16     task_set = WebsiteTasks
    17     min_wait = 5000
    18     max_wait = 15000

    例如,当测试HTTP系统时,使用的HttpLocust类

     1 from locust import HttpLocust, TaskSet, task
     2 
     3 class MyTaskSet(TaskSet):
     4     @task(2)
     5     def index(self):
     6         self.client.get("/")
     7 
     8     @task(1)
     9     def about(self):
    10         self.client.get("/about/")
    11 
    12 class MyLocust(HttpLocust):
    13     task_set = MyTaskSet //测试集
    14     min_wait = 5000 //单个请求下次发起的最小等待时间
    15     max_wait = 15000 //单个请求下次发起的最大等待时间
        host = 'xxx' //指定测试目标地址

    WebsiteTasks(TaskSet): 继承TaskSet类,该类中主要为用户自己设定的测试集

               TaskSet类中 :on_start是优先方法,他会优先于下面所有task方法。

                       :同样 on_stop是结尾方法,会在结束时执行

               @task装饰器,task中的数字是测试中,该测试方法在测试集中的权重

    HttpLocust 和 Locust继承类中:

      1.task_set 选择需要的测试集,

      2.min and max wait取最大和最小等待区间值,取值为随机

      3.host为指定测试目标地址

    启动

    直接启动:

    locust --host=http://example.com

    有文件路径时:

    locust -f locust_files/my_locust_file.py --host=http://example.com

     例子:

    locust -f test.py --host=127.0.0.1

    需要多机并发操作时,主机启动:

    locust -f locust_files/my_locust_file.py --master --host=http://example.com

    辅助机器启动:

    locust -f locust_files/my_locust_file.py --slave --host=http://example.com

    注意点:

    启动时,有的同学打开web后8089端口,页面打不开,可以使用以下方式打开:

    locust -f locustfile.py --web-host=127.0.0.1

    无网页启动:

    locust -f locustfile.py --no-web -r 5 -c 1 -t 5m

    r表示总用户数,c表示每秒增加用户数,t表示执行时间

    打开测试页面

    打开测试页面,Locust默认的地址通常为:http://127.0.0.1:8089

    设定总人数和每秒增加人数,然后点击开始

    结尾:

    引用debug-talk一段对整个Locust比较准确的概述和总结:

    Locust类中,具有一个client属性,它对应着虚拟用户作为客户端所具备的请求能力,也就是我们常说的请求方法。通常情况下,我们不会直接使用Locust类,因为其client属性没有绑定任何方法。因此在使用Locust时,需要先继承Locust类,然后在继承子类中的client属性中绑定客户端的实现类。

    对于常见的HTTP(S)协议,Locust已经实现了HttpLocust类,其client属性绑定了HttpSession类,而HttpSession又继承自requests.Session。因此在测试HTTP(S)Locust脚本中,我们可以通过client属性来使用Python requests库的所有方法,包括GET/POST/HEAD/PUT/DELETE/PATCH等,调用方式也与requests完全一致。另外,由于requests.Session的使用,因此client的方法调用之间就自动具有了状态记忆的功能。常见的场景就是,在登录系统后可以维持登录状态的Session,从而后续HTTP请求操作都能带上登录态

    而对于HTTP(S)以外的协议,我们同样可以使用Locust进行测试,只是需要我们自行实现客户端。在客户端的具体实现上,可通过注册事件的方式,在请求成功时触发events.request_success,在请求失败时触发events.request_failure即可。然后创建一个继承自Locust类的类,对其设置一个client属性并与我们实现的客户端进行绑定。后续,我们就可以像使用HttpLocust类一样,测试其它协议类型的系统。

    原理就是这样简单!

     
     
     
  • 相关阅读:
    艾伟_转载:C#来创建和读取XML文档 狼人:
    艾伟_转载:一个.NET委托的故事:彼得,老板和宇宙 狼人:
    艾伟_转载:.NET 4.0 Beta2中的BigInteger和Complex类 狼人:
    艾伟_转载:在C#中实现3层架构 狼人:
    艾伟_转载:从MySpace基于.NET平台的六次重构经历,来感受分布式 狼人:
    艾伟_转载:.NET设计模式:单件模式(Singleton Pattern) 狼人:
    艾伟_转载:.NET重写URL浅谈 狼人:
    Windows phone8 基础篇(二) XAML简介
    TCP/IP详解第十八章
    使用JCS时出现config.OptionConverter Could not instantiate class []的错误原因
  • 原文地址:https://www.cnblogs.com/grandlulu/p/9168927.html
Copyright © 2011-2022 走看看