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中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
Oct 23 Python
Python学习笔记之os模块使用总结
Nov 03 Python
python实现神经网络感知器算法
Dec 20 Python
为什么入门大数据选择Python而不是Java?
Mar 07 Python
Python实现的基于优先等级分配糖果问题算法示例
Apr 25 Python
基于python实现聊天室程序
Jul 27 Python
Python实现简易过滤删除数字的方法小结
Jan 09 Python
python3实现小球转动抽奖小游戏
Apr 15 Python
python顺序执行多个py文件的方法
Jun 29 Python
Python简单处理坐标排序问题示例
Jul 11 Python
Python的对象传递与Copy函数使用详解
Dec 26 Python
基于python+selenium自动健康打卡的实现代码
Jan 13 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
PHP4引用文件语句的对比
2006/10/09 PHP
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
PHP读取MySQL数据代码
2008/06/05 PHP
PHP的cURL库简介及使用示例
2015/02/06 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
js对象的构造和继承实现代码
2010/12/05 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
jQuery实现获取绑定自定义事件元素的方法
2015/12/02 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
Python星号*与**用法分析
2018/02/02 Python
python使用mysql的两种使用方式
2018/03/07 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
pymysql 开启调试模式的实现
2019/09/24 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
python实现从ftp服务器下载文件
2020/03/03 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
python实现定时发送邮件
2020/12/23 Python
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
扬州个园导游词
2015/02/06 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS
redis哨兵常用命令和监控示例详解
2021/05/27 Redis