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单链表的简单实现方法
Sep 23 Python
在Python中利用Into包整洁地进行数据迁移的教程
Mar 30 Python
介绍Python中的__future__模块
Apr 27 Python
Python简单实现enum功能的方法
Apr 25 Python
python复制文件到指定目录的实例
Apr 27 Python
Python运维之获取系统CPU信息的实现方法
Jun 11 Python
利用python和百度地图API实现数据地图标注的方法
May 13 Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 Python
python实现低通滤波器代码
Feb 26 Python
pygame实现弹球游戏
Apr 14 Python
解决Keras使用GPU资源耗尽的问题
Jun 22 Python
学会用Python实现滑雪小游戏,再也不用去北海道啦
May 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
PHP配置心得包含MYSQL5乱码解决
2006/11/20 PHP
php strtotime 函数UNIX时间戳
2009/01/14 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
js静态方法与实例方法分析
2011/07/04 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
浅析javascript函数表达式
2016/02/10 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
2016/12/18 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
PyQt5主窗口动态加载Widget实例代码
2018/02/07 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
公司前台接待岗位职责
2013/12/03 职场文书
竞选大队委员演讲稿
2014/04/28 职场文书
活动总结新闻稿
2014/08/30 职场文书
解放思想演讲稿
2014/09/11 职场文书
欢迎家长标语
2014/10/08 职场文书
离婚协议书格式
2014/11/21 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
董事会决议范本
2015/07/01 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL
简单聊聊Golang中defer预计算参数
2022/03/25 Golang