博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
multi-mechanize
阅读量:5870 次
发布时间:2019-06-19

本文共 3653 字,大约阅读时间需要 12 分钟。

1. 安装

万能的pip&easy_install(python27环境)

pip install multi-mechanize mechanize numpy matplotlib

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

2. 使用方法

  • 创建项目(windows 环境:multi-mechanize安装路径 utilities目录下执行以下命令,如我的安装路径是D:\Python27\Lib\site-packages\multimechanize\utilities)
python multimech-newproject.py my_project

 

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

  • 脚本编写,借用官方的一个简单例子:
##  Copyright (c) 2010 Corey Goldberg (corey@goldb.org)#  License: GNU LGPLv3##  This file is part of Multi-Mechanize#import mechanizeimport timeclass 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来是不是觉得非常不方便?不用急,针对这点,后面的小技巧部分会另辟蹊径给你指条明路。

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

 

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

3. 使用小技巧

  • Cookie:

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

br._ua_handlers[“_cookies”].cookieja

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

.py,Transaction基类:

# -*- coding: utf-8 -*-import mechanizeimport timeimport tracebackimport loggingclass 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 -*-  import BaseTransactionclass 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这个内建的字典里塞任意的自定义统计数据,他们在报表中都能够得到体现。

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

转载地址:http://cfxnx.baihongyu.com/

你可能感兴趣的文章
windows tomcat 启动报错TOMCAT JAVA_HOME or JRE_HOME environment variable is not defined correctly...
查看>>
2006年4月二级C语言笔试试题真题及答案(附答案)
查看>>
查询各部门销售目标
查看>>
nginx 日志
查看>>
我的友情链接
查看>>
System Center Virtual Machine Manager 2012 RC– Evaluation
查看>>
Access数据类型与.net OleDbType枚举类型的对应
查看>>
从零开始写类似jQuery的Javascript框架
查看>>
FRS 迁移到DFSR概述(第一部分 )
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
排序算法(二)之希尔排序、堆排序
查看>>
SVN Windows 客户端设置
查看>>
PyCUDA学习:Helloworld
查看>>
1月第三周网络安全报告:放马站点域名258个
查看>>
各大网站的架构分析
查看>>
nagios plugins for check remote port status
查看>>
shell中感叹号与引号用法
查看>>
UnixBench算分介绍
查看>>
阶层之和
查看>>
Linux群集LVS简介
查看>>