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通过递归遍历出集合中所有元素的方法
Feb 25 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
Nov 29 Python
Python将一个Excel拆分为多个Excel
Nov 07 Python
python中hasattr()、getattr()、setattr()函数的使用
Aug 16 Python
python中matplotlib条件背景颜色的实现
Sep 02 Python
python实现简易学生信息管理系统
Apr 05 Python
python生成特定分布数的实例
Dec 05 Python
Python爬取股票信息,并可视化数据的示例
Sep 26 Python
运行Python编写的程序方法实例
Oct 21 Python
Django操作cookie的实现
May 26 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 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函数之日期时间函数date()使用详解
2013/09/09 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
2017/06/19 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
Vue学习之组件用法实例详解
2020/01/06 Javascript
vue实现图书管理系统
2020/12/29 Vue.js
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
python:动态路由的Flask程序代码
2019/11/22 Python
Python实现中值滤波去噪方式
2019/12/18 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
高山背包:High Sierra
2017/11/23 全球购物
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
大学新生军训个人的自我评价
2013/10/03 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
小学体育课教学反思
2016/02/16 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python
对Keras自带Loss Function的深入研究
2021/05/25 Python
15个值得收藏的JavaScript函数
2021/09/15 Javascript
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript