python利用JMeter测试Tornado的多线程


Posted in Python onJanuary 12, 2020

JMeter的简介

  JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。

  JMeter的下载网址为:https://jmeter.apache.org/download_jmeter.cgi,下载前请先确定电脑中安装了Java,下载完毕后点击bin文件夹下的"meter.bat"(Windows系统)或者"jmeter"可执行文件(Unix系统)即可,界面如下:

python利用JMeter测试Tornado的多线程

  我们将在下面的章节中学习如何使用JMeter,以Tornado的多线程为例。

JMeter使用,以Tornado多进程为例

  我们将会以Tornado的多线程为例,描述如何使用JMeter。测试的Tornado多线程的Python代码如下:

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Sanya Hainan
# time: 2020-01-08 21:48
import time
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options

from tornado import gen
from tornado.concurrent import run_on_executor
from concurrent.futures import ThreadPoolExecutor

# 定义端口为9090
define("port", default=9090, help="run on the given port", type=int)


# 单线程测试
class SanyaHelloHandler(tornado.web.RequestHandler):
  # get 函数
  def get(self):
    time.sleep(0.5)
    self.write('Hello from Sanya!')

# 多线程测试
class ShanghaiHelloHandler(tornado.web.RequestHandler):
  executor = ThreadPoolExecutor(4)

  @gen.coroutine
  def get(self):
    result = yield self.doing()
    self.write(result)

  # 使用tornado 线程池
  @run_on_executor
  def doing(self):
    time.sleep(0.5)
    return 'Hello from Shanghai!'


# 主函数
def server():
  # 开启tornado服务
  tornado.options.parse_command_line()
  # 定义app
  app = tornado.web.Application(
      handlers=[(r'/sanya', SanyaHelloHandler),
           (r'/shanghai', ShanghaiHelloHandler)
           ],  # 网页路径控制
     )
  http_server = tornado.httpserver.HTTPServer(app)
  http_server.listen(options.port)
  http_server.start()
  tornado.ioloop.IOLoop.instance().start()

server()

对上面的程序做个简单说面:

  • /sanya路径对应SanyaHelloHandler,该HTTP接口为get请求,单线程;
  • /shanghai路径对应 ShanghaiHelloHandler,该HTTP接口为get请求,用线程池实现多线程,线程数为4;

  启动上述Python程序,下一步描述如何使用JMeter。

  首先新建一个测试计划(Test Plan),取名为tornao测试,如下:

python利用JMeter测试Tornado的多线程

  右击选择Add,选择Threads(Users),再选择Thread Group,填写信息如下:

python利用JMeter测试Tornado的多线程

填写Thread Group的名称为“tornado单线程测试”,“Number of Threads”为20,表示模拟20个用户,“Ramp-Up period”为1,表示1秒内发送所有用户的请求,“Loop Count”为2,表示每个用户发送2次请求,因此一共为40次请求。

  在“tornado单线程测试”上右击选择Add,选择Sampler,再选择HTTP Request,填写信息如下:

python利用JMeter测试Tornado的多线程

该Thread Group用于测试tornado的sanya这个路径对应的HTTP请求。

  最后我们添加一下对这个测试的一些监控(Listener),用于统计该测试的性能。在“sanya_test”上右击Add,选择Listener,依次选择“View Results Tree”,“Summary Report”,“Aggregate Report”和“Aggregate Graph”,分别代表每次测试结果,总的测试结果,聚合测试结果,聚合测试图展示。

  在“tornado单线程测试上”右击选择start,测试结果如下(只展示Summary Report和Aggregate Graph):

python利用JMeter测试Tornado的多线程

python利用JMeter测试Tornado的多线程

  可以发现,该压力测试下,请求的平均时间为7472毫秒,1秒2.0次请求(TPS)。

  我们再以同样的方式测试shanghai这个接口,测试结果如下:

python利用JMeter测试Tornado的多线程

python利用JMeter测试Tornado的多线程

  可以发现,该压力测试下,请求的平均时间为1718毫秒,1秒7.7次请求(TPS)。

  根据这次测试,我们也发现tornao的多线程机制发挥了作用。

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python遍历类中所有成员的方法
Mar 18 Python
在Python的Django框架中使用通用视图的方法
Jul 21 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
Aug 07 Python
Python探索之URL Dispatcher实例详解
Oct 28 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
Nov 29 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
Python实现ping指定IP的示例
Jun 04 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
python系列 文件操作的代码
Oct 06 Python
Python使用ElementTree美化XML格式的操作
Mar 06 Python
python要安装在哪个盘
Jun 15 Python
Django 批量插入数据的实现方法
Jan 12 #Python
python处理RSTP视频流过程解析
Jan 11 #Python
pyftplib中文乱码问题解决方案
Jan 11 #Python
python实现实时视频流播放代码实例
Jan 11 #Python
python3下pygame如何实现显示中文
Jan 11 #Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 #Python
Pytorch保存模型用于测试和用于继续训练的区别详解
Jan 10 #Python
You might like
php SQL之where语句生成器
2009/03/24 PHP
基于PHP静态类的原罪详解
2013/05/06 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
2018/05/24 PHP
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
Python做简单的字符串匹配详解
2017/03/21 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
2020/04/07 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
python框架flask入门之路由及简单实现方法
2020/06/07 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
最新远光软件笔试题面试题内容
2013/11/08 面试题
平面设计自荐信
2013/10/07 职场文书
函授自我鉴定
2013/11/06 职场文书
教育学专业实习生的自我鉴定
2013/11/26 职场文书
大学校庆策划书
2014/01/31 职场文书
总经理文秘岗位职责
2014/02/03 职场文书
机电专业大学生职业规划书范文
2014/02/25 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
考博专家推荐信
2014/05/10 职场文书
新教师个人工作总结
2015/02/06 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL