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发送伪造的arp请求
Jan 09 Python
Python实现截屏的函数
Jul 26 Python
python多线程方式执行多个bat代码
Jun 07 Python
基于pip install django失败时的解决方法
Jun 12 Python
对python3标准库httpclient的使用详解
Dec 18 Python
python批量修改图片尺寸,并保存指定路径的实现方法
Jul 04 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
python tkinter canvas使用实例
Nov 04 Python
Python使用指定字符长度切分数据示例
Dec 05 Python
关于sys.stdout和print的区别详解
Dec 05 Python
Python 定义只读属性的实现方式
Mar 05 Python
Python 恐龙跑跑小游戏实现流程
Feb 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
PHP中HTTP方式下的Gzip压缩传输方法举偶
2007/02/15 PHP
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
QueryPath PHP 中的jQuery
2010/04/11 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
PHP 获取文件权限函数介绍
2013/07/11 PHP
php 数组字符串搜索array_search技巧
2016/07/05 PHP
使javascript也能包含文件
2006/10/26 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
Python GAE、Django导出Excel的方法
2008/11/24 Python
Python判断变量是否已经定义的方法
2014/08/18 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
python区块及区块链的开发详解
2019/07/03 Python
python中栈的原理及实现方法示例
2019/11/27 Python
Django 博客实现简单的全文搜索的示例代码
2020/02/17 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
2021/03/03 Python
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
艺术设计专业个人求职信范文
2013/12/11 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
海洋科学专业求职信
2014/08/10 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
个人事迹材料范文
2014/12/29 职场文书
离婚纠纷代理词
2015/05/23 职场文书
nginx之queue的具体使用
2022/06/28 Servers