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中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
Nov 09 Python
python目录与文件名操作例子
Aug 28 Python
windows下Virtualenvwrapper安装教程
Dec 13 Python
python3调用R的示例代码
Feb 23 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
Python语言进阶知识点总结
May 28 Python
深入了解Django View(视图系统)
Jul 23 Python
python 模拟银行转账功能过程详解
Aug 06 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 Python
终于搞懂了Keras中multiloss的对应关系介绍
Jun 22 Python
用 Django 开发一个 Python Web API的方法步骤
Dec 03 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获取QQ头像并显示的方法
2014/12/23 PHP
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
php使用变量动态创建类的对象用法示例
2017/02/06 PHP
PHP htmlspecialchars()函数用法与实例讲解
2019/03/08 PHP
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
JS中的substring和substr函数的区别说明
2013/05/07 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
[49:29]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
Python3实现转换Image图片格式
2018/06/21 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
门卫班长岗位职责
2013/12/15 职场文书
党支部三会一课计划
2014/09/24 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
体育教师个人工作总结
2015/02/09 职场文书
自荐信怎么写
2015/03/04 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
python实现简单的三子棋游戏
2022/04/28 Python
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript