• 0
  • 0
分享

      一、简介

      Locust是一个易于使用,分布式,用户负载测试工具。它用于负载测试web站点(或其他系统),并计算出一个系统可以处理多少并发用户。在测试期间,一大群虚拟用户访问你的网站。每个测试用户的行为由您定义,集群过程由webUI实时监控。这将帮助您在让真正的用户进入之前进行测试并识别代码中的瓶颈。

      Locust完全是基于事件的,因此在一台机器上支持数千个并发用户是可能的。与许多其他基于事件的应用程序不同,它不使用回调。相反它通过gevent使用轻量级协程。这允许您用Python编写非常有表现力的场景,而不用回调使代码复杂化。

      二、安装

      用pip管理工具安装:

pip3 install locust

      检查是否安装成功,执行命令:locust--v

图1.png

      三、压测过程

      1.编写脚本

      Locust不同于jmeter可以用GUI来创建压测脚本。Locust需要自己编写python脚本,压测负载脚本主要包含两个子类UserTask和WebsiteUser,分别继承TaskSet和Httplocust类,拥有这两个父类的公共属性和方法。

fromlocustimportHttpLocust,TaskSet,task,between
importos,json

#定义用户行为
class UserTask(TaskSet):
   def on_start(self):
       '''初始化数据,每个虚拟用户只执行一次'''
              self.client.post("/login",{"username":"test","password":"123456"})
              
   @task(2)
   def  home_index(self):
          r=self.client.get("/sz/Home/DefaultHomeV2Request")
         assertjson.loads(r.text)['Error']==0
         
   @task(1)
    def sale(self):
          self.client.get("/sz/Home/FlashSaleRequest")
          assertjson.loads(r.text)['Error']==0
          
   def on_stop(self):
         '''销毁数据,每个虚拟用户只执行一次'''
         self.client.post("/SignOut",{"CustomerGuid":"c7d7e646-9ce2-499b-a22e-a3c98d4545fe"})
         
class WebsiteUser(HttpLocust):
        host='http://10.1.62.126'
        task_set=UserTask
        wait_time=between(3,5)
        
if__name__=="__main__":
     os.system('locust-fstress_test.py')

      locust运行时:

  1. on_start():每个并发用户在开始前各执行一次

  2. on_stop():每个并发用户在结束后各执行一次

  3. @task:通过装饰器设置运行权重,比如上面代码中执行任务home_index和sale的总请求为2:1

  4. assert:断言设置

  5. wait_time:每个任务之间设置间隔时间,随机从3~5区间内取,单位是s

  6. locust-f:指定.py压测脚本路径

      2.Locust监控

      顺带提一下locustwebUI监控是基于flask框架,不指定port的话,默认地址:http://localhost:8089

图2.png

      开始测试,Locust提供一个简易的监控界面,可以看到RPS、响应时间和部分曲线图

图3.png

图4.png

图5.png

图6.png

      3.运行模式

      1.webUI模式

locust-fstress_test.py--web-host10.1.44.31--web-port8090

      --web-host:指定webUIIP,默认localhost

      --web-port:指定webUI端口,默认8089

      2.noweb模式

locust-fstress_test.py--no-web-c100-r20-t120

      --no-web:指定无webUI模式

      -c:起多少locust用户(等同于起多少tcp连接)

      -r:多少时间内,把上述-c设置的虚拟用户全部启动

      -t:脚本运行多少时间,单位s

      在--no-web模式下的报告如下:

图7.png

      4.分布式进程

      Locust是由python编写的,由于GIL的限制,单进程不能利用CPU多核的优势(实际测试结果也是一样,8核心的虚拟机,只有一核达到了95%以上的使用率,其余7核只围观,不出力)。所以单台机器上想要尽可能的压榨CPU,只能开启多进程,一般有多少个核心启多少进程。

      单台多进程:

      先启一个master

 locust-f/home/script/stress_test.py--web-host10.1.62.223--master

      再启8个slave

locust-f/home/script/stress_test.py--slave

slave节点启动后,在locust监控中能看到

