multi-mechanize负载压力

栏目: Python · 发布时间: 5年前

内容简介:mechanize是一个模拟browser行为的一个库,当然你也可以用其它的如urllib2、request、tornado.httpclient等等库,不是必须。后面两个numpy和matplotlib也是可选的,当你需要它自动生成图形化报表时才会用到,安装matplotlib你的系统有可能需要安装libpng和freetype库。注意:按multi-mechanize的默认规则,每个脚本必须有一个Transaction的类,类要有一个run方法,在run里面写测试业务逻辑。这个例子是打开http://w
pip install multi-mechanize mechanize numpy matplotlib

mechanize是一个模拟browser行为的一个库,当然你也可以用其它的如urllib2、request、tornado.httpclient等等库,不是必须。

后面两个numpy和matplotlib也是可选的,当你需要它自动生成图形化报表时才会用到,安装matplotlib你的系统有可能需要安装libpng和freetype库。

 multimech-newproject my_project
#
#  Copyright (c) 2010 Corey Goldberg (corey@goldb.org)
#  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

使用小技巧

Cookie:

br._ua_handlers[“_cookies”].cookieja

单个脚本多个测试用例的支持:这个思路来源于testsuite的概念,同一个testsuite里的case作为一组相关的case可以共享一些代码逻辑和资源(如browser对象),而multi-mechanize默认的方式是不支持的,要实现这一点,只需要一点小小的技巧即可,上代码:

base.py,Transaction基类:

# -*- 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
# -*- 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流:)


以上所述就是小编给大家介绍的《multi-mechanize负载压力》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Haskell趣学指南

Haskell趣学指南

[斯洛文尼亚] Miran Lipovaca / 李亚舟、宋方睿 / 人民邮电出版社 / 2014-1

《haskell趣学指南》是一本讲解haskell这门函数式编程语言的入门指南,语言通俗易懂,插图生动幽默,示例短小清晰,结构安排合理。书中从haskell的基础知识讲起,涵盖了所有的基本概念和语法,内容涉及基本语法、递归、类型和类型类、函子、applicative 函子、monad、zipper及所有haskell重要特性和强大功能。 《haskell趣学指南》适合对函数式编程及haske......一起来看看 《Haskell趣学指南》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具