项目性能测试报告

  • 更新时间:
  • 1296人关注
  • 点击下载

这是一个不错的性能测试类学习资源,由尚和安 提供,主要知识点是关于项目性能、性能测试、测试报告、性能测试的内容,已被390人关注,同类资源中评分为8.1分。

资源详情相关推荐
  • 大小:366 KB
  • 类别:性能测试
  • 格式:PDF
  • 编辑:阴仙仪
  • 热度:808
  • LoadRunner性能测试巧匠训练营
  • CSS重构:样式表性能调优
  • 大型网站性能优化实战
  • KVM实战:原理、进阶与性能调优
  • Linux性能优化
  • 1.分析概要

    2.每秒事务数情况TPS

    3.每秒点击次数情况

    4.系统整体情况:

    应用服务器

    5.用户CPU使用情况:

    6.内存使用情况:

    精选笔记:python性能测试工具locust的使用

    9小时22分钟前回答

    一、简介

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

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

    二、安装

     用 pip 管理工具安装: 

    pip3 install locust

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

    三、压测过程

    1.编写脚本

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

    from locust import HttpLocust, TaskSet, task, between
    import os,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")
        assert json.loads(r.text)['Error'] == 0
    
      @task(1)
      def sale(self):
        self.client.get("/sz/Home/FlashSaleRequest")
        assert json.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 -f stress_test.py ')

    locust 运行时:

    • on_start()  :每个并发用户在开始前各执行一次
    • on_stop():每个并发用户在结束后各执行一次
    • @task: 通过装饰器设置运行权重,比如上面代码中 执行任务 home_index 和 sale 的总请求为 2:1
    • assert:断言设置
    • wait_time :每个任务之间设置间隔时间,随机从3~5区间内取,单位是 s
    • locust -f:指定 .py 压测脚本路径

    2. Locust 监控

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

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

    3.运行模式

     1.web UI 模式

    locust -f stress_test.py --web-host 10.1.44.31 --web-port 8090

    --web-host:指定 web UI IP,默认 localhost

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

    2. no web 模式

    locust -f stress_test.py --no-web -c 100 -r 20 -t 120

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

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

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

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

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

    4.分布式进程

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

    单台多进程:

     先启一个 master

    locust -f /home/script/stress_test.py --web-host 10.1.62.223 --master

     再启 8 个 slave

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

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

    多台多进程:

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

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

    四、总结

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

    以上就是python性能测试工具locust的使用的详细内容,更多关于python性能测试工具locust的资料请关注码农之家其它相关文章!

    展开阅读

    相关资源

    学习笔记

    1小时14分钟前回答

    22点关于jquery性能优化的建议

    首先,在脑子里牢牢记住 jQuery 就是 javascript。这意味着我们应该采取相同的编码惯例,风格指南和最佳实践。 首先,如果你是一个 javascript 新手,我建议您阅读 《24 JavaScript Best Practices for Beginners》, 这是一篇高质量的 javascript 教程,接触 jQuery 之前最好先阅读。 当你准备使用 jQuery,我强烈建议你遵循下面这些指南: 1. 缓存变量 DOM 遍历是昂贵的,所以尽量将会重用的元素缓存。 //糟糕 h=$('#element').height(); $('#element').css('height',h-20); //建议 $element=$('#element'); h=$element.height(); $element.css('height',h-20); 2. 避免全局变量 jQuery 与 javascript 一样,一般来说,最好确保你的变量在函数作用域内。 //糟糕 $element=$('#elem……

    3小时49分钟前回答

    提升Python程序性能的7个习惯

    掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费。 1、使用局部变量 尽量使用局部变量代替全局变量:便于维护,提高性能并节省内存。 使用局部变量替换模块名字空间中的变量,例如 ls = os.linesep。一方面可以提高程序性能,局部变量查找速度更快;另一方面可用简短标识符替代冗长的模块变量,提高可读性。 2、减少函数调用次数 对象类型判断时,采用isinstance()最优,采用对象类型身份(id())次之,采用对象值(type())比较最次。 判断变量num是否为整数类型 type(num) == type(0) #调用三次函数type(num) is type(0) #身份比较isinstance(num,(int)) #调用一次函数 不要在重复操作的内容作为……