easy_runner一个简单的压测程序

标签: 未分类 | 发表时间:2011-09-10 17:33 | 作者:jm sun
出处:http://rdc.taobao.com/team/jm

这次再公开一个小工具 easy_runner 一个来用做压测的小工具

我主要用来做MySQL压测的时候,直接压业务端用的.

程序很简单,总共不到400来行,推荐程序员自己压测用,比LoadRunner这种重型压测工具使用起来方便多了

下载可以到 http://code.google.com/p/easy-runner/ checkout出源码来

使用说明见 http://code.google.com/p/easy-runner/wiki/Usage

 

 

介绍

一个Python实现的简单压测工具

Details

Easy Runner主要实现了多线程压测,类似LoadRunner?,能得出QPS和RT,并能通过matlibplot画出曲线图.

特性

  1. 支持多scenario同时执行
  2. 可为不同scenario设置think time和线程数
  3. 支持warming
  4. 可画出性能曲线
  5. 使用方便,启动迅速,一条命令即可开始压测

优势

  1. scenario直接使用python编写scenario,使天然支持多协议
  2. Easy Runner一共300来行代码,维护方便

劣势

  1. 是通过多线程来加大压力,对客户端要求较高,不能有太多的线程数

使用说明

设置篇

见easy_runner下的setting.py进行配置

  • MONITOR_INTERVAL = 1 #设置性能监控的时间间隔,默认为1s,设的越小数据越正确
  • SCENARIOS_PATH=(“./scenario”,) #设置剧本的存放路径,可以设置多个路径,程序会从设置的路径载入剧本
  • LOG_PATH_AND_FILE_NAME = “D:\\tmp\\runner.log” #设置log存放路径,压测信息都会记录在这个log下,以便分析和作图
  • PIC_SAVE_PATH_AND_PREFIX = “D:\\tmp\\pic” #设置性能曲线的生成路径和文件前缀.可设为None,如果为None,生成的图片会直接以窗口方式打开
  • THREAD_RULE=(10,3) #线程预热规则,前一个参数表示预热间隔,后一个参数表示每次预热会启动的线程数,可设为None,如果为None,则无预热

 

剧本编写篇

例子见附件中的easy_runner\scenario\example.py 这是一个压测剧本 其中

  • thread_num=200 为为这个剧本开启的并发线程数
  • think_time = 0 为这个剧本执行时的think time 单位为秒
  • run_count = 1000 为这个脚本的执行次数
  • name=”update” 指定这个剧本的名字,如果不同的剧本使用相同的名字,那么在最后做性能曲线时,相同名字的数据会进行合并显示

 

  • def init(self): 剧本初始化函数
  • def action(self): 剧本会被重复执行的函数..需要返回True为成功,False为失败
  • def destory(self): 剧本执行完后的资源释放函数

注意,剧本的类名必须是class Scenario(core.scenario.abstract_scenario):

使用篇

如果已经做好了设置,也编写好了脚本即可以开始压测了. 开始压测很简单,直接在命令行键入python starter.py 就会开始压测. 这个时候会根据MONITOR_INTERVAL设置的时间间隔,直接输出QPS和RT信息,并同时开始记log (注:如果log已存在的话,原log会被重命名) 如果需要停止压测,在命令行直接输入q 回车 即可结束压测.

生成图形篇

生成图形也很简单,直接在命令行键入python plot.py 就是自动分析刚才的log文件生成图形(plot.py需要matlibplot的支持~)

图形样例如下:

    • 返回成功的QPS:

    • 返回失败的QPS:

    • 总QPS(失败+成功):

    • 响应时间

 

相关 [easy runner 程序] 推荐:

eclipse插件-easy explore

- - 博客园_首页
最近找到一个Eclipse的插件,名字是Easy Explore,是 Easy Structs 其 中的一个部分. 主要的功能就是在Eclipse里面视图的部分如果看到自己的工程,或者Package,包什么的,在安装完该插件以后点击鼠标右键,选 择"Easy Explore"就可以快速的打开该文件的windows存放文件夹,对于快速的导出源文件是一个很有用的插件.

波纹封箱带:Tape With Easy-to-Find End

