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自动重试HTTP连接装饰器
Apr 28 Python
python迭代器与生成器详解
Mar 10 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
Sep 18 Python
python下载文件记录黑名单的实现代码
Oct 24 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
python 日志增量抓取实现方法
Apr 28 Python
python3.6环境安装+pip环境配置教程图文详解
Jun 20 Python
python打印直角三角形与等腰三角形实例代码
Oct 20 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
Apr 16 Python
python的flask框架难学吗
Jul 31 Python
Django前后端分离csrf token获取方式
Dec 25 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
CI(CodeIgniter)框架配置
2014/06/10 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
javascript 命名规则 变量命名规则
2010/02/25 Javascript
js打印纸函数代码(递归)
2010/06/18 Javascript
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
在JavaScript中typeof的用途介绍
2013/04/11 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
javascript正则表达式之search()用法实例
2015/01/19 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
python如何让类支持比较运算
2018/03/20 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
Python数据类型之Number数字操作实例详解
2019/05/08 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
为什么相对PHP黑python的更少
2020/06/21 Python
python3 使用ssh隧道连接mysql的操作
2020/12/05 Python
马德里竞技官方网上商店:Atletico Madrid Shop
2019/03/31 全球购物
大客户销售经理职责
2013/12/04 职场文书
教师远程培训感言
2014/03/06 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
2015年小学开学寄语
2015/02/27 职场文书
2015员工年度考核评语
2015/03/25 职场文书
ubuntu如何搭建vsftpd服务器
2022/12/24 Servers