Python自动化测试工具Splinter简介和使用实例


Posted in Python onMay 13, 2014

Splinter 快速介绍

官方网站:http://splinter.cobrateam.info/

官方介绍:

Splinter is an open source tool for testingweb applications using Python. It lets you automate browser actions, such asvisiting URLs and interacting with their items

特性:

1、可以模拟浏览器行为,访问指定的URL,并且可以指定不同的浏览器类型。比如firefox或者chrome等。不同的浏览器只要在本地安装对应的驱动,就可以在代码中通过名称指定来访问。
2、支持cookie操作,可以很方便的添加和删除cookie;
3、支持模拟鼠标的动作,比如滑动到某个按钮上,焦点离开某个按钮等等,对于带有动态提示的页面,如搜索引擎的关键字输入框的动态提示,可以非常方便的测试。
4、支持模拟键盘的输入操作,对input等控件的输入可以模拟用户的type过程。
5、支持直接运行js或者调用页面的js。
6、支持模拟上传文件。
7、对radio和checkbox有专门的api支持,非常方便;
8、支持快速的获取页面的元素或者判断是否存在文本,用于开发判断页面提示信息是否准确非常方便。
9、最重要的,splinter的API非常简单,配合官方的文档学习成本几乎是0,当然你得懂一些python语法。如果你比较了解js和css,你可能会像喜欢jquery一样喜欢它;

功能:

Splinter执行的时候会自动打开你指定的浏览器,访问指定的URL。
然后你所开发的模拟的任何行为,都会自动完成,你只需要坐在电脑面前,像看电影一样看着屏幕上各种动作自动完成然后收集结果即可。

举个例子,我们要回归登录功能,首先要开发如下模拟登录行为的脚本:

#!/usr/bin/py2
# -*- coding: utf-8 -*-
#encoding=utf-8
import sys, re
from splinter.browser import Browser  
CLOASE_AFTER_TEST = False
reload(sys)
sys.setdefaultencoding('utf8')
encoding = lambda x:x.encode('gbk')  
def testLogin(desc, username, password, result):
    output(desc)      
    browser.fill('TPL_username',username.decode('utf8'))
    browser.fill('TPL_password',password.decode('utf8'))
    browser.find_by_value('登录').first.click()
    checkresult(result)  
def output(x):
    print encoding(x)  
def resultMsg(x):
    if x == True:
        print 'pass'
    else:
        print '[X]not pass'
def checkresult(x):
    """  check result message, x : the error message u want  """
    resultMsg(browser.is_text_present(x))  
__testUrl = 'http://waptest.taobao.com/login/login.htm?tpl_redirect_url=http%3A%2F%2Fm.taobao.com%2F'  
# chrome driver : http://code.google.com/p/selenium/wiki/ChromeDriver
browser = Browser()  # already support firefox
browser.visit(__testUrl)
output("测试页面:"+browser.title)  
try:
    # test login
    testLogin('测试未输入用户名','','','请输入会员名')
    testLogin('测试未输入密码','qd_test_001','','请输入密码')
    testLogin('测试帐户不存在','这是一个不存在的名字哦','xxxxxxx','该账户名不存在')
    testLogin('测试成功登录','qd_test_001','taobao1234','继续登录前操作')  
    # test find password
    output("测试[找回密码]链接")
    browser.visit(__testUrl)
    backPasswordLink = browser.find_link_by_text('取回密码')
    if 1 == len(backPasswordLink):
        backPasswordLink.first.click()
        ru = re.findall(re.compile(".*(reg/gp.htm).*", re.IGNORECASE), browser.url)
        if ru is not None:
            checkresult('找回密码')
        else:
            output("测试找回密码链接失败")  
except Exception,x:
    print x  
if CLOASE_AFTER_TEST:
    browser.quit()

Python 相关文章推荐
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
Apr 18 Python
python实现神经网络感知器算法
Dec 20 Python
django认证系统实现自定义权限管理的方法
Jul 16 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
Jan 30 Python
基于Python的PIL库学习详解
May 10 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
Python笔记之facade模式
Nov 20 Python
python FTP批量下载/删除/上传实例
Dec 22 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
python图形界面开发之wxPython树控件使用方法详解
Feb 24 Python
基于Python词云分析政府工作报告关键词
Jun 02 Python
Python 装饰器(decorator)常用的创建方式及解析
Apr 24 Python
Python获取远程文件大小的函数代码分享
May 13 #Python
Python FTP操作类代码分享
May 13 #Python
python生成指定尺寸缩略图的示例
May 07 #Python
python读取浮点数和读取文本文件示例
May 06 #Python
python创建线程示例
May 06 #Python
Python Web服务器Tornado使用小结
May 06 #Python
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 #Python
You might like
PHP 反向排序和随机排序代码
2010/06/30 PHP
php数据库配置文件一般做法分享
2012/07/07 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
php 基础函数
2017/02/10 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
作为PHP程序员你要知道的另外一种日志
2018/07/30 PHP
jQuery 性能优化指南(2)
2009/05/21 Javascript
Jquery中获取iframe的代码
2011/01/11 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
js select下拉联动 更具级联性!
2020/04/17 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
Python 异常处理的实例详解
2017/09/11 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
2018/02/05 Python
Django自定义用户认证示例详解
2018/03/14 Python
python pandas 对时间序列文件处理的实例
2018/06/22 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
pycharm永久激活超详细教程
2020/10/29 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
美国正版电视节目和电影在线观看:Hulu
2018/05/24 全球购物
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
香港零食网购:上仓胃子
2020/06/08 全球购物
Final类有什么特点
2012/04/25 面试题
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers