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读取Excel的方法实例分析
Jul 11 Python
Python将图片批量从png格式转换至WebP格式
Aug 22 Python
python 自动化将markdown文件转成html文件的方法
Sep 23 Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 Python
使用TensorFlow实现SVM
Sep 06 Python
实例讲解Python脚本成为Windows中运行的exe文件
Jan 24 Python
基于python的socket实现单机五子棋到双人对战
Mar 24 Python
Python range、enumerate和zip函数用法详解
Sep 11 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
Apr 30 Python
python使用openpyxl操作excel的方法步骤
May 28 Python
Selenium及python实现滚动操作多种方法
Jul 21 Python
Python命名空间及作用域原理实例解析
Aug 12 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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
2013/02/28 PHP
php中上传文件的的解决方案
2018/09/25 PHP
thinkPHP+LayUI 流加载实现功能
2019/09/27 PHP
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
优化javascript的执行效率一些方法总结
2013/12/25 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
Highcharts使用简例及异步动态读取数据
2015/12/30 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
详解wow.js中各种特效对应的类名
2017/09/13 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
2018/10/19 Javascript
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
Django中使用Celery的方法示例
2018/11/29 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
绩效工资实施方案
2014/03/15 职场文书
初中班级口号
2014/06/09 职场文书
班级活动总结格式
2014/08/30 职场文书
工会工作个人总结
2015/03/03 职场文书
2015年小班保育员工作总结
2015/05/27 职场文书
学校运动会开幕词
2016/03/03 职场文书
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL
详解Python中的for循环
2022/04/30 Python