文档章节

用 Python 开发自动化测试脚本

jastme
 jastme
发布于 2016/01/29 17:32
字数 1369
阅读 230
收藏 18
点赞 1
评论 0

通常对于一个稍具规模的系统,一些新的改动势必会带来一些额外的功能回归测试工作,而这个工作是非常繁杂的,人肉的方式一次又一次的重复将会非常的枯燥乏味。


而我们所希望的,是一种自动化回归脚本的方式,可以重复性的回归现有功能,并给出回归测试报告。


Python的世界有一个开源框架Splinter,可以非常棒的模拟浏览器的行为(从某种意义上也可以说是人的访问点击行为)。Splinter提供了丰富的API,可以获取页面的信息,以判断当前的行为所产生的结果


最简单的例子

browser = Browser(‘firefox’) 模拟一个浏览器

browser.visit(‘http://waptest.taobao.com/login/login.htm’) 访问指定URL

browser.fill(‘TPL_username’,’test_04’) 填充表单用户名

browser.fill(‘TPL_password’,’taobao1234’) 填充表单密码

browser.find_by_value(‘登录’).first.click()表单提交


运行代码,splinter会打开你所指定的浏览器然后进行各种操作,像放电影一样的根据你的代码逻辑在你面前一步一步执行。


举个例子,现在我们要回归登录功能,以前我们从未开发过这样的脚本,所以现在我们首先要开发一个用于模拟登录行为的脚本。


如下面代码(其实是非常简短的一个代码):

#!/user/bin/python
# -*- coding: utf8 -*-
 
import sys
import re
from splinter.browser import Browser
 
#####################################################
# global instance
CLOASE_AFTER_TEST = False
GBK = "gbk"
UTF8 = "utf8"
 
#####################################################
# encoding for console
reload(sys)
sys.setdefaultencoding(UTF8)
 
#####################################################
# small method
encoding = lambda x:x.encode('gbk')
 
#####################################################
def output(x):
    """
        encode and print
    """
    print encoding(x)
 
def resultMsg(x):
    """
        judge result and print, x : True or False
    """
    if x == True:
        print 'pass'
    else:
        print '[X]not pass'
    print '--------------------------'
 
def checkresult(x):
    """
        check result message, x : the error message u want
    """
    resultMsg(browser.is_text_present(x))
 
def testLogin(desc, username, password, result):
    """
        fill login form message and submit, check result message and print
    """
    output(desc)
    browser.fill('TPL_username',username.decode(UTF8))
    browser.fill('TPL_password',password.decode(UTF8))
    browser.find_by_value('登录').first.click()
    checkresult(result)
 
__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
# already support firefox
browser = Browser()
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()

从这几句我们可以看到,我们大致要测试的几种登录情况:


testLogin(‘测试未输入用户名’,”,”,’请输入会员名’)


testLogin(‘测试未输入密码’,'qd_test_001′,”,’请输入密码’)


testLogin(‘测试帐户不存在’,'这是一个不存在的名字哦’,'xxxxxxx’,'该账户名不存在’)


testLogin(‘测试成功登录’,'qd_test_001′,’taobao1234′,’继续登录前操作’)



跑一下脚本,可以得到结果:


————————————————————————–


测试页面:用户登录 – 手机淘宝网


测试未输入用户名


pass


————————–


测试未输入密码


pass


————————–


测试帐户不存在


pass


————————–


测试成功登录


pass


————————–


测试[找回密码]链接


pass


————————————————————————-


 

这里的输出是我们代码控制的,你也可以将结果保存到文件中发送到某个监控系统或者邮箱。


首次开发完自动化回归脚本后,以后的功能调整,我们就不再需要人肉去操作,跑一下脚本,就可以得到结果。


附:


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。


然后你所开发的模拟的任何行为,都会自动完成,你只需要坐在电脑面前,像看电影一样看着屏幕上各种动作自动完成然后收集结果即可。


© 著作权归作者所有

共有 人打赏支持
jastme
粉丝 35
博文 122
码字总数 59358
作品 0
成都
程序员
不是你学不会Python,只说你的学习方法不对!那如何学习Python呢

有没有那么一个瞬间,你想放弃学习Python? 做任何事情一定有在短期内简单可行的方法。学习不应该是苦差事,而应该是快乐的,重要的是找到适合自己的学习方法。 很多人觉得自己一定能够自学好...

Python燕大侠 ⋅ 06/06 ⋅ 0

你真的了解Python吗?这篇文章让你了解90%

  【IT168 评论】人们为什么使用Python?   之所以选择Python的主要因素有以下几个方面:   软件质量:在很大程度上,Python更注重可读性、一致性和软件质量,从而与脚本语言世界中的其...

博客园 ⋅ 05/21 ⋅ 0

Python3.6实现12306火车票自动抢票,附源码

Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象、直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理...

猫咪编程 ⋅ 06/05 ⋅ 0

高手问答第 202 期 —— 想要玩转 Python?不妨从 Python 网络爬虫开始

OSCHINA 本期高手问答(2018 年 6 月 20 日 — 6 月 26 日)我们邀请到了黄永祥@XyHJw 和大家一起讨论关于 Python 爬虫的问题。 黄永祥,信息管理与信息系统专业学士,曾从事过系统开发和自动化...

局长 ⋅ 昨天 ⋅ 0

详解Python开发的发展方向及其对应的薪资!

百度CEO曾表述:靠移动互联网的风口现已没有可能再出现独角兽了,由于市场现已进入了一个相对平稳的发展阶段,互联网人口渗透率现已超过了50%。而未来的机会在人工智能。确实互联网巨头公司在...

Python燕大侠 ⋅ 05/06 ⋅ 0

云计算培训学院,云计算Python自动化运维开发实战

都忘记是什么时候知道python的了,我是搞linux运维的,早先只是知道搞运维必须会shell,要做一些运维自动化的工作,比如实现一些定时备份数据啊、批量执行某个操作啊、写写监控脚本什么的。后...

长沙千锋 ⋅ 05/15 ⋅ 0

测试驱动开发 Nginx 配置

问题背景 2017年中,我参与了一个亚太地区互联网公司并购的项目,客户收购了亚太地区 7 个国家的同行业互联网企业和产品。我作为其中的 DevOps 咨询师和 DevOps 工程师,和客户一起完成并购后...

顾宇 ⋅ 06/12 ⋅ 0

筒子们,免费学习《Python自动化测试开发实践》课啦,请接住~

经常会有人问: 蛋哥,最近有没有什么免费的技术课啊? 蛋哥,最近有什么关于Python的课程么? 蛋哥,最近有没有测试的直播课额? 蛋哥,…… 应广大群众的强烈呼唤,为了让大家尽可能多的学...

蜗牛学院 ⋅ 04/13 ⋅ 0

使用pytest进行Python自动化测试

简介与安装 pytest是一个针对Python的自动化测试框架,它可以使简单的和可扩展的测试变得容易。使用pytest进行测试是简洁和可读的,不需要样板代码,这使得我们可以很方便地进行自动化测试。...

郗南枫 ⋅ 06/17 ⋅ 0

Python 3 的环境下如何正确地使用 Fabric

注:标题中「Fabric」指的是 Fabric( http://www.fabfile.org ),一个 Python 社区常用的远程/本地自动化执行工具。 讲 Fabric 之前,先讲讲我的 Python 开发环境。 很久以前,那会还在用 ...

I'm TualatriX ⋅ 05/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

懒惰根本就不存在

简评:芝加哥大学心理学教授,懒惰根本就不存在。(本文表面讲行为心理学实则讲教育) 金句:以好奇而不是判断来回应一个人的无效行为,是非常有帮助的。 本文「我」代表原作者 E Price。 自...

极光推送 ⋅ 26分钟前 ⋅ 0

Excel提取单元格中最后一个“.”后面的数据

java.lang.String ----- String =TRIM((MID(SUBSTITUTE(B2,".",REPT(" ",99)),(LEN(B2)-LEN(SUBSTITUTE(B2,".","")))*99,99)))...

klog ⋅ 28分钟前 ⋅ 0

mac远程桌面

下载安装remote-desktop-mac Mac beta 客户端 mac通过远程桌面访问windows服务器。

亚林瓜子 ⋅ 32分钟前 ⋅ 0

firrtl

动手---sbt(2)之后,再回头看 chisel第一个实验,根据 https://github.com/freechipsproject/firrtl 发现firrtl没有执行sbt assembly命令,重新执行这个命令,结果成功。如下图: joe@joe-As...

whoisliang ⋅ 36分钟前 ⋅ 0

NIO

一、通道(Channel):用于源节点与目标节点的连接。在 Java NIO 中负责缓冲区中数据的传输。Channel 本身不存储数据,因此需要配合缓冲区进行传输。 二、通道的主要实现类 java.nio.channel...

stars永恒 ⋅ 37分钟前 ⋅ 0

Android悬浮窗的实现

0. 前言   现在很多应用都使用到悬浮窗,例如微信在视频的时候,点击Home键,视频小窗口仍然会在屏幕上显示。这个功能在很多情况下都非常有用。那么今天我们就来实现一下Android悬浮窗,以...

猴亮屏 ⋅ 37分钟前 ⋅ 0

日志采集中的关键技术分析

概述 日志从最初面向人类演变到现在的面向机器发生了巨大的变化。最初的日志主要的消费者是软件工程师,他们通过读取日志来排查问题,如今,大量机器日夜处理日志数据以生成可读性的报告以此...

tqyin ⋅ 38分钟前 ⋅ 0

使用Navicat将数据导出为text文本 然后再导入

将数据导出为text文本效率很高 1. 准备工作 1.1 准备表结构 1.2 目标库 执行生成表结构sql 2.将表数据导出为text文本 生成的text文本 3. 目标库 导入text 4.效果...

Lucky_Me ⋅ 44分钟前 ⋅ 0

IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)

文章介绍了idea下,项目乱码、控制台乱码及运行tomcat控制台乱码的解决方案,文章链接:https://www.cnblogs.com/vhua/p/idea_1.html

Funcy1122 ⋅ 47分钟前 ⋅ 0

IDEA使用sonarLint

一、IDEA如何安装SonarLint插件 1.打开 Idea 2.点击【File】 3.点击【Settings】 4.点击【Plugins】 5.在搜索栏中输入“sonarlint”关键字 6.点击【Install】进行安装 7.重启Idea 二、IDEA如...

开源中国成都区源花 ⋅ 52分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部