locustio压力测试

简介: 2015年7月17日 22:19:17 星期五 这里记录下学习道路, 防止忘了 操作系统是centos: 首先是linux系统, 装有Python 和 Python-devel (否则安装软件会提示python.

2015年7月17日 22:19:17 星期五

这里记录下学习道路, 防止忘了

操作系统是centos:

首先是linux系统, 装有Python 和 Python-devel (否则安装软件会提示python.h找不到, gcc error等问题...... )

1 yum install -y python
2 yum install -y python-devel

然后安装pip

  下载 get-pip.py 文件到linux

  运行Python 命令执行该文件: 

python get-pip.py

安装 greenlet (协程/微线程)

pip install greenlet

安装 gevent (网络io用)

pip install gevent

安装locustio: 

pip install locustio

进行压测

locust --host=http://127.0.0.1 --port=8089 -f ./test.py

locustio有自己的web页面, 上边的命令意思是: 在浏览器里打开 http://127.0.0.1:8089 显示locustio的web控制页面, 需要被压测的网站域名和URL放在test.py里

====================

下边列出缺少python-devel(Ubuntu: python-dev)包时的错误信息, 可以通过百度搜索, 让出错的同学搜索到本篇文章解决类似的问题

Command "/usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-6zEhZN/greenlet/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-dEs44u-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-6zEhZN/greenlet

============

概念理解(翻译):

1. 超级类是 locust 类,它的每一个实例代表了一个用户, 守护程序会为每一个模拟用户生成一个实例

2. httplocust 继承了locust 类, 添加了可以发送http请求的功能

3. locust 有一个属性(成员变量)是 task_set , 它可以定义用户的行为, 就是访问哪些URL, post还是get, 每个连接占总访问量比是多少

这个task_set 是类TaskSet(或其子类)的一个实例, 上边说的各种行为就是在这个类里边定义的

4. locsut类:

属性: min_wait/max_wait  模拟用户有在上边说的类中定义了好多任务/行为, 每个任务/行为间隔多久执行一次, 单位是毫秒, 默认1000, 也即隔一秒种后执行下一个任务

属性: weight 权重: 模拟时, 同一段时间, 手机用户的访问量要比PC的访问量大, 那么对应的locust(或其子类)的weight值就大小不一

属性: host 就是需要被压测的网站的域名(或域名前缀), 如果启动服务时没有通过参数-host来指定域名, 那么就用使用该host属性指定的值

TaskSet类:

1. 推荐的是, 在taskset类(或子类)中通过在行为(回调函数)前加@task(weight)描述符来指定某一个行为被执行的频率

2. 或者先定义行为(回调函数), 然后通过属性tasks来指定每一个行为被执行的频率 tasks=[fun1, fun2....] 或者 tasks={fun1:weight1, fun2:weight2......}

3. 不管怎样定义, 里边的行为或函数是被随机调用/执行的, 只是根据weight的不通, 随机到的频率不通而已

4. 而且, 行为/任务可以嵌套执行, 先执行task1(也就是 fun1 下同), 然后执行task2 ..... 这样会更真实的模拟,

其写法就是, 将这些有关联任务定义/封装到一个taskset子类中, 然后通过上边介绍的 tasks属性tasks={classname:weight}, 在另一个TaskSet子类中去关联该类以达到嵌套的目的

5. 在执行子任务时, 通过 self.interrupt() 来终止子任务的执行, 来回到父任务类中执行, 否则子任务会一直执行

6. 成员函数, on_start(), 如果定义的话, 就会在开始的时候执行

HttpLocust类

1. 他可以发送http请求, 他有一个属性叫client(实例化的时候自动生成), 存储HttpSession类的实例(HttpSession类在实例化Locust的时候自动创建), 用来保存请求session

2. TaskSet类里也有属性client: self.client.get()或者self.client.post(), 这个client内部就是httplocust里的client

3. 请求返回一个对象, 他有两个成员, response.status_coderesponse.content

4. 如果因连接失败, 超时等等原因造成请求失败, 不会发出异常, 而是将上边的content置为空, status_code 置为0

5. 可以对返回content内容自定义处理, 因为有的时候返回404是你希望得到的

1 with client.get("/does_not_exist/", catch_response=True) as response:
2     if response.status_code == 404:
3         response.success()

6.对网站来说, 一个URL的参数是固定的, 但是参数值是不定的, 也可以处理

1 # Statistics for these requests will be grouped under: /blog/?id=[id]
2 for i in range(10):
3     client.get("/blog?id=%i" % i, name="/blog?id=[id]")

 

其他, locust还有很多事件hook可以扩展开发, 有需要的可以去看官方文档, 内容没多少

 

 

Finger PHP 框架  

目录
相关文章
|
SQL 存储 Web App开发
PolarDB-X 分布式数据库中的外键
外键是关系型数据库中非常便利的一种功能,它通过一个或多个列为两张表建立连接,从而允许跨表交叉引用相关数据。外键通过约束来保持数据的一致性,通过级联来同步数据在多表间的更新和删除。在关系数据库系统中,大多数表都遵循外键的概念。
|
前端开发
饿了么el-dialog自定义内容以及el-dialog自定义样式
饿了么el-dialog自定义内容以及el-dialog自定义样式
1049 0
|
UED 索引
震惊!大文件上传也能如此丝滑?揭秘断点续传黑科技,让你的文件传输快如闪电,再也不用担心中断烦恼!
【8月更文挑战第4天】互联网的发展使大文件上传成为应用常见需求,但易受网络等因素影响中断。断点续传技术将文件分块,每块独立上传,若中断可续传未完成部分,提升效率和体验。实现包括文件分块、初始化上传、逐块上传与校验、服务器合并文件,及处理续传逻辑。通过客户端与服务器协作,优化上传流程,适应网络波动,确保数据完整性。随着技术进步,断点续传方案将更高效可靠。
651 13
|
机器学习/深度学习 人工智能 测试技术
探索AI在软件开发中的应用:提升效率与创新
【10月更文挑战第25天】本文探讨了AI在软件开发中的应用,包括自动化测试、代码生成与优化、智能项目管理等方面,介绍了TensorFlow、PyTorch和GitHub Copilot等实用工具,展望了AI在未来的潜力,并强调了AI对提升开发效率和创新能力的重要性。
|
算法 小程序 JavaScript
【工具】我错了,这工具才是截图软件的神
本文介绍了一款名为Pixpin的强大截图工具,作者曾是Snipaste的忠实用户,但在尝试Pixpin后决定改换门庭。Pixpin不仅具备强大的截图功能,还支持文本识别、节点标注、长截图、颜色识别及贴图等功能,并且拥有活跃的社区反馈机制。文章详细讲解了Pixpin的各项特色功能及其使用方法,并提供了官方下载链接。通过实际操作演示,展示了Pixpin的便捷性和实用性。
770 0
【工具】我错了,这工具才是截图软件的神
|
存储 安全 Java
Java一分钟:缓冲流提升读写效率
【5月更文挑战第11天】Java I/O的缓冲流通过内存缓冲区提升读写性能,实现批量处理和预读写。注意避免缓冲区溢出、忘记刷新和关闭以及数据同步问题。示例展示了字节和字符缓冲流在文件复制中的应用,降低磁盘I/O次数,提高效率。熟练掌握缓冲流使用有助于优化Java程序的I/O性能。
404 2
|
SQL 负载均衡 前端开发
mysql主从复制和读写分离,看完这篇你就彻底懂了
mysql主从复制和读写分离,看完这篇你就彻底懂了
1912 1
mysql主从复制和读写分离,看完这篇你就彻底懂了
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
存储 监控 iOS开发
如何在iOS手机上查看应用日志
如何在iOS手机上查看应用日志
346 0
|
移动开发 小程序 JavaScript
uni-app兼容app-h5-微信小程序——下拉菜单、搜索栏
uni-app兼容app-h5-微信小程序——下拉菜单、搜索栏
1387 0
uni-app兼容app-h5-微信小程序——下拉菜单、搜索栏