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切片用法实例教程
Sep 08 Python
Python使用time模块实现指定时间触发器示例
May 18 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
Python设计模式之观察者模式简单示例
Jan 10 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
django中账号密码验证登陆功能的实现方法
Jul 15 Python
python3的url编码和解码,自定义gbk、utf-8的例子
Aug 22 Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 Python
python制作朋友圈九宫格图片
Nov 03 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 Python
python 常用日期处理-- datetime 模块的使用
Sep 02 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 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
Zend公司全球首推PHP认证
2006/10/09 PHP
PHP时间和日期函数详解
2015/05/08 PHP
解读PHP中上传文件的处理问题
2016/05/29 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
Windows下安装python2.7及科学计算套装
2015/03/05 Python
在Python中使用列表生成式的教程
2015/04/27 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
python 多线程串行和并行的实例
2019/02/22 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
请说出以下代码输出什么
2013/08/30 面试题
做一个有道德的人演讲稿
2014/05/14 职场文书
环保倡议书300字
2014/05/15 职场文书
2014年科协工作总结
2014/12/09 职场文书
向女朋友道歉的话
2015/01/20 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书