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字符串拼接六种方法介绍
Dec 18 Python
python微信跳一跳系列之色块轮廓定位棋盘
Feb 26 Python
python实现抖音视频批量下载
Jun 20 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
Pandas之DataFrame对象的列和索引之间的转化
Jun 25 Python
3行Python代码实现图像照片抠图和换底色的方法
Oct 10 Python
Python文件路径名的操作方法
Oct 30 Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
Dec 23 Python
简单的Python人脸识别系统
Jul 14 Python
python编程学习使用管道Pipe编写优化代码
Nov 20 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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
第四节--构造函数和析构函数
2006/11/16 PHP
php读取csv文件并输出的方法
2015/03/14 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
用javascript获得地址栏参数的两种方法
2006/11/08 Javascript
javascript 表单的友好用户体现
2009/01/07 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
jQuery实现文本框输入同步的方法
2015/06/20 Javascript
JS+CSS实现仿msn风格选项卡效果代码
2015/10/22 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
uploader秒传图片到服务器完整代码
2017/04/22 Javascript
详解Angular 4.x Injector
2017/05/04 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
python聊天程序实例代码分享
2013/11/18 Python
Python字符串逐字符或逐词反转方法
2015/05/21 Python
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
django基础学习之send_mail功能
2019/08/07 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
优秀士兵先进事迹
2014/02/06 职场文书
运动会入场词200字
2014/02/15 职场文书
开门红主持词
2014/04/02 职场文书
机械机修工岗位职责
2014/08/03 职场文书
实习科室评语
2015/01/04 职场文书
Golang日志包的使用
2022/04/20 Golang