图8.png

      多台多进程:

      多台机器搭建Locust分布式和单台搭建多进程差不多。只有一个区别,如果slave和master不在一台机器上,slave需要指定--master-host参数:

locust-f/home/script/stress_test.py--slave--master-host10.1.62.223

      更多功能使用请查看Locust官方文档,形成良好的习惯:官方文档

      四、总结

      Locust基于python脚本定制化压测,使用python语言来实现参数化、关联参数、断言和一些复杂的压测场景非常方便。Locust使用协程来构建tcp连接,本身单机并发能力强,但内部是由requests库的httpclient发起网络请求,requests库功能挺全面,性能却很一般,好在Locust支持分布式,弥补了一定的性能缺陷。根据自己做的测试,同样几台客户机,jmeter搭建分布式测出的qps比Locust分布式高1/3。如果要提升locust单进程性能,可以将httpclient的实现方式从requests换成geventhttpclient,这个下一篇再讲述。


作者:乱糟糟

原文链接:https://www.cnblogs.com/shenh/p/12424990.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 调用JMeter的 "jmeter -?"命令将打印所有命令选项的一个列表。列表说明如下:-h, --help 打印使用信息并退出-v, --version 打印版本信息并推出-p, --propfile {argument} 使用的JMeter属性文件-q, --addprop {argument} 附加的属性文件-t, --testfile {argument} 运行的JMeter测试文件(.jmx)-l, --logfile {argument} 日志取样文件-n, --nongui 非用户界面运行JMeter-s, --server 运行JMeter服务器-H, -...
            0 0 1316
            分享
          •   什么是Docker  Docker按照通俗易懂的理解来说就是一个用来装应用的容器,就像可以把水装到杯子里,把饭装到碗里,把钱装到钱包里......  可以把网站放在Docker中,可以把任何想得到的程序放在Docker中。  Docker能解决的问题  环境配置的问题  软件开发最大的麻烦事之一,就是环境配置。  比如一个java web应用,运行起来需要一个操作系统,操作系统之上还需要jdk、tomcat、mysql、系统环境问题、配置问题,甚至jdk、tomcat版本问题都能导致程序运行失败。  所以Docker来了,它把操作系统、jdk、tomcat等全部放在集装箱里,再打...
            12 12 1947
            分享
          •   三星被视为高通公司智能手机芯片组的主要客户,这很可能是高通公司最近与这家韩国电子巨头续签使用其骁龙芯片的多年协议的原因。然而,如果一家公司仅仅依赖一个客户就能带来特定季度总收入的 40%,显而易见会引起担忧,但根据 2023 年第四季度的数据,高通公司在这方面就似乎过于依赖三星,如果公司不能实现收入多元化,情况可能会变得更糟。  简而言之,如果三星能够改进其 Exynos 芯片组,使其不再需要高通公司的 SoC,那么情况就会变得十分严峻。  Canalys 公布的数据显示,2023 年第四季度,三星带来了高通骁龙芯片组 40% 的收入。小米稳居第二,占总收入的 17%,但两家公司之间的差距...
            0 0 1009
            分享
          • 1、AOP相关术语Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点。(业务层接口中所有的方法)Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义(被增强的方法)所有的切入点都是连接点。Advice(通知/增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知,通知的类型:前置通知,后置通知,异常通知,最终通知,环绕通知。Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类动...
            0 0 1294
            分享
          •   富士通和 Cohere宣布建立新的战略合作伙伴关系,以提供日语企业人工智能服务。Cohere 表示,他们将为企业开发几种高度安全的模式,并满足企业的需求,"为客户带来实际影响"。  Cohere 的 Command R+ 模型将成为计划中模型的基础,因为它具有可验证的准确性、多语言支持和自动化工具等功能。私有云部署将作为交易的一部分,帮助金融机构、公共部门和研发单位等受多种法规约束的组织获得服务。  除 Command R+ 模型外,富士通还将使用Cohere 的 Embed 和 Rerank 模型创建企业搜索应用程序和检索增强生成 (RAG) 系统。  在谈到协议时,...
            0 0 366
            分享
      • 51testing软件测试圈微信