- Luosky - 爱…稀奇~{新鲜:科技:创意:有趣}
设计师Deockeun An等人告诉我们,它毫无疑问地更应该是波:. 波纹封箱带(Tape With Easy-to-Find End),就为了解决一个问题,怎样能够轻松地找到胶带的接头处——每次用完,将接头横跨两个“波峰”一粘,下次要用的时候,用手指穿过“波谷”就能立马撕下来~. 只是不知道这样的改进对封装的要求高不高,如果太麻烦,可能还是原本平滑的包装更有成本优势啊.

easy Html5 - Jquery Mobile之ToolBars(Header and Footer)

- - 博客园_首页
jquery 在web js框架上的风暴还在继续却也随着移动终端走向了mobile;那么jquery mobile到底包括些什么呢. 页面Header是一个data-role为header的div,当然我们可以在这个div里定义其他任何内容,比如常用的后退按钮等;. 一般在header里添加的button不要太多,添加在header里的按钮带有自动定位功能;.

Easy way—不要被定势思维绑死了!

- 斌 - 乐淘吧
【3】【Easy way】不要被定势思维绑死了~. 【5】快乐男生不为人知的秘密. 换个角度,意境就变了,自己找亮点……. 【9】2011年度 最新款凉鞋. 【10】毕老师,你在想啥呢~. 【11】老人常教导年轻人,做人不能太直白,可是好像有个部位除外……. 【12】【10个可考虑跳槽的信号】1工作中学不到新知识.

更方便喝水的45度瓶口:Easy Drink

- Luosky - 爱…稀奇~{新鲜:科技:创意:有趣}
来自设计师Hsu Hsiang-Min等人的创意,45度瓶口(Easy Drink)看上去挺古怪,但是却会很方便:首先,是喝水时方便,再不需要仰脖之类缺乏优雅的动作了,把瓶子稍微抬起就能喝得见底;其次,是接水方便,喝完之后,可以轻松地伸进纯净水饮水机接水,重复使用更加环保~. 设计师:Hsu Hsiang-Min、Liu Nai-Wen、Chen Yu-Hsin.

渐进使用HTML5语言识别, so easy!

- - 张鑫旭-鑫空间-鑫生活
本文地址: http://www.zhangxinxu.com/wordpress/?p=2408. HTML5语音识别(现在一般用在搜索上),目前相关介绍还是挺多的. 而稍稍多敲几个字母,其就变成了支持HTML5语音API的语音识别文本框了. 我不喜欢嚼人家的烂根子,但是,就算闹得再轰轰烈烈,那些种田的农民伯伯也不知道“半13 连体裤”为何物.

线上服务 CPU 100%?一键定位 so easy!

- - leejun2005的个人页面
经常做后端服务开发的同学,或多或少都遇到过 CPU 负载特别高的问题. 尤其是在周末或大半夜,突然群里有人反馈线上机器负载特别高,不熟悉定位流程和思路的同学可能登上服务器一通手忙脚乱,定位过程百转千回. 对此,也有不少同学曾经整理过相关流程或方法论,类似把大象放进冰箱要几步,传统的方案一般是4步:.

GitHub - yzhang921/CBoard: An easy to use, self-service open BI reporting and BI dashboard platform.

- -
Meta data of CBoard is stotred in embedded DB H2 with file storage, user can change or add your own configuration by yourself then build project and docker image again.

那些说easy girl的人是什么心态?

- - IT瘾-zhihu
其实最讨厌easy girl的人不在知乎,甚至不在中国,而是在西方的混血儿. 你去看看那些混血儿的论坛:. 毕竟easy girl和中国男人关系不大,中国男人不是受害者,可是easy girl的孩子就不一样了,那些亚欧混血儿,是直接的受害者,他们完全有资格评价自己母亲,还有easy girl,那么我们看看他们怎么评价的吧.

Android 应用程序

- - CSDN博客推荐文章
Android 应用程序由四个模块构造而成:Activity、Intent 、Content Provider 、Service. 下面简单介绍一下如下模块的含义:. 1、Activity  "活动". 一个Activity就是单独的屏幕,每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口并对事件作出响应.