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库重写脚本,并增加定时器。通过定时器,可以分析各个步骤的耗时。

    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

性能测试框架Multi-Mechanize安装与使用的更多相关文章

  1. Python 3.6 性能测试框架Locust安装及使用

    背景 Python3.6 性能测试框架Locust的搭建与使用 基础 python版本:python3.6 开发工具:pycharm Locust的安装与配置 点击“File”→“setting” 点 ...

  2. Python Locust性能测试框架实践

    [本文出自天外归云的博客园] Locust的介绍 Locust是一个python的性能测试工具,你可以通过写python脚本的方式来对web接口进行负载测试. Locust的安装 首先你要安装pyth ...

  3. Xvfb+YSlow+ShowSlow搭建前端性能测试框架 - 前端技术 | TaoBaoUED

    Xvfb+YSlow+ShowSlow搭建前端性能测试框架 - 前端技术 | TaoBaoUED Xvfb+YSlow+ShowSlow搭建前端性能测试框架 作者:黑三 | 时间:2010-07-07 ...

  4. 基于Jmeter和Jenkins搭建性能测试框架

    搭建这个性能测试框架是希望能够让每个人(开发人员.测试人员)都能快速的进行性能测试,而不需要关注性能测试环境搭建过程.因为,往往配置一个性能环境可能需要很长的时间. 1.性能测试流程 该性能测试框架工 ...

  5. Python3.6 性能测试框架Locust的搭建与使用

    背景 Python3.6 性能测试框架Locust的搭建与使用 基础 python版本:python3.6 方法一: pip install locustio 方法二: 开发工具:pycharm 使用 ...

  6. 「转」基于Jmeter和Jenkins搭建性能测试框架

    搭建这个性能测试框架是希望能够让每个人(开发人员.测试人员)都能快速的进行性能测试,而不需要关注性能测试环境搭建过程.因为,往往配置一个性能环境可能需要很长的时间. 1.性能测试流程 该性能测试框架工 ...

  7. chrome性能测试框架webpagereplay

    今天学习了下chrome的性能测试框架,其实它可用于在稳定的环境下测试浏览器向服务器发起http请求至下载请求文档到本地的这个过程.好处在于,其原理在于先将第一次请求回来的文档下载在本地,然后在本地模 ...

  8. node.js框架express的安装

    node.js框架express的安装 首先假定你已经安装了 Node.js,接下来为你的应用创建一个目录,然后进入此目录并将其作为当前工作目录. $ mkdir myapp $ cd myapp 通 ...

  9. 基于jmeter,jenkins,ANT接口,性能测试框架

    背景 公司计划推接口和性能测试,搭建这个性能测试框架框架是希望能够让每个人(开发人员.测试人员)都能快速的进行性能,接口测试,而不需要关注性能测试环境搭建过程.因为,往往配置一个性能环境可能需要很长的 ...

  10. java 性能测试框架工具-junitperf

    性能测试工具 对于 Java 开发者来说,要去学习性能测试工具未免很麻烦. 但有时候会有性能测试的需求. junitperf junitperf 就是一款为 Java 开发者设计的性能测试框架,如果你 ...

随机推荐

  1. UVA 1619/POJ2796 滑窗算法/维护一个单调栈

    Feel Good Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 12409   Accepted: 3484 Case T ...

  2. cocoaPod的Podfile文件的创建和内容格式

    Podfile创建: 1.终端中,cd到项目总目录(cd +路径名) cd/........./......../...../项目名 2.终端中继续建立Podfile(配置文件) touch Podf ...

  3. *LOJ#2085. 「NOI2016」循环之美

    $n \leq 1e9,m \leq 1e9,k \leq 2000$,求$k$进制下$\frac{x}{y}$有多少种不同的纯循环数取值,$1 \leq x \leq n,1 \leq y \leq ...

  4. [区别]APPlication,Session,Cookie,ViewState和Cache

    原文发布时间为:2009-08-01 -- 来源于本人的百度文章 [由搬家工具导入] 在ASP.NET中,有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewS ...

  5. Linux STP介绍

    1. 介绍 STP(Spanning Tree Protocol)即生成树协议,标准为IEEE802.1D-1998STP是一种二层冗余技术,利用STA算法构建一个逻辑上没有环路的树形网络拓扑结构,并 ...

  6. 基于Xen实现一种domain0和domainU的应用层数据交互高效机制 - 2

    继续昨天的思路,今天先google了类似的实现domain0和domainU之间数据传输的方案 [Xen-devel] XenStore as a data transfer path?  这篇帖子讨 ...

  7. strcpy_s 函数的用法

    strcpy_s和strcpy()函数的功能几乎是一样的. strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串.在程序运行时,这将导 ...

  8. Notepad++ 自动补全,括号自动完成插件,主题和字体设置

    Notepad++ 自动补全成对符号http://rabbit52.com/2012/devel/notepad-autocomplete-brackets QuickText 和 Zen Codin ...

  9. EOJ 3.30 A. 打工时不可能打工的【贪心】

    [链接]:https://acm.ecnu.edu.cn/contest/59/problem/A/ A. 打工时不可能打工的 Time limit per test: 2.0 seconds Mem ...

  10. tomcat7.0.55配置HTTP强制跳转到HTTPS

    首先需要配置好HTTPS单向或双向链接 参考: tomcat7.0.55配置单向和双向HTTPS连接(二) 然后编辑tomcat的conf目录下的web.xml 在<welcome-file-l ...