第六章 自动测试实施(上)
---Web自动化测试之Webdriver(python)--从零到熟练(系列)
从本章开始,我们将讲述如何实施自动化测试,在第一章的时候,我们也提供了自动化实施的步骤。那些儿步骤是指导方针,可以按着这一步步地去实施,可是有点儿笼统。本章我们将从具体实例入手,按前面的我们提到的步骤来讲解,通过本章的学习,你可以从一个被测试的网站着手,从零开始建立起普通的回归测试用例。
6.1 评审被测试对象功能
现在你的老大给你分配个任务:我们公司的业务已经成熟,网站主要功能也基本上不会变化了,我们想在每次上线后自动回归一下主功能。所以呢,我们想让你对我们的网站建立起自动化测试,用例要求覆盖主要功能。
当你接到这个任务的时候,你应该如何去做呢?不是去想用什么来写自动化,或是马上用你擅长的语言马上就去写测试脚本。而是要先分析一下被测网站的功能,哪些儿是主要的,哪些儿必须自动化,哪些儿不能自动化。
现在我们以众筹网(www.zhongchou.cn)为例 ,分析一下主要功能:
(1)登录注册
(2)浏览项目
(3)搜索项目
(4)查看项目详情
(5)支持项目
(6)个人信息设置
(7)发起项目
(8)查看自己相关的项目
(9)发起的项目管理和订单发货
(10)消息中心
等等 ,这十个主要功能是网站最基本的功能,然后我们分析一下哪些儿能自动化,哪些儿不能?
能自动化的部分:1,2,3,4,6,8,10
不能自动化的部分:5,7,9
为什么不能自动化呢?5,支持项目,涉及到真实的支付,影响项目对账,因为不管是测试环境还是线上环境,都是真实的支付,如果有支付的测试环境,也是可以自动化的。
7,发起项目,发起项目通过审核后,会在线上产生测试数据,影响用户体验。这违反了测试不能对线上产生垃圾数据的原则,所不不建议自动化,但是可以测试发起项目的流程,不对项目进行上线。
9,发起的项目管理和订单发货。发起项目我们就没有自动化,所以这块功能是没有数据的,再者订单发货会短信通知支持者,会影响到用户,不建议自动化。
当你接到任何一个测试任务的时候,需要先这样分析一下被测试对象的功能及是否合适自动化测试。然后查找一下是否存在对应功能的手工测试用例,一般公司都会做测试用例的收集工作的。如果没有,就先编写对应的测试用例,然后再去转化成自动化测试用例。
6.2 评审被测对象编码
评审完了主功能,然后开始评审被测试对象的编码,选择与被测试对象相同或是同一系列的脚本语言来写测试用例。一般网站编码无非是ASP.NET,PHP,JSP等,编写测试用例的脚本语言也可以用php,python,java等,根据实际情况,做出相应的选择。
经查看,我们的众筹网是用php编写的,按原则来说,我们应该用php来编写测试用例。Webdriver也支持php,但是php支持库不多,在用例组织和报告生成等方面也存在着不足,所以目前用php编写自动化测试用例的不多。综合考虑各种因素,我们决定用python来编写自动化测试用例。
6.3 自动化测试框架的选择
目前业界做页面自动化的都是选用selenium1.0 RC或是selenium2.0(webdriver),而它们之间是存在着区别的:
Selenium RC 工作原理:
(1)RC server 在服务端启动 浏览器 并将Core 注入到浏览器中 (为了解决浏览器的同源策略)
(2)我们的测试脚本调用Client API,Client将操作转化成标准的selenese语句发送给RC Server。
(3)Selenium Core 解释selenese 语句,通过js的方式操作浏览器。
Webdriver 工作原理:
(1)WebDriver 启动目标浏览器,并绑定到指定端口。该启动的浏览器实例,做为web driver的remote server。
(2)Client 端通过CommandExcuter 发送HTTPRequest 给remote server 的侦听端口(通信协议: the webriver wire protocol)。
(3)Remote server 需要依赖原生的浏览器组件(如:IEDriver.dll,chromedriver.exe),来转化转化浏览器的native调用。
那么remote server端的这些功能是如何实现的呢?答案是浏览器实现了webdriver的统一接口,这样client就可以通过统一的restful的接口去进行浏览器的自动化操作。目前webdriver支持ie, chrome, firefox, opera等主流浏览器,其主要原因是这些浏览器实现了webdriver约定的各种接口。
优缺点:
(1)RC 需要启动一个 RCserver,就直观感觉上多了一个步骤。
(2)RC 采用js 的方式,稳定性和兼容行方面还是取决与js的代码的质量。有时需要自己去写js代码来扩展相应的功能。由于自己是从RC用起的,对于RC js的方式还是比较接受,感觉比较灵活。
(3)至于弹出对话框和警告框的处理,RC原生是不支持的。不过可以通过第三方软件来解决,比如autoit。我用的就是autoit,使用简单方便,是一个不错的工具。
通过上面的分析,结合现在的时代潮流,我们采用高版本的selenium 2.0来作为我们的自动化测试的框架。
6.4 自动化测试用例运行环境
由于我们采用的是python开发的脚本语言,对运行环境要求不是太高,可是相应的包还是要安装的。在脚本编写期间,我们一般是在自己机器上编写和调试的,运行环境是windows环境。在后期的交付运行,自动执行回归的时候,我们要放到服务器上,服务器是linux环境的。
在Windows环境和linux环境下,python运行环境差别不大,所以不要太担心环境的问题。可是也有需要注意的地方,比如说文件路径的写法,两个环境下还是不同的。这也是我们一再要求用相对路径,最好用函数来获取路径,而不是把路径写死到代码中的原因。
6.5 自动化代码架构的规划
任何一个好的程序,都需要有好的规划。考虑到现在的结构化程序设计,我们的自动化测试代码也需要好好规划一下架构,不能像记流水帐似的按测试用例的步骤罗列下来。
6.5.1 代码架构规划的原因
自动化测试用例的主要工作就是回归测试,由于其任务的特殊性,就决定了自动化测试用例是成体系的,大里的自动化测试用例放在一起,如果不好好规划一下,会给后期的工作带来很大的影响。
代码规划的原因:
(1)增加可读性。根据用途,将代码进行分类存放,方便团队其他成员进行代码管理与合作开发。
(2)便于维护。自动化测试用例不可能是一成不变的,被测试的网站变化了,我们对应的自动化测试用例也要进行相应的维护。如果不进行规划,出现问题后不方便定位,更加会耗费大量的成本去维护。
(3)提高代码利用率。结构化程序设计,要求我们对代码重复利用率要高,同样的代码要写在公用函数或是方便,减少代码量。
6.5.2 如何规划代码架构
目前自动化的用法主要有两种:1,简单录制回放转化成的测试用例,此用例用于反复测试的功能点,一旦功能上线后便不再用。目地是加快回归测试的执行。特点就是对功能进行反复测试,不考虑通用性,健壮性等。2,用于回归测试的系统化的测试用例。此种用例是需要反复执行的,一定要考虑程序的通用性,健壮性以及执行时间等。
针对第一种测试用例,虽然使用时间比较短,通用率也不高,不过有些儿公司还是会收集这样的测试用例的,以便以后同样的或是类似的功能回归测试的时候用。此时可以按业务线对测试用例进行存放,测试用例中包含测试脚本和测试数据。
回归测试自动化测试用例是我们的重点,所以我们要详细规划一下:
(1)为了增加代码的通用性,我们把大部分测试用例需要执行的操作步骤封装成函数,放到公共的类中,并把公共的类也按功能进行分类,统一放到一个文件夹下,如CommonFunction.
(2)将所有的测试用例放到一个文件夹下,测试用例与测试数据分离开,以便网站有变化的时候,我们只需要修改相应该的测试数据即可。测试用例放到一个文件夹下,如:TestCases。
(3)测试数据放到和测试用例同名的Xml文件中,然后通过公用的数据读取方法,对测试数据进行读取,然后在测试用例中调用通用的函数,读取到的数据传递过去。所有数据存放到统一的文件夹下,如:TestData.
(4)测试用例集的存放。由于不同的测试目的,我们会运行不同的测试用例。如果测试目的A,我们将运行测试用例1,2,3;测试目的B ,我们运行测试用例1,3,4,5。所以我们会有不同的测试用例集文件,将这些儿文件统一存放到一个文件夹下,如:TestSuites.
(5)其他的资源文件,可以创建不同的文件夹来进行存放,如图片文件夹image.
所以,经过规划后,我们的测试用例结构如图6.5.2所示,图中的文件是我先前写的测试用例。下面的章节,我们会具体讲述测试用例:
图6.5.2 自动化测试用例代码结构规划
转载于:https://www.cnblogs.com/eagleking0318/p/6520878.html
第六章 自动测试实施(上)相关推荐
- 【数据结构】第六章:图(上)
第六章:图(上) OVERVIEW 第六章:图(上) 一.基本概念 1.图G相关概念: 2.顶点V相关概念: 3.边E相关的概念: 4.子图G相关概念: 二.图的存储结构 1.数组表示法Adjacen ...
- 第六章 深度学习(上中)
其他的深度学习模型 在整本书中,我们聚焦在解决 MNIST 数字分类问题上.这一"下金蛋的"问题让我们深入理解了一些强大的想法:随机梯度下降,BP,卷积网络,正规化等等.但是该问题 ...
- 第六章 深度学习(上)
在上一章,我们学习了深度神经网络通常比浅层神经网络更加难以训练.我们有理由相信,若是可以训练深度网络,则能够获得比浅层网络更加强大的能力,但是现实很残酷.从上一章我们可以看到很多不利的消息,但是这些困 ...
- 数字图像处理第六章——彩色图像处理(上)
数字图像处理第六章 数字图像处理---彩色图像处理 (一) 在 MATLAB 中彩色图像的表示 1.1 RGB图像 1.2 索引图像 1.3 处理 RGB图像和索引 (二)彩色空间之间的转换 2.1 ...
- 判断按键值_「正点原子NANO STM32开发板资料连载」第十六章电容触摸按键实验...
1)实验平台:ALIENTEK NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十六章电容 ...
- C++程序设计原理与实践 习题答案 第二十六章 第26章习题答案
第二十六章:测试 习题答案 本章的BinarySearch Binary_Search.h 26.2 26.2 测试集 26.3 26.4 26.5 26.8 and 26.9 26.8 测试集 26 ...
- 【正点原子MP157连载】 第六章 TF-A 使用-摘自【正点原子】【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- 【正点原子STM32连载】第五十三章 DSP测试实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- 软件自动化测试平台设计,软件自动测试平台的设计与实现
[摘要] 随着科学技术的飞速发展,社会生活已经迈入了信息化时代,软件也不可避免地成为人们信息化生活中不可或缺的一分子.软件的广泛使用使得人们对软件产品的质量要求越来越高.为了保证软件产品的质量,软件测 ...
最新文章
- Vue 2.5中将迎来有关TypeScript的改进!
- 二分图最小覆盖的Konig定理及其证明
- MyBatisPlus_查询篇_入门试炼_01
- strictmath_Java StrictMath hypot()方法与示例
- ui kit模板的用途是什么?
- 服务器webpack构建性能,[译] 优化 WEBPACK 以更快地构建 REACT
- 放在请求头目的_浅谈http的几种请求方法
- d-s证据理论 matlab 完整代码
- supervisor命令行
- 史玉柱:从巨人到大闲人
- neutron-server.service启动失败显示代理报错http://controller:9696/v2.0/agents.json
- 汇正财经骗局?科创50大涨
- oracle数据块的大小设置,Oracle数据块的大小
- 桌面窗口管理器占用GPU高的解决办法
- 钉钉开放文档——JSAPI鉴权失败
- 0x7c97cdf2指令引用的0x00000014内存。该内存不能为”written
- HTTP的详细请求过程
- VPP调试trace显示
- 【如何快速的开发一个简单的iOS直播app】(代码篇)
- 计算机农业sci,IEEE旗下JCR1区智慧农业类SCIEI期刊
热门文章
- acer软件保护卡怎么解除_人社局回应!从单位辞职了社保怎么处理
- 哪些系统使用了linux内核,Linux操作系统有哪些
- android百度地图根据点路线规划,Android 百度地图路径规划一直都是搜索不到结果...
- gperftools安装使用_记一次使用gperftools优化线上程序
- oracle 断电 瞬间 同步,Oracle 11g 测试ogg中断之后,重新同步操作
- java 反射获取属性名和值_面试官这样问我Java反射原理,我刚好都会
- c语言自动存储,C语言存储分类
- 工业机器人 答案 韩建海_探秘沈阳高科技机器人产业,玩转辽宁科技馆体验感爆棚...
- oracle cost小 比较慢,Oracle数据库中有关CBO优化的三个问题
- rbac模型的特点和优势_权限体系设计:融合了组织和岗位的权限模型长啥样?...