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获取糗百图片代码实例
Dec 18 Python
python实现中文输出的两种方法
May 09 Python
用python写一个windows下的定时关机脚本(推荐)
Mar 21 Python
深入理解python中的select模块
Apr 23 Python
Python 基础教程之str和repr的详解
Aug 20 Python
python中abs&map&reduce简介
Feb 20 Python
对python3 一组数值的归一化处理方法详解
Jul 11 Python
使用memory_profiler监测python代码运行时内存消耗方法
Dec 03 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
Oct 01 Python
Python @property原理解析和用法实例
Feb 11 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
Python实现给PDF添加水印的方法
Jan 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
繁体中文转换为简体中文的PHP函数
2006/10/09 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
php无限级分类实现方法分析
2016/10/19 PHP
Yii 2中的load()和save()示例详解
2017/08/03 PHP
Laravel 加载第三方类库的方法
2018/04/20 PHP
Javascript 不能释放内存.
2006/09/07 Javascript
js静态作用域的功能。
2006/12/25 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
js中实现字符串和数组的相互转化详解
2016/01/24 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
[40:19]2018完美盛典CS.GO表演赛
2018/12/17 DOTA
python基础教程之匿名函数lambda
2017/01/17 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
python pillow模块使用方法详解
2019/08/30 Python
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
网络公司美工设计工作个人的自我评价
2013/11/03 职场文书
公司人力资源的自我评价
2014/01/02 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
工程款申请报告
2015/05/15 职场文书
工作证明书
2015/06/15 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP
对象析构函数__del__在Python中何时使用
2022/03/22 Python