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求解水仙花数的方法
May 11 Python
python绘图方法实例入门
May 19 Python
Python将阿拉伯数字转换为罗马数字的方法
Jul 10 Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 Python
python实现图片中文字分割效果
Jul 22 Python
python统计指定目录内文件的代码行数
Sep 19 Python
Pyorch之numpy与torch之间相互转换方式
Dec 31 Python
将tensorflow模型打包成PB文件及PB文件读取方式
Jan 23 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
常用的10个Python实用小技巧
Aug 10 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 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
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
PHP UTF8中文字符截断函数代码
2012/09/11 PHP
解析php中的escape函数
2013/06/29 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
高性能web开发 如何加载JS,JS应该放在什么位置?
2010/05/14 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
vue2.0 路由不显示router-view的解决方法
2018/03/06 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
numpy matrix和array的乘和加实例
2018/06/28 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
公司出纳岗位职责
2013/12/07 职场文书
酒吧总经理岗位职责
2013/12/10 职场文书
个人务虚会发言材料
2014/10/20 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
2014年大班保育员工作总结
2014/12/02 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
家装业务员岗位职责
2015/04/03 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
小学作文指导之如何写人?
2019/07/08 职场文书
Python中异常处理用法
2021/11/27 Python