9.性能测试工具Locust的高级使用——分布式使用Locust及定制Locust

载*请注明原始出处: http://blog.csdn.net/a464057216/article/details/48448231

后续此博客不再更新,欢迎大家搜索关注微信公众号“测开之美”,测试开发工程师技术修炼小站,持续学习持续进步。
在这里插入图片描述

当一台机器已经达到Locust工具能够模拟的用户数量上限时,我们不得不在另外几台机器上部署Locust,然后拷贝一份一模一样的脚本,进行分布式Locust的使用。一般在使用的时候,有一台机器作为主机(master),其余机器作为备机(slave)。我在工作中一般将virtualenv和locustfile.py放在Git上,每次测试前以master机器的代码为基准,先push到远端,再在其他所有slave机器上pull一遍保证一致性。下面分别介绍。
在主机A(IP地址为192.168.1.2)上运行命令:

mars@mars-Ideapad-V460:~/test$ locust --master
[2015-09-14 22:14:48,792] mars-Ideapad-V460/INFO/locust.main: Starting web monitor at *:8089
[2015-09-14 22:14:48,867] mars-Ideapad-V460/INFO/locust.main: Starting Locust 0.7.3

上面的命令会在主机上开启Locust的侦听服务,主机不会模拟任何Locust用户,也不会做任何测试活动,这些都是备机干的事,主机只负责侦听备机发来的统计数据和生成WEB的观察界面。也可以指定master机器监听的端口(如果指定的端口是n,则会同时监听端口n+1,--master-bind-port的默认值是5557):

mars@mars-Ideapad-V460:~/test$ locust --master --master-bind-port=4445
[2015-09-14 22:19:00,972] mars-Ideapad-V460/INFO/locust.main: Starting web monitor at *:8089
[2015-09-14 22:19:00,974] mars-Ideapad-V460/INFO/locust.main: Starting Locust 0.7.3

也可以通过--master-bind-host指定Locust主机服务绑定到哪个网卡,如果主机有多个网络,可以做如下指定(--master-bind-host的默认值是*):

mars@mars-Ideapad-V460:~/test$ locust --master --master-bind-host=192.168.1.2
[2015-09-14 22:22:31,331] mars-Ideapad-V460/INFO/locust.main: Starting web monitor at *:8089
[2015-09-14 22:22:31,335] mars-Ideapad-V460/INFO/locust.main: Starting Locust 0.7.3

在备机B上运行如下命令:

mars@mars-Ideapad-V460:~/test$ locust --slave --master-host=192.168.1.2
[2015-09-14 22:24:12,980] mars-Ideapad-V460/INFO/locust.main: Starting Locust 0.7.3

此时在主机上会看到如下信息:

[2015-09-14 22:24:12,981] mars-Ideapad-V460/INFO/locust.runners: Client ‘mars-Ideapad-V460_e3ee672bdd31a05544223eb1cc66edb2’ reported as ready. Currently 1 clients ready to swarm.

--master-host的默认值是127.0.0.1,如果主机A使用的不是默认监听端口,也可以使用如下命令指定目的主机端口(如果指定的端口是n,则会同时监听端口n+1,--master-port的默认值是5557):

mars@mars-Ideapad-V460:~/test$ locust --slave --master-host=192.168.1.2 --master-port=4445
[2015-09-14 22:28:17,837] mars-Ideapad-V460/INFO/locust.main: Starting Locust 0.7.3

Locust其实也可以在一个机器的多个进程中运行,一个进程作为主进程,其余进程作为备进程,比如在终端运行如下命令:

mars@mars-Ideapad-V460:~/test$ locust --master
[2015-09-14 22:41:53,213] mars-Ideapad-V460/INFO/locust.main: Starting web monitor at *:8089
[2015-09-14 22:41:53,214] mars-Ideapad-V460/INFO/locust.main: Starting Locust 0.7.3

然后重新打开一个终端窗口,运行:

mars@mars-Ideapad-V460:~/test$ locust --slave
[2015-09-14 22:42:01,902] mars-Ideapad-V460/INFO/locust.main: Starting Locust 0.7.3

