当前位置 主页 > 网站技术 > 代码类 >

    python利用JMeter测试Tornado的多线程

    栏目:代码类 时间:2020-01-12 15:11

    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次请求。