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使用urllib2获取网络资源实例讲解
Dec 02 Python
Python实现备份文件实例
Sep 16 Python
举例详解Python中的split()函数的使用方法
Apr 07 Python
Python实现获取操作系统版本信息方法
Apr 08 Python
详解Python中break语句的用法
May 14 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
Dec 04 Python
python操作excel的方法
Aug 16 Python
Python如何爬取实时变化的WebSocket数据的方法
Mar 09 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
anaconda中更改python版本的方法步骤
Jul 14 Python
python实现简单遗传算法
Sep 18 Python
python基于turtle绘制几何图形
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
基于mysql的论坛(5)
2006/10/09 PHP
ASP和PHP都是可以删除自身的
2007/04/09 PHP
php stripslashes和addslashes的区别
2014/02/03 PHP
php的curl封装类用法实例
2014/11/07 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
2018/04/04 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
JavaScript 学习笔记(十六) js事件
2010/02/01 Javascript
推荐20家国外的脚本下载网站
2011/04/28 Javascript
JS编程小常识很有用
2012/11/26 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
python 实现视频 图像帧提取
2019/12/10 Python
python剪切视频与合并视频的实现
2020/03/03 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
介绍一下gcc特性
2012/01/20 面试题
上班睡觉检讨书
2014/01/09 职场文书
迎八一活动主题
2014/01/31 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
庆七一主持词
2015/06/29 职场文书
谢师宴家长致辞
2015/07/27 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
通过Python把学姐照片做成拼图游戏
2022/02/15 Python