测试工具

Web Performance & Load 测试工具multi-mechanize

对Web服务做Performance & Load测试,最常见的工具有Apache Benchmark俗称ab和商用工具LoadRunner。ab简单直接,功能也相对较弱,但我们经常看到的对一些Web server或者Framework的性能测试用的ab做的,

而LoadRunner功能也确实很强大,各种大型软件公司、软件外包企业几乎是必备了,用起来很High,当然其价格也确实很High

这里要介绍的multi-mechanize 是一款用Python开发的Performance & Load测试工具,是由Pylot的作者新近开发的,算是升级换代的产品。用multi-mechanize可以通过编写Python脚本来实现较复杂的测试逻辑,其并发测试是通过multiprocessing(多进程)和多线程机制来实现的。

1. 安装

万能的pip&easy_install

pip install multi-mechanize mechanize numpy matplotlib

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

2. 使用方法

  • 创建项目
    multimech-newproject my_project

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

  • 脚本编写,借用官方的一个简单例子:
  • #  Copyright (c) 2010 Corey Goldberg ([email protected])
    #  License: GNU LGPLv3
    #
    #  This file is part of Multi-Mechanize
    #
     
    import mechanize
    import time
     
    class Transaction(object):
        def __init__(self):
            self.custom_timers = {}
     
        def run(self):
            br = mechanize.Browser()
            br.set_handle_robots(False)
     
            start_timer = time.time()
            resp = br.open(‘http://www.example.com/‘)
            resp.read()
            latency = time.time() - start_timer
     
            self.custom_timers[‘Example_Homepage‘] = latency
     
            assert (resp.code == 200), ‘Bad HTTP Response‘
            assert (‘Example Web Page‘ in resp.get_data()), ‘Failed Content Verification‘
     
    if __name__ == ‘__main__‘:
        trans = Transaction()
        trans.run()
        print trans.custom_timers

注意:按multi-mechanize的默认规则,每个脚本必须有一个Transaction的类,类要有一个run方法,在run里面写测试业务逻辑。这个例子是打开http://www.example.com,记录访问所耗时长,非常简单明了,而实际的场景你可能需要有用户登录、然后测试某个或多个页面(API),只是测试业务复杂一些,写法是类似的。一个脚本文件只能有一个Transaction的类、类也只能有一个run方法,写起case来是不是觉得非常不方便?不用急,针对这点,后面的小技巧部分会另辟蹊径给你指条明路。

  • 运行项目的测试脚本
multimech-run my_project

测试结果报表和原始数据将放到results目录下按测试时间生成的子目录中,生产的html版本的结果统计如下图所示:

3. 使用小技巧

  • Cookie:

如果使用的是mechanize,可以通过下面的方式,从上面的browser对象br里获取到cookie信息。

br._ua_handlers["_cookies"].cookieja

# -*- coding: utf-8 -*-
 
import mechanize
import time
import traceback
import logging
 
class BaseTransaction(object):
    _TEST_CASE_PREFIX = "test_"
 
    def __init__(self):
        self._init()
 
        self.custom_timers = {}
 
        self.browser = mechanize.Browser()
        self.browser.set_handle_robots(False)
        self.browser.set_handle_redirect(True)
        self.browser.set_handle_referer(True)
 
    def _init(self):
        self.funcs = []
        funcs_ = dir(self)
        for func_ in funcs_:
            if func_.startswith(self._TEST_CASE_PREFIX):
                self.funcs.append(func_)
 
    def run(self):
    """"所有继承BaseTransaction的类,只需要在以test_开头的方法里实现测试case即可,运行时多个case都可以得到测试"""
        try:
            for func in self.funcs:
                start_timer = time.time()
                getattr(self, func)()  # run test
                latency = time.time() - start_timer
 
                self.custom_timers[‘%s‘ % func[len(self._TEST_CASE_PREFIX):]] = latency
        except Exception, e:
            logging.error(traceback.format_exc())
            raise e
#test_case_google.py里是真正的测试case,这里是同时测试多个google站点:
# -*- coding: utf-8 -*-
 
from base import BaseTransaction
 
class Transaction(BaseTransaction):
 
    def test_google_com_hk(self):
       #  测试逻辑代码,如类似于上面的测试example.com
        pass
 
    def test_google_com_sg(self):
        pass
 
    def test_google_com(self):
        pass
  • 真实的并发量计算:multi-mechanize使用了multiprocessing库,会同时起多个进程,且每个进程按config里的配置起多个线程来实现并发测试,但真正的单位时间内的并发量并不是config里设置threads=10这样的表示每秒10个并发,真实的并发量需要根据最终完成的transaction数和这些transaction里面包含多少次http请求和总的完成时间来计算得知,这点不是很直观。
  • 自定义统计数据:你可以往self.custom_timers这个内建的字典里塞任意的自定义统计数据,他们在报表中都能够得到体现。

更多的文档和一手资料请参考文档http://testutils.org/multi-mechanize/和git代码库https://github.com/cgoldberg/multi-mechanize。最后multi-mechanize还不是很好用,一是使用过程中发现有一些情况会抛异常,导致不能正确生成报表,另一个别扭的是case的编写不是unittest那一套,是作者自创Transaction流:)

时间: 2024-10-20 23:47:57

测试工具的相关文章

centos6.5 rpm安装glusterfs以及第三方测试工具

这篇文章适合初学者读,做下实验来之后对glusterfs有一个初步的了解,我的所有操作都是在一台机器上做的.还有一些环境配置我列举了一下,并没有很详细的列出来,相信大家应该没问题.一些第三方测试工具需要大家自行在网上下载.楼主也是一个一个下载下来的.此次下载的是3.47的版本,因为我们公司用的就是这个版本,之前试过其它版本,老是会出现服务挂起的现象,没有办法,版本回退 glusterfs  rpm包下载地址: https://download.gluster.org/pub/gluster/gl

12个强大的Web服务测试工具

在过去的几年中,web服务或API的普及和使用有所增加. web服务或API是程序或软件组件的集合,可以帮助应用程序进行交互或通过形成其他应用程序或服务器之间的连接执行一些进程/事务处理.基本上有两种类型的web服务——基于互联网协议,REST和SOAP推动数据和信息的通讯. 由于这些web服务暴露于网络并且分布于不同的网络,所以它们很容易受到风险和安全威胁,从而影响基于它们的进程.因此,web服务或API测试非常有必要,可以确保它们执行正确并正确地响应查询. 市场上有不少商业和开源的测试工具可

压力负载测试工具

网站压力负载测试工具:Web版已逝,只好送大伙单机版 前言: 最近老板资金周转出了点问题,工资好久没发了,于是暂闲置在家,静待老板弄到钱东山再起的消息: QQ群里,偶尔不时的会有人问,原来的分布式网站负载工具怎么下载不了啦?或者不能用啦?之类的问题. 我只能说,鉴于互联网精神,我之前把它关了. 其实主要是我那个VPS商,前端时间,估计也是资金问题,泥玛尼的打不开1个月都没人理,最后还告诉我硬盘数据全没了. 好在我够善良,不然真想拿刀砍他. 趁着感冒,敲敲代码,刺激下大脑,提高下免疫力. 虽然原来

网站压力测试工具 Webbench

webbench最多可以模拟3万个并发连接去测试网站的负载能力 Webbench是有名的网站压力测试工具,它是由 Lionbridge公司(http://www.lionbridge.com)开发. Webbech 能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况.webBech的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数 和每秒钟传输数据量.webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进行测试的能力.还

android移动app测试几款移动端测试工具分享

接触移动app测试时间不长,从开始的学习时候开始知道eclipse,但是至今不是很懂,除开创建虚拟机,进行一下log的抓取,还有分析内存泄露.以及监控一下app的资源占用之外其他并不清楚.而且pc端的不方便是显而易见的,每次都需要连接调试模式并不见得有多方便,对于一些简单的性能测试,使用移动端的测试工具会更方便,结果更直观. 首先,我接触到第一款就是网易的Emmage,又名机关枪,这款app我感觉还是最成熟最直接的,操作简单,主要用于监控单个App的CPU,内存,流量,启动耗时,电量,电流等性能

压力测试工具tsung用法简介

tsung是用erlang开发的一款简单易用的压力测试工具,可以生成成千上万的用户模拟对服务器进行访问.目前对tsung的理解也仅限于会简单的应用,其内部结构没有深入研究过. 1.安装 tsung是用erlang编写的,所以首先安装erlang的运行环境.然后就是按照tsung的官网下载编译tsung.需要注意的是,生成测试报告需要gnuplot和perl的支持,其中perl需要安装Template扩展.具体安装过程请看相关手册或者google之. 2.配置文件 默认情况下,tsung会加载配置

Web页面速度测试工具

开发框架的时间,想测试单例和多例下对性能的影响,找了下没有特别简单易用的测试工具. 估摸着搞了一个小工具. 针对.net Framework的2.0,3.5,4.0版本. WebHttpTest2.0 WebHttpTest3.5 WebHttpTest4.0 Web页面速度测试工具,码迷,mamicode.com

常用的HTTP测试工具谷歌浏览器插件汇总

网页的开发和测试时最常见的测试就是HTTP测试,作为曾经的测试人员在这方面还是略知一二的.其实做网页测试工作是非常繁琐的时期,有时候甚至是无聊重复的,如果没有网页测试工具的帮助的话,测试人员会越做越怀疑自己的价值.只有利用插件去提示工作效率才能让测试人员有更多的时间去做更有意义的工作,创造更多的价值.所以今天在chrome插件网整理一个专题汇总常见的HTTP测试工具谷歌浏览器插件帮助测试人员提高工作效率. 1.Postman和Postman Interceptor 说的网页http测试的,只要是

11个免费的Web安全测试工具

1.Netsparker Community Edition(Windows) 这个程序可以检测SQL注入和跨页脚本事件.当检测完成之后它会给你提供一些解决方案. 2.Websecurify(Windows, Linux, Mac OS X) 这是个简单易用的开源工具,此程序还有一些人插件支持,可以自动检测网页漏洞.运行后可生成多种格式的检测报告. 3.Wapiti(Windows, Linux, Mac OS X) 这是一个用Python编写的开源的工具,可以检测网页应用程序,探测网页中存在的

ActiveMQ测试工具

1. 测试工具 目前使用两种测试工具进行压力测试 1. Jmeter 测试单客户端收发多主题,测试高并发,大数据量时的接收效率 2. emqtt_benchmark测试多客户端收发主题,测试高吞吐量下服务器性能 1.1 安装Erlang emqtt_benchmark测试工具使用Erlang语言开发,必须在Linux的环境下运行,因此需要先安装Erlang语言环境. 1.1.1 安装Erlang 可以参考这篇帖子,使安装别的特别简单. 1.1.2 安装问题 没有安装git,比如出现以下错误: E