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中暂存上传图片的方法
Feb 18 Python
深入讲解Java编程中类的生命周期
Feb 05 Python
python logging 日志轮转文件不删除问题的解决方法
Aug 02 Python
python中logging包的使用总结
Feb 28 Python
Python Requests模拟登录实现图书馆座位自动预约
Apr 27 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
Oct 22 Python
Python3中列表list合并的四种方法
Apr 19 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
Jun 08 Python
python解析xml简单示例
Jun 21 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
Python flask框架实现浏览器点击自定义跳转页面
Jun 04 Python
python软件都是免费的吗
Jun 18 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
sony ICF-2010 拆解与改装
2021/03/02 无线电
PHP安全配置
2006/10/09 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
php异常处理方法实例汇总
2015/06/24 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
实例讲解php实现多线程
2019/01/27 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
使用js的replace()方法查找字符示例代码
2013/10/28 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
工程造价专业大学生自荐信
2013/10/01 职场文书
《陶罐和铁罐》教学反思
2014/02/19 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书
体检通知范文
2015/04/21 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python