网站优化公司有哪些,中国容桂品牌网站建设,改号宝网站搭建,成都艾邦视觉专业网站建设公司01、Locust介绍
Locust 一个开源性能测试工具#xff0c;使用Python代码来定义用户行为#xff0c;用它可以模拟百万计的并发用户访问你的系统。
性能工具对比#xff1a; LoadRunner 是非常有名的商业性能测试工具#xff0c;功能非常强大。使用也比较复杂#xff0c;目…
01、Locust介绍
Locust 一个开源性能测试工具使用Python代码来定义用户行为用它可以模拟百万计的并发用户访问你的系统。
性能工具对比 LoadRunner 是非常有名的商业性能测试工具功能非常强大。使用也比较复杂目前大多介绍性能测试的书籍都以该工具为基础甚至有些书整本都在介绍 LoadRunner 的使用。
Jmeter 同样是非常有名的开源性能测试工具功能也很完善它可以作为接口测试工具的使用。但实际上它是一个标准的性能测试工具
Locust 同样是性能测试工具虽然官方这样来描述它 “An open source load testing tool.” 但其它和前面两个工具有着较大的不同。相比前面两个工具功能上要差上不少但它也并非优点全无。 Locust 完全基于 Python 编程语言采用 Pure Python 描述测试脚本并且 HTTP 请求完全基于 Requests 库。除了 HTTP/HTTPS 协议Locust 也可以测试其它协议的系统只需要采用Python调用对应的库进行请求描述即可。 LoadRunner 和 Jmeter 这类采用进程和线程的测试工具都很难在单机上模拟出较高的并发压力。Locust 的并发机制摒弃了进程和线程采用协程gevent的机制。协程避免了系统级资源调度由此可以大幅提高单机的并发能力。 02、Locust安装
pip安装
pip install locust
源码安装
git clonehttps://github.com/locustio/locust/
cd locust
python setup.py install
现在我也找了很多测试的朋友做了一个分享技术的交流群共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源没人解答问题坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化性能安全测试开发等等方面有一定建树的技术大牛
分享他们的经验还会分享很多直播讲座和技术沙龙
可以免费学习划重点开源的
qq群号691998057【暗号csdn999】 03、创建性能测试
01、编写简单脚本
from locust import HttpLocust, TaskSet, task # 定义用户行为
class UserBehavior(TaskSet): # 任一测试用例执行前均会执行一次 def on_start(self): print(开始性能测试) task(1) # 表示一个用户为行访问百度首页。使用 task装饰该方法为一个事务。client.get()用于指请求的路径“ / ”因为是百度首页所以指定为根路径。 def index(self): self.client.get(/) task(2) # task()参数用于指定该行为的执行权重。参数越大每次被虚拟用户执行的概率越高。如果不设置默认为1。 def index2(self): self.client.get( /s?wdlocustrsv_spt1rsv_iqid0xbb8514200006b7d0issp1f8rsv_bp1rsv_idx2ieutf-8tnbaiduhome_pgrsv_enter1rsv_dltbrsv_sug38rsv_sug19rsv_sug7101rsv_sug20inputT1458rsv_sug41911rsv_sug2) # 用于设置性能测试
class WebsiteUser(HttpLocust): # 指向一个定义的用户行为类。 task_set UserBehavior # 执行事务之间用户等待时间的下界单位毫秒。如果TaskSet类中有覆盖以TaskSet 中的定义为准。 min_wait 3000 # 执行事务之间用户等待时间的上界单位毫秒。如果TaskSet类中有覆盖以TaskSet中的定义为准。 max_wait 6000 # 设置 Locust 多少秒后超时如果为 None ,则不会超时。 stop_timeout 5 # 一个Locust实例被挑选执行的权重数值越大执行频率越高。在一个 locustfile.py 文件中可以同时定义多个 HttpLocust 子类然后分配他们的执行权重 weight 3 # 脚本指定host执行测试时则不在需要指定 host https://www.baidu.com 02、执行测试
1、web执行
启动服务
locust -f test.py --hosthttps://www.baidu.com
locust -f test.py # 如果脚本中已经指定host则不需要再次指定 -f指定性能测试脚本文件 –host指定被测试应用的URL的地址注意访问百度使用的HTTPS协议 执行测试
通过浏览器访问http://localhost:8089Locust启动网络监控器默认为端口号为: 8089 Number of users to simulate 设置模拟用户数
Hatch rateusers spawned/second 每秒产生启动的虚拟用户数
点击 “Start swarming” 按钮开始运行性能测试 结果说明 Type请求的类型例如GET/POST Name请求的路径。这里为百度首页即https://www.baidu.com/ request当前请求的数量 fails当前请求失败的数量 Median中间值单位毫秒一半的服务器响应时间低于该值而另一半高于该值 Average平均值单位毫秒所有请求的平均响应时间 Min请求的最小服务器响应时间单位毫秒 Max请求的最大服务器响应时间单位毫秒 Content Size单个请求的大小单位字节 reqs/sec是每秒钟请求的个数 2、no-web执行
locust -f test.py --hosthttps://www.baidu.com --no-web -c 10 -r 2 -t 1m
locust -f test.py --no-web -c 10 -r 2 -t 1m # 如果脚本中已经指定host则不需要再次指定 –no-web表示不使用Web界面运行测试 -c设置虚拟用户数 -r设置每秒启动虚拟用户数 -t设置设置运行时间 关闭服务可直接CtrlC 03、分布式运行
一旦单台机器不够模拟足够多的用户时Locust支持运行在多台机器中进行压力测试。
为了实现这个你应该在 master 模式中使用–master标记来启用一个 Locust 实例。这个实例将会运行你启动测试的 Locust 交互网站并查看实时统计数据。master 节点的机器自身不会模拟任何用户。相反你必须使用 --slave 标记启动一台到多台 Locustslave 机器节点与标记 --master-host 一起使用(指出master机器的IP/hostname)。
常用的做法是在一台独立的机器中运行master在slave机器中每个处理器内核运行一个slave实例。 注意master 和每一台 slave 机器在运行分布式测试时都必须要有 locust 的测试文件 在 master 模式下启动 Locust:
locust -f my_loucstfile.py --master 在每个 slave 中执行(192.168.0.14 替换为你 master 的IP):
locust -f my_locustfile.py --slave --master-host192.168.0.14
参数说明
--master 设置 Locust 为 master 模式。网页交互会在这台节点机器中运行。
--slave 设置 Locust 为 slave 模式。
--master-hostX.X.X.X 可选项与 --slave 一起结合使用用于设置 master 模式下的 master 机器的IP/hostname(默认设置为127.0.0.1)
--master-port5557 可选项与 --slave 一起结合使用用于设置 master 模式下的 master 机器中 Locust 的端口(默认为5557)。注意locust 将会使用这个指定的端口号同时指定端口1的号也会被占用。因此5557 会被使用Locust将会使用 5557 和 5558。
--master-bind-hostX.X.X.X 可选项与 --master 一起结合使用。决定在 master 模式下将会绑定什么网络接口。默认设置为*(所有可用的接口)。
--master-bind-port5557 可选项与 --master 一起结合使用。决定哪个网络端口 master 模式将会监听。默认设置为 5557。注意 Locust 会使用指定的端口号同时指定端口1的号也会被占用。因此5557 会被使用Locust 将会使用 5557 和 5558。
--expect-slavesX 在 no-web 模式下启动 master 时使用。master 将等待X连接节点在测试开始之前连接。 04、权重分配
Locust支持同一脚本中使用权重的方式达到用例被执行频率不同的问题例如用户流失浏览用户100人注册只有50人不同于Jmeter、LandRunner权重分配方式并不是标准的比例。 权重1 - task
# -*- coding: utf-8 -
from locust import HttpLocust, TaskSet, task
class TestLocust(TaskSet): def on_start(self): print(开始性能测试) task(1) def test_demo_get1(self): self.client.get(url/mock_server/configs/info) task(2) def test_demo_get2(self): self.client.get(/mock_server/mock/show_lists) class Query(HttpLocust): task_set TestLocust min_wait 1000 max_wait 3000 host http://localhost:5000
方法的参数用于指定该行为的执行权重。参数越大每次被虚拟用户执行的概率越高。如果不设置默认为1。 权重2 - weight
# -*- coding: utf-8 -
from locust import HttpLocust, TaskSet, task
class TestLocust(TaskSet): def on_start(self): print(开始性能测试) task def test_demo_get(self): self.runLocust(demoGet.demo_get())
class TestLocust2(TaskSet): def on_start(self): print(开始性能测试) task def test_demo_post(self): page_num, num 10, 1 self.runLocust(demoPost.demo_post(page_num, num)) class QueryOne(HttpLocust): task_set TestLocust min_wait 1000 max_wait 3000 weight 1 host http://localhost:5000 class QueryTwo(HttpLocust): task_set TestLocust2 min_wait 1000 max_wait 3000 weight 3 host http://localhost:5000
执行语句不同 locust -f test.py QueryOne QueryTwo
weight
一个Locust实例被挑选执行的权重数值越大执行频率越高。在一个 locustfile.py 文件中可以同时定义多个 HttpLocust 子类然后分配他们的执行权重 05、参数化
参数化首先需要清楚locust的执行逻辑定义的用户行为下带有task装饰器的函数才会被协程不断的执行
from locust import HttpLocust, TaskSet, task
from random import randint
data1 randint(1, 3) # 定义用户行为
class UserBehavior(TaskSet): def on_start(self): print(开始性能测试) task(1) def index(self): print(data1) self.client.get(/) task(2) def index2(self): data2 randint(1, 3) print(data2) self.client.get( /s?wdlocustrsv_spt1rsv_iqid0xbb8514200006b7d0issp1f8rsv_bp1rsv_idx2ieutf-8tnbaiduhome_pgrsv_enter1rsv_dltbrsv_sug38rsv_sug19rsv_sug7101rsv_sug20inputT1458rsv_sug41911rsv_sug2) class WebsiteUser(HttpLocust): task_set UserBehavior min_wait 3000 max_wait 6000 stop_timeout 5 weight 3 host https://www.baidu.com 根据打印的结果就可以看出data1被设为了全局变量无论怎么多次执行值都不会变data2被设为函数变量因为每次执行该函数接口进行一次请求该变量都会重新执行发生变化。
因此如果接口需要参数不重复将该参数的生成方法写在执行函数中即可如果接口需要的参数保持不变将该参数写为全局变量即可
下面是配套资料对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你 最后 可以在公众号自动化测试老司机 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
如果我的博客对你有帮助、如果你喜欢我的博客内容请 “点赞” “评论” “收藏” 一键三连哦