• 0
  • 0
分享
  • 微软谷歌都在用 Python 性能测试工具——软件测试圈
  • 落叶凌飒 2022-12-28 13:41:54 字数 2770 阅读 627 收藏 0

  Locust是一款Python技术栈的开源的性能测试工具。Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户。

1-1.png

  Locust并不小众,从它Github的Star数量就可见一斑:

1-2.png

  链接:github.com/locustio/lo…

  截止文章写作时,一共15951Star。

  Locust生态良好,它已在多家外企(包括世界500强)投入使用:

1-3.png

  如此看来,Locust是非常值得学习和掌握的一款工具。

  Python的魔力在于化繁为简,基于Python的Locust也能给仍然困惑于性能测试的我们带来启发。

  Locust特点

  · 以纯Python方式编写用户脚本,提供极大自由度。

  · 用户脚本可以串行方式编写,Locust会通过轻量级进程/协程产生并发,无需自己做并发编程。

  · 并发量大,借助于gevent库,Locust能产生成千上万并发请求。

  · 开销小,Locust用户运行时开销很小。

  · 良好的Web UI对性能结果实时监测。

  · 能测任何系统任何协议,只需要写个client即可。

  · 开放REST API,尽情发挥。

  安装Locust

  需要Python版本3.6及以上。执行pip命令:

  $ pip install locust

  验证安装成功:

  $ locust -V

  安装时会一并安装依赖库:Installing collected packages: Werkzeug, pywin32, zope.event, greenlet, gevent, geventhttpclient, itsdangerous, flask, Flask-BasicAuth, ConfigArgParse, pyzmq, psutil, locust能看出来flask为Locust提供了Web功能。

  快速上手

  使用Locust一般按照以下步骤进行:

  1.编写Python用户脚本。

  2.使用locust命令执行性能测试。

  3.(可选)通过Web界面监测结果。

  示例代码如下,新建locustfile.py文件:

  import time  
  from locust import HttpUser, task, between  
    
  class QuickstartUser(HttpUser):  
      wait_time = between(1, 2.5)  
    
      @task  
      def hello_world(self):  
          self.client.get("/hello")  
          self.client.get("/world")  
    
      @task(3)  
      def view_items(self):  
          for item_id in range(10):  
              self.client.get(f"/item id={item_id}", name="/item")  
              time.sleep(1)  
    
      def on_start(self):  
          self.client.post("/login", json={"username":"foo", "password":"bar"})

  路径切换到locustfile.py文件所在目录,执行命令:

  $ locust

  也可以通过-f指定某个目录文件:

  $ locust -f locust_files/my_locust_file.py

  运行后,打开http://127.0.0.1:8089看到Web界面:

1-4.png

  填写信息后,就能开始压测了。Web界面提供了结果统计数据:

1-5.png

  和性能指标走势图:

1-6.png

  脚本解析

  示例脚本解析如下:

  # Locust用户脚本就是Python模块  
  import time  
  from locust import HttpUser, task, between  
    
  # 类继承自HttpUser  
  class QuickstartUser(HttpUser):  
      # 每个模拟用户等待1~2.5秒  
      wait_time = between(1, 2.5)  
    
      # 被@task装饰的才会并发执行  
      @task  
      def hello_world(self):  
          # client属性是HttpSession实例,用来发送HTTP请求  
          self.client.get("/hello")  
          self.client.get("/world")  
    
      # 每个类只会有一个task被选中执行  
      # 3代表weight权重  
      # 权重越大越容易被选中执行  
      # view_items比hello_wolrd多3倍概率被选中执行  
      @task(3)  
      def view_items(self):  
          for item_id in range(10):  
              # name参数作用是把统计结果按同一名称进行分组  
              # 这里防止URL参数不同会产生10个不同记录不便于观察  
              # 把10个汇总成1个"/item"记录  
              self.client.get(f"/item id={item_id}", name="/item")  
              time.sleep(1)  
    
      # 每个模拟用户开始运行时都会执行  
      def on_start(self):  
          self.client.post("/login", json={"username":"foo", "password":"bar"})

  小结

  本文先了解了Locust的背景和生态,它是值得学习的,对于Python技术栈来说更加如此。接着介绍了使用pip命令安装Locust,其中发现顺带安装了flask,Locust的Web功能是flask提供的。


