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在指定目录下查找gif文件的方法
May 04 Python
如何用itertools解决无序排列组合的问题
May 18 Python
浅谈对yield的初步理解
May 29 Python
Python实现完整的事务操作示例
Jun 20 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
Win8下python3.5.1安装教程
Jul 29 Python
Flask框架单例模式实现方法详解
Jul 31 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 Python
通用的Django注册功能模块实现方法
Feb 05 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 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
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
数据库中排序的对比及使用条件详解
2012/02/23 PHP
PHP防止跨域提交表单
2013/11/01 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
2015/11/01 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
Python中的包和模块实例
2014/11/22 Python
numpy排序与集合运算用法示例
2017/12/15 Python
Python实现屏幕截图的两种方式
2018/02/05 Python
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
python查看列的唯一值方法
2018/07/17 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
python已协程方式处理任务实现过程
2019/12/27 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
计算机专业毕业生自荐信
2013/12/31 职场文书
高中自我评价范文
2014/01/27 职场文书
网络书店创业计划书
2014/02/07 职场文书
人力资源部经理岗位职责规定
2014/02/23 职场文书
药学职务聘任书
2014/03/29 职场文书
Python 中面向接口编程
2022/05/20 Python