性能测试框架Multi-Mechanize安装与使用
Posted 清明-心若淡定
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能测试框架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库重写脚本,并增加定时器。通过定时器,可以分析各个步骤的耗时。
- import requests
- import time
- class Transaction(object):
- def run(self):
- start = time.time
- r = requests.get(‘http://172.16.34.199:10080/EnvService/services/personservice/login?personid=weijian1&password=weijian1‘)
- latency = time.time() - start_timer
- self.custom_timers[‘LOGIN‘] = latency
- assert (r.status_code == 200), ‘Bad Response: HTTP %s‘ % r.status_code
以上是关于性能测试框架Multi-Mechanize安装与使用的主要内容,如果未能解决你的问题,请参考以下文章