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 相关文章推荐
详解Django通用视图中的函数包装
Jul 21 Python
python实现给数组按片赋值的方法
Jul 28 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
使用11行Python代码盗取了室友的U盘内容
Oct 23 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 Python
详解基于python-django框架的支付宝支付案例
Sep 23 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
Dec 20 Python
Python3 mmap内存映射文件示例解析
Mar 23 Python
使用python创建生成动态链接库dll的方法
May 09 Python
Python模块zipfile原理及使用方法详解
Aug 04 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 Python
一篇文章弄懂Python中的内建函数
Aug 07 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实现小型站点广告管理
2006/10/09 PHP
php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
PHP三元运算符的结合性介绍
2012/01/10 PHP
PHP乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
destoon公司主页模板风格的添加方法
2014/06/20 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
PHP session文件独占锁引起阻塞问题解决方法
2015/05/12 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
使用js画图之画切线
2015/01/12 Javascript
Jquery遍历Json数据的方法
2015/04/20 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
JavaScript中的 new 命令
2019/05/22 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
python实现桌面壁纸切换功能
2019/01/21 Python
Python实现字符串中某个字母的替代功能
2019/10/21 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
优秀管理者获奖感言
2014/02/17 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
住宅质量保证书
2014/04/29 职场文书
婚宴新郎致辞
2015/07/28 职场文书
施工现场安全管理制度
2015/08/05 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS
python 如何用terminal输入参数
2021/05/25 Python