如果要终止分布式Locust的运行,直接在master机器上Ctrl + C关闭即可,slave机器会接收到停止信号自动停止运行。

前一篇博客中提到Locust的两个钩子,分别和master接受数据及slave发送数据有关:

  1. report_to_master:slave向master发送数据时触发,钩子函数定义需要提供如下参数:

client_id:slave的client id
data:slave向master发送的数据,是一个dict类型的参数。注意stats、errors是Locust使用的key,自定义时不要使用这两个key。

  1. slave_report:master接收到slave发送来的数据时触发,钩子函数定义需要提供如下参数:

client_id:slave的client id
data:slave向master发送的数据,是一个dict类型的参数。

下面举一个使用这两个钩子函数的例子:

from locust import HttpLocust, TaskSet, events, task

def on_report_to_master(client_id, data):
    data['mars'] = 'loo'
    print "Slave: Client %s, data " % client_id, data

def on_slave_report(client_id, data):
    print "Master Recive: Client %s, data " % client_id, data

events.report_to_master += on_report_to_master
events.slave_report += on_slave_report

class UserTask(TaskSet):
    @task(1)
    def job(self):
        pass

class User(HttpLocust):
    task_set = UserTask
    min_wait = 3000
    max_wait = 5000
    host = 'http://www.baidu.com'

运行之后,master机器的输出如下:

(env) Mars:tmp Mars$ locust --master
[2016-06-25 18:27:37,736] localhost/INFO/locust.main: Starting web monitor at *:8089
[2016-06-25 18:27:37,737] localhost/INFO/locust.main: Starting Locust 0.7.5
[2016-06-25 18:27:37,881] localhost/INFO/locust.runners: Client 'localhost_3320bbf029a4740346dbf04271927bb1' reported as ready. Currently 1 clients ready to swarm.
[2016-06-25 18:27:37,881] localhost/INFO/stdout: Master Recive: Client localhost_3320bbf029a4740346dbf04271927bb1, data
[2016-06-25 18:27:37,881] localhost/INFO/stdout: 
[2016-06-25 18:27:37,881] localhost/INFO/stdout: {'errors': {}, 'stats': [], 'user_count': 0, 'mars': 'loo'}

slave机器的输出如下:

(env) Mars:tmp Mars$ locust --slave
[2016-06-25 18:27:34,092] localhost/INFO/locust.main: Starting Locust 0.7.5
[2016-06-25 18:27:34,092] localhost/INFO/stdout: Slave: Client localhost_3320bbf029a4740346dbf04271927bb1, data
[2016-06-25 18:27:34,092] localhost/INFO/stdout: 
[2016-06-25 18:27:34,092] localhost/INFO/stdout: {'errors': {}, 'stats': [], 'mars': 'loo'}

最后,Locust工具支持MIT License,基于FLask框架开发,如果想在它的基础上对功能进行修改可以先学习下它的源码再进行修改。

比如如果想要增加新的Web界面,可以参考如下代码:

from locust import web, Locust, TaskSet, task

@web.app.route("/mars")
def my_added_page():
        return "Another page"

class UserTask(TaskSet):
    @task
    def job(self):
        pass

class User(Locust):
    task_set = UserTask
    min_wait = 1000
    max_wait = 2000

打开浏览器访问可以看到如下页面:

这里写图片描述

如果觉得我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
Locust是一个分布式用户负载测试工具,用于对网站或其他系统进行负载测试,以确定系统可以处理多少个并发用户。在测试期间,可以通过定义每个用户的行为,并通过Web UI实时监视测试过程。关于Locust的代码实战和结果分析,可以参考引用\[2\]中提供的链接,该链接提供了深入讨论Locust性能自动化的文章。此外,引用\[3\]中的文章也提供了关于Locust的实战介绍,可以进一步了解Locust性能测试实践。 #### 引用[.reference_title] - *1* [Python性能测试框架Locust实战教程](https://blog.csdn.net/xfw17397388089/article/details/129162109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [深聊性能测试,从入门到放弃之:Locust性能自动化(二)代码实战](https://blog.csdn.net/wuyoudeyuer/article/details/108596407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Locust 性能测试实战(一)](https://blog.csdn.net/weixin_43431593/article/details/107710571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值