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中的闭包实例详解
Aug 29 Python
python实现用户登录系统
May 21 Python
python编码总结(编码类型、格式、转码)
Jul 01 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
Python中的元组介绍
Jan 28 Python
PyQt Qt Designer工具的布局管理详解
Aug 07 Python
Python配置文件处理的方法教程
Aug 29 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
mac使用python识别图形验证码功能
Jan 10 Python
pytorch方法测试——激活函数(ReLU)详解
Jan 15 Python
pycharm无法导入本地模块的解决方式
Feb 12 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 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汉字转换拼音的类
2013/06/18 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
php使用glob函数快速查询指定目录文件的方法
2014/11/15 PHP
php简单获取目录列表的方法
2015/03/24 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
php微信支付接口开发程序
2016/08/02 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
Javascript this 的一些学习总结
2012/08/31 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
js实现内置计时器
2019/12/16 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
Django model反向关联名称的方法
2018/12/15 Python
对Python w和w+权限的区别详解
2019/01/23 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
会计电算化应届生自荐信
2014/02/25 职场文书
关于教师节的演讲稿
2014/09/04 职场文书
详细的本科生职业生涯规划范文
2014/09/16 职场文书
银行先进个人总结
2015/02/15 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
公司与个人合作协议书
2016/03/19 职场文书