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 mechanize
import 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_timerself.custom_timers['Example_Homepage'] = latencyassert (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默认的方式是不支持的,要实现这一点,只需要一点小小的技巧即可,上代码:

base.py,Transaction基类:

# -*- coding: utf-8 -*-import mechanize
import time
import traceback
import 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 testlatency = time.time() - start_timerself.custom_timers['%s' % func[len(self._TEST_CASE_PREFIX):]] = latencyexcept Exception, e:logging.error(traceback.format_exc())raise e

test_case_google.py里是真正的测试case,这里是同时测试多个google站点:

# -*- coding: utf-8 -*-from base import BaseTransactionclass Transaction(BaseTransaction):def test_google_com_hk(self):#  测试逻辑代码,如类似于上面的测试example.compassdef test_google_com_sg(self):passdef 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相关推荐

  1. Redis 笔记(08)— 事务(一次执行多条命令、命令 watch/multi/exec/discard、错误处理)

    1. 事务概念 Redis 中的事务 (transaction)是一组命令的集合.事务同命令一样是 Redis 的最小执行单位,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的 ...

  2. (multi)set的某些操作

    (multi)set的某些操作 我们可以把multiset当作平衡树用~ 注意,必须定义小于运算符. s.begin() 返回指向第一个元素的迭代器. s.end() 返回指向最后元素的后面那个虚拟元 ...

  3. 在Ubuntu 16.04.1 LTS上安装XnView Multi Platform图片浏览器0.83

    XnView Multi Platform是一个全平台(Windows, Linux, Mac)下的全能图片工具,类似Windows平台的美图看看,阿香婆图片浏览器等等,效果非常赞,是我在Ubuntu ...

  4. celery源码分析:multi命令分析

    celery源码分析 本文环境python3.5.2,celery4.0.2,django1.10.x系列 celery简介 celery是一款异步任务框架,基于AMQP协议的任务调度框架.使用的场景 ...

  5. python模块学习---mechanize(模拟浏览器)

    mechanize是非常合适的模拟浏览器的模块. 它的特点主要有: 1 http,https协议等. 2 简单的HTML表单填写. 3 浏览器历史记录和重载. 4 Referer的HTTP头的正确添加 ...

  6. R语言ggplot2可视化:为可视化图像添加多行标题(multi line title)并将多行标题居中对齐(center align)

    R语言ggplot2可视化:为可视化图像添加多行标题(multi line title)并将多行标题居中对齐(center align) 目录

  7. Multi task learning多任务学习背景简介

    2020-06-16 23:22:33 本篇文章将介绍在机器学习中效果比较好的一种模式,多任务学习(Multi task Learning,MTL).已经有一篇机器之心翻译的很好的博文介绍多任务学习了 ...

  8. odoo API装饰器one、model、multi的区别

    1.one装饰器详解 odoo新API中定义方式:     date=fields.Date(string="date",compute="_get_date" ...

  9. Python编程基础:第四十二节 多重继承Multi Level Inheritance

    第四十二节 多重继承Multi Level Inheritance 前言 实践 前言 我们之前已经讲过继承的相关知识,当一个类是另一个类的父类,而此时这里的子类又是另一个类的父类,那此时就涉及多重继承 ...

  10. python模拟浏览器模块,python模块学习---mechanize(模拟浏览器)

    mechanize是非常合适的模拟浏览器的模块. 它的特点主要有: 1 http,https协议等. 2 简单的HTML表单填写. 3 浏览器历史记录和重载. 4 Referer的HTTP头的正确添加 ...

最新文章

  1. luogu P1549 棋盘问题(2) 题解
  2. ppt算是php的一种吗,ppt放映快捷键是什么
  3. 函数声明末尾的“ const”是什么意思? [重复]
  4. bootstrap怎么用_不用自己写css,不用bootstrap,写样式有tailwindcss就足够了
  5. windows server服务器上部署java+tomcat网站域名配置
  6. 音频文件 数据库存储_数据库系统是什么?它由哪几部分组成?
  7. 【分享-windows文件快速搜索神器】Everything 免费、快速搜索文件/文件夹
  8. 关于稀疏矩阵转化为稠密矩阵问题 (scipy.sparse格式和tensor稀疏张量格式)
  9. 23. WebVR播放器: 消费升级带来的机遇
  10. mysql 1z0_MySQL 8 OCP(1Z0-908)认证考试题库原题(第12题)
  11. 64位plsql和64位Oracle客户端安装以及注册,内含百度云资源
  12. 行业分析报告|项目货运物流市场现状及未来发展趋势
  13. MATLAB-箱图和箱图IQR分析
  14. 沈寅鑫银行内训实战专家
  15. 《GitHub详细教程》
  16. 扫地机器人自动回冲工作原理
  17. 电脑新加内存条后 游戏崩溃 浏览器卡死 电脑蓝屏
  18. 图解排序算法及实现——快速排序 (Quick Sort)
  19. 绿厂Oppo年终刚刚开奖!只有去年的3-5折,员工心态炸了!
  20. 【财富空间】中国AI应用最新白皮书:金融、汽车、医疗和零售将受AI影响最大,或为参与者带来19000亿增益价值

热门文章

  1. ORACLE +win2003 群集手记
  2. 热门传奇手游下载地址
  3. 计算机冷启动和热启动的区别
  4. Linux下使用system函数获取命令执行返回结果
  5. VI编辑器之多文件多屏操作
  6. MES项目-工业固定读码器选型逐字稿
  7. 滴滴出行商业模式分析
  8. 常刺激人体五个部位可强健身体
  9. koa2使用import出错
  10. 优优聚:做外卖你了解怎么分析后台数据吗?