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 相关文章推荐
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
实例解析Python的Twisted框架中Deferred对象的用法
May 25 Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 Python
python生成lmdb格式的文件实例
Nov 08 Python
python使用minimax算法实现五子棋
Jul 29 Python
windows下python安装pip方法详解
Feb 10 Python
python:HDF和CSV存储优劣对比分析
Jun 08 Python
python三引号如何输入
Jul 06 Python
如何在pycharm中安装第三方包
Oct 27 Python
Python实现哲学家就餐问题实例代码
Nov 09 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
Dec 14 Python
Python借助with语句实现代码段只执行有限次
Mar 23 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批量上传图片的具体实现方法介绍.
2014/02/26 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
Laravel日志用法详解
2016/10/09 PHP
Yii使用DbTarget实现日志功能的示例代码
2020/07/21 PHP
通过Jquery遍历Json的两种数据结构的实现代码
2011/01/19 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
原生js和jquery实现图片轮播特效
2015/04/23 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
jquery心形点赞关注效果的简单实现
2016/11/14 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
微信小程序使用Socket的实例
2017/09/19 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
原生js实现Flappy Bird小游戏
2018/12/24 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
python 文件转成16进制数组的实例
2018/07/09 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
三八妇女节活动主持词
2014/03/17 职场文书
工厂仓管员岗位职责范本
2014/07/17 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
清洁工岗位职责
2015/02/13 职场文书
2015年上半年计生工作总结
2015/03/30 职场文书
国家助学金受助感言
2015/08/01 职场文书
高三数学教学反思
2016/02/18 职场文书
详解Apache SkyWalking 告警配置指南
2021/04/22 Servers
python实现层次聚类的方法
2021/11/01 Python