python利用JMeter测试Tornado的多线程
作者:jclian91 发布时间:2022-10-15 12:03:26
JMeter的简介
JMeter
是Apache组织开发的基于Java的压力测试工具
。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。
JMeter的下载网址为:https://jmeter.apache.org/download_jmeter.cgi,下载前请先确定电脑中安装了Java,下载完毕后点击bin文件夹下的"meter.bat"(Windows系统)或者"jmeter"可执行文件(Unix系统)即可,界面如下:
我们将在下面的章节中学习如何使用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测试,如下:
右击选择Add,选择Threads(Users),再选择Thread Group,填写信息如下:
填写Thread Group的名称为“tornado单线程测试”,“Number of Threads”为20,表示模拟20个用户,“Ramp-Up period”为1,表示1秒内发送所有用户的请求,“Loop Count”为2,表示每个用户发送2次请求,因此一共为40次请求。
在“tornado单线程测试”上右击选择Add,选择Sampler,再选择HTTP Request,填写信息如下:
该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):
可以发现,该压力测试下,请求的平均时间为7472毫秒,1秒2.0次请求(TPS)。
我们再以同样的方式测试shanghai这个接口,测试结果如下:
可以发现,该压力测试下,请求的平均时间为1718毫秒,1秒7.7次请求(TPS)。
根据这次测试,我们也发现tornao的多线程机制发挥了作用。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
来源:https://segmentfault.com/a/1190000021556119


猜你喜欢
- Python通过命令提示符安装matplotlib:1.直接打开命令提示符(快捷键窗口+ r)2.若提示安装失败(Python - 您正在使
- 关于python 使用xpath获取网页信息的方法?1、xpath的使用方法?XPath 使用路径表达式来选取 XML 文档中的节点或节点集
- 在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤。通过端口扫描我们可以了解到目标主机都开
- <div id="outer" style="background:#099"> cli
- 前篇我们稍微学习了Python中时间的获取,这次继续学习日期的时区转换,格式化等等。开发中常用的日期操作还有哪些?时区转换显示日期格式化秒数
- 前言拖了这么久,最终还是战胜了懒惰,打开电脑写了这篇博客,内容也很简单,python实现字符串转整型的int方法python已经实现了int
- var InterestKeywordListString = $("#userInterestKeywordLabel"
- 代码如下:SELECT [StartDate] FROM [dbo].[udf_Week](2012,2012) WHERE [
- 一、迭代器迭代器就是iter(可迭代对象函数)返回的对象,说人话.......可迭代对象由一个个迭代器组成可以用next()函数获取可迭代对
- Asyncio 任务可以通过调用它们的 cancel() 方法来取消。我们可以通过将任务包装在对 asyncio.shield() 的调用中
- 前言根据《2021年Stackoverflow开发者调查》,SQL是最常用的五种编程语言之一。所以,我们应该多投入时间来学习SQL。由Sto
- 什么是.netMicrosoft® .NET 是 Microsoft XML Web services 平台。XML Web
- 由于项目的需要在一个页面中选择打印内容。 把自己要打印的东西用一个DIV层抱起来。例如: <!-- 信访事项转办告知单Start --
- 需求说明当用户申请售后,商家未在n小时内处理,系统自动进行退款。商家拒绝后,用户可申请客服介入,客服x天内超时未处理,系统自动退款。用户收到
- 在获得网页响应对象res后,使用res.text属性可以获得网页源代码,但可能出现乱码!因为requests库会使用自动猜测的解码方式将抓取
- 前言:循环中通过break语句会立刻终止并跳出循环语句。break就像是终止按键,不管执行到哪一步,只要遇到break,不管什么后续步骤,直
- 很神奇的一个晚上,居然在以前老同事的群里跟同事讨论起CSS的东西来了,不过很意外的还是有收获。在IE中常常会碰到如果将容器定位后,出现容器内
- 主要我是要解决一下几个问题: 1. apply和call的区别在哪里 2. apply的其他巧妙
- 前言其实就是个小问题,但是爆出来的时候也很莫名其妙。因为之前都跑得好好的,只是换了不同的文件去跑才出的问题,关键是不同的文件要处理的内容和格
- 有了ORM,我们就可以把Web App需要的3个表用Model表示出来:import time, uuidfrom transwarp.db