zoukankan      html  css  js  c++  java
  • 利用JMeter测试Tornado的多线程

    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界面
      我们将在下面的章节中学习如何使用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测试,如下:

    tornao测试

      右击选择Add,选择Threads(Users),再选择Thread Group,填写信息如下:

    tornado单线程测试
    填写Thread Group的名称为“tornado单线程测试”,“Number of Threads”为20,表示模拟20个用户,“Ramp-Up period”为1,表示1秒内发送所有用户的请求,“Loop Count”为2,表示每个用户发送2次请求,因此一共为40次请求。

      在“tornado单线程测试”上右击选择Add,选择Sampler,再选择HTTP Request,填写信息如下:

    HTTP请求

    该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):

    summary report of tornado单线程测试
    Aggregate Graph of tornado单线程测试

      可以发现,该压力测试下,请求的平均时间为7472毫秒,1秒2.0次请求(TPS)。
      我们再以同样的方式测试shanghai这个接口,测试结果如下:

    summary report of tornado多线程测试
    Aggregate Graph of tornado多线程测试
      可以发现,该压力测试下,请求的平均时间为1718毫秒,1秒7.7次请求(TPS)。

      根据这次测试,我们也发现tornao的多线程机制发挥了作用。

      本次分享到此结束,欢迎大家交流~

  • 相关阅读:
    【转】centos7关闭图形界面启动系统
    回顾测试入行以来的一些感受,浅谈对测试管理方面一些见解
    linux安装完全踩坑手册
    selenium 自动化测试个人总结(一)
    性能测试之数据库篇-查询(五 补充)
    性能测试之数据库篇-查询(四)
    性能测试之数据库篇-查询(三)
    性能测试之数据库篇-查询(二)
    性能测试之数据库篇-查询(一)
    性能测试之数据库篇-查询
  • 原文地址:https://www.cnblogs.com/jclian91/p/12180637.html
Copyright © 2011-2022 走看看