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 with的用法
Aug 22 Python
Python进程通信之匿名管道实例讲解
Apr 11 Python
轻松掌握python设计模式之策略模式
Nov 18 Python
深入了解Python中pop和remove的使用方法
Jan 09 Python
python如何读写json数据
Mar 21 Python
python实现验证码识别功能
Jun 07 Python
Python实现按逗号分隔列表的方法
Oct 23 Python
Python设计模式之代理模式实例详解
Jan 19 Python
详解python读取image
Apr 03 Python
python 比较字典value的最大值的几种方法
Apr 17 Python
为什么是 Python -m
Jun 19 Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 01 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对称加密算法示例
2014/05/07 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
PHP Pipeline 实现中间件的示例代码
2020/04/26 PHP
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
微信小程序 video组件详解
2016/10/25 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
JS 设置Cookie 有效期 检测cookie
2017/06/15 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
koa socket即时通讯的示例代码
2018/09/07 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
vue-router的hooks用法详解
2020/06/08 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
Python抓取框架 Scrapy的架构
2016/08/12 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
python中字符串的编码与解码详析
2020/12/03 Python
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
计算机网络专业个人的自我评价
2013/10/17 职场文书
节约用水标语
2014/06/11 职场文书
房产证明范本
2015/06/19 职场文书
判断Python中的Nonetype类型
2021/05/25 Python
golang 语言中错误处理机制
2021/08/30 Golang
零基础学java之循环语句的使用
2022/04/10 Java/Android