作者:开源前哨    

来源:http://www.51testing.com/html/15/n-4478015.html

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 混迹于测试行业这么长时间了,一直想写一篇关于软件测试的经验分享的文章,但苦于工作原因迟迟未下笔。最近终于有了些闲余时间,遂决定把自己的心路历程及所感所想记录下来,与各位同行共勉。软件测试究竟是做什么的呢?软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。简而言之就是证明程序的正确性,检察系统是否满足用户需求,发现bug,证明程序有错。(划重点:找bug不是改bug哦~)软件测试前景又如何?软件测试工程师行业前景好、职业寿命长:根据相关招...
            0 0 842
            分享
          • 前言除了测试平台工具,业务测试的总结和思考同样重要,这里总结了一些Android测试知识点,可以辅助业务测试快速形成测试用例和检查点,当作抛砖引玉分享给大家。如有思考不全面的地方,欢迎大家指出来。一.安装启动卸载1、在各个操作系统上(Android>=4.3,ios>=7.0,根据各个应用要求的最低系统)能安装成功,分别安装在手机内存或者sd卡上都能成功。app安装完成后的运行,可正常打开软件。app打开后,是否有加载状态进度提示,引导页是否正常。启动的方式分为:首次启动,热启动,冷启动,应用管理器强行停止后启动,应用管理器中清缓存启动。2、正常卸载3、安装分为全安装,升级覆盖安装...
            0 0 2320
            分享
          • 写作单元测试代码的好处熟悉单元测试技术,了解相关的基本原理;掌握代码,积累代码编写经验,积累调试经验,积累分析问题、解决问题的经验;训练动手能力,单元测试代码不是业务代码,开发、维护过程中不需要特别关注质量要求,底限是达到验证业务代码逻辑性的目的,因而比修改代码要省心、省事;不需要准备项目运行环境,单元测试代码在运行时的外部依赖比较少,执行验证、调试代码的代价会很低;降低新手程序员进入项目的门槛,有助于积累信心。项目过程中写单元测试的好处一边写代码,一边检查代码中的小错误或者小疏忽,提前解决代码中可能存在的笔误;为了让单元测试代码更好写,需要花点心思在思考类和方法的结构,好处是可以有效的提升代...
            0 0 1131
            分享
          •   为什么会有“在浪费时间”的感受出现呢?  纯功能测试,重复且繁琐  纯粹的“点点点”的工作,没有太多的技术性,自然工作也没有太多的自主性。  其实很多刚进入测试行业的同学都有这种感受,特别是大部分进入的是中小型公司,企业本身对产品的要求就不高,保证基本功能能用就行,自然不会涉及到诸如性能、自动化、安全性的工作。  所以每天的工作就是重复点击页面,点击 APP 各个按钮,简单而机械的操作,重复繁琐且没有任何挑战!  长此以往,在公司里面,测试的工作价值也没有被体现出来,然后自己的自信和底气都被消磨殆尽了,可能会开始质疑自己,甚至质疑自己工作的意义,挫败感油然而生!  那么...
            0 0 401
            分享
          • 一、前言618期间上线一个活动项目。但上线不顺利,当天就出现了性能问题,接口超时,用户无法打开网页,最后不得的临时下线。花了三天两夜,重构了后台核心代码,才让活动进行下去。回头看了一下自己的时间记录,从5月31号那天晚上8点25分开始准备上线,发现异常,分析原因,重构代码,离开公司时已经是6月2号的23点54,经历51小时29分,中间的睡眠时间不到5个小时,这已经是爆发小宇宙了。这一波刚过去了,一波未平另一波又起,由于活动的奖励丰厚,大批羊毛党闻风而至,某宝上公开卖脚本的都有了,严重影响了正常用户薅羊毛。某客户反馈说:我们别说薅羊毛了,现在是整头羊都被他们牵走了!接下来的几天,又得和薅羊毛的脚...
            14 14 879
            分享
      • 51testing软件测试圈微信