zoukankan      html  css  js  c++  java
  • 性能测试框架Multi-Mechanize安装与使用

    python模块介绍- multi-mechanize 通用的性能测试工具 

    简介

    Multi-Mechanize 是一个开源的性能和负载测试框架,它并发运行多个 Python 脚本对网站或者服务生成负载(组合事务)。测试输出报告保存为HTML或JMeter的兼容的XML。Multi-Mechanize最常用于web性能和可扩展性(scalability)测试,也适用于任何python可以访问的API。尤其适合后台性能测试。稍微懂点编程的话,这个工具会远强过商业的性能测试工具。
    github:https://github.com/cgoldberg/multi-mechanize

    主要特性:

    • 支持各种 HTTP methods
    • 高级超链接和HTML表单支持
    • 支持 SSL
    • 自动处理 Cookies
    • 可设置HTTP头
    • 自动处理重定向
    • 支持代理
    • 支持 HTTP 认证

    安装

    pip install multi-mechanize mechanize numpy matplotlib

    • mechanize是一个模拟browser行为的一个库,当然你也可以用其它的如urllib2、request、tornado.httpclient等等库,不是必须。
    • 后面两个numpy和matplotlib也是可选的,当你需要它自动生成图形化报表时才会用到,安装matplotlib你的系统有可能需要安装libpng和freetype库

    pip install multi-mechanize mechanize numpy matplotlib

    • mechanize是一个模拟browser行为的一个库,当然你也可以用其它的如urllib2、request、tornado.httpclient等等库,不是必须。
    • 后面两个numpy和matplotlib也是可选的,当你需要它自动生成图形化报表时才会用到,安装matplotlib你的系统有可能需要安装libpng和freetype库

    2. 使用方法

    • 创建项目
        multimech-newproject my_test

    自动创建一个my_test目录,子目录test_scripts用来放测试脚本,config.cfg是测试配置,主要要配的是测试时间、测试脚本和并发threads量。

    执行项目  
    # multimech-run my_test
    
      user_groups:  2
      threads: 6
    
    [================100%==================]  30s/30s   transactions: 119  timers: 119  errors: 0
    waiting for all requests to finish...
    
    
    analyzing results...
    
    transactions: 125
    errors: 0
    
    test start: 2013-09-13 11:47:47
    test finish: 2013-09-13 11:48:16
    
    created: ./my_test/results/results_2014.12.23_15.24.40/results.html
    
    done.

    目录结构

    每个测试项目包含以下内容:

    • config.cfg的配置文件。用于设定测试选项。
    • test_scripts/虚拟用户脚本的目录。在这里添加您的测试脚本。
    • results/:结果存储目录。对于每个测试都声称一个时间戳目录,里面包含结果的报告。

    配置参数的含义如下:

    • run_time: duration of test (seconds) 测试的执行时间
    • rampup: duration of user rampup (seconds) 多少秒内发完请求
    • results_ts_interval: time series interval for results analysis (seconds) 结果分析时间
    • progress_bar: turn on/off console progress bar during test run 是否显示进度条
    • console_logging: turn on/off logging to stdout 是否输出到stdout
    • xml_report: turn on/off xml/jtl report 是否生成xml报告。
    • results_database: database connection string (optional) 保存结果的数据库连接字符串(可选)
    • post_run_script: hook to call a script at test completion (optional) 调用的善后脚本(可选)

      脚本书写

      下例使用mechanize进行web测试。

      class Transaction(object):
          def __init__(self):
              pass
      
          def run(self):
              br = mechanize.Browser()
              br.set_handle_robots(False)
              resp = br.open('http://example..com')
              assert (resp.code == 200), 'Bad Response: HTTP %s' % resp.codes
              assert ('service name' in resp.get_data())
      
      
      

      下面用httplib库重写脚本,并增加定时器。通过定时器,可以分析各个步骤的耗时。

      import httplib
      import urllib
      import time
      
      
      
      
      class Transaction(object):
          def __init__(self):
              self.custom_timers = {}
      
      
          def run(self):
              post_body=urllib.urlencode({
                  'USERNAME': 'corey',
                  'PASSWORD': 'secret',})
              headers = {'Content-type': 'application/x-www-form-urlencoded'}
      
      
              start_timer = time.time()
              conn = httplib.HTTPConnection('www.example.com')
              conn.request('POST', '/login.cgi', post_body, headers)
              resp = conn.getresponse()
              content = resp.read()
              latency = time.time() - start_timer
      
      
              self.custom_timers['LOGIN'] = latency
              assert (resp.status == 200), 'Bad Response: HTTP %s' % resp.status
              assert ('Example Web Page' in content), 'Text Assertion Failed'

       

      下面是requests库重写脚本,并增加定时器。通过定时器,可以分析各个步骤的耗时。

      [python] view plain copy
       
      1. import requests  
      2. import time  
      3. class Transaction(object):  
      4.     def run(self):  
      5.         start = time.time  
      6.         r = requests.get('http://172.16.34.199:10080/EnvService/services/personservice/login?personid=weijian1&password=weijian1')  
      7.         latency = time.time() - start_timer  
      8.         self.custom_timers['LOGIN'] = latency  
      9.          assert (r.status_code == 200), 'Bad Response: HTTP %s' % r.status_code  
  • 相关阅读:
    Ruby单例方法和实例方法
    Silverlight本地化和全球化
    多线程 or 多进程 (转强力推荐)
    循环pthread_create导致虚拟内存上涨
    int在linux上的保存情况
    查看数据流的流程
    查看linux系统版本,内核,CPU,MEM,位数的相关命令(转)
    0/1背包问题
    linux下计算程序运行时间
    夸平台夸字符编码问题
  • 原文地址:https://www.cnblogs.com/saryli/p/6632104.html
Copyright © 2011-2022 走看看