所谓的自动化测试模型,可以理解为自动化测试框架+工具设计的一种思想产物。

先说说库、框架、工具之间的区别:

库:英文名Library,由代码集成的一个产品,供用户调用。面向对象的库叫做类库,面向过程的库叫做函数库,webdriver就属于库的范畴。

框架:英文名Framework,为解决一个或一类问题而开发的产品,一般只需要使用框架提供的类或函数,即可实现全部功能。前面的博客中提到的unittest框架,

主要用于实现测试用例的组织和执行,以及测试结果的生成,因此通常称它为单元测试框架。

工具:英文名Tools,相对框架来说更抽象,屏蔽底层代码,一般提供单独的操作界面供用户使用,像QTP、selenium IDE就是自动化测试工具。

自动化测试发展至今,常见的测试模型有以下几种类型:

一、线性测试

早期的自动化测试,就是通过录制或者编写应用程序的操作步骤产生响应的线性脚本,来模拟用户完整的操作场景。

优点:单个脚本相对完整,且独立,可拿出来单独执行;

缺点:开发成本很高,测试用例之间可能存在重复操作,每次都要录制或编写重复的操作,比如用户登录;

维护成本很高,因为存在重复操作,因此如重复操作发生变更,就需要包含重复操作的用例都需要进行修改;

二、模块驱动化测试

将重复的操作独立封装为公共模块,用例执行过程中需要用到时调用该公共模块,最大限度的消除重复操作;

优点:提高开发效率,不用重复编写相同的脚本;

简化了维护的复杂性,如果某个地方发生变化,只需要修改变更内容即可;

三、数据驱动测试

即根据数据的改变去驱动自动化测试的执行,最终引起测试结果的改变,简单来说,数据驱动就是数据的参数化,因为输入的不同而引起输出的不同。

数据驱动的方式很多,无论读取的是定义的数组、字典,或是外部文件(excel、csv、txt、xml等),都可以看做数据驱动,目的都是实现数据与脚本分离

优点:增强脚本的复用性,比如用户登录模块,使用不同的数据进行登录,这样可以很好的适用于相同操作不同数据的情况。

四、关键字驱动测试

关键字驱动和数据驱动很相似,通过关键字的改变引起测试结果的改变,也称之为表格驱动测试基于动作字的测试

关键字驱动基本上将测试用例分为4个不同的部分,分别是:

测试步骤(Test Step)、测试步骤中的对象(Test Object)、测试对象执行的动作(Action)、测试对象需要的数据(Test Data)。

目前典型的关键字驱动工具以QTP(最新版本叫做UTF)和Robot Framework为主,前者为商业工具,后者开源。

这类工具皆封装了底层代码,提供独立的图形界面,只需使用工具所提供的关键字,以“填表格”的方式来编写用例即可。

缺点:个人认为,这种傻瓜式的测试模型对个人的技术和经验提升,没有太大帮助,我本人还是比较倾向于写代码去实现自动化测试,毕竟,“代码改变世界!

不过话说回来,无论是工具还是测试模型,都是辅助我们更好的工作,提升效率;这一点,仁者见仁智者见智,观点不同而已。。。

五、综合自动化测试

上面的几种自动化测试模型,有各自的适用场景和优缺点,但实际来说,真实的场景往往比我们预估的更复杂,所以,根据实际情况选择合适的测试模型,综合使用不失为一种比较合理的做法。

个人认为,成功的自动化测试模型,通常都融合了“模块驱动”+“数据驱动/关键字驱动”,优点如下:

1、即拥有脚本与测试数据相互分离的优点,又结合了模块驱动的架构,这样会使得测试脚本更加简洁,并减少运行时意外失败的可能性;

2、该架构可以实现一些纯粹的“数据/关键字驱动测试”难以实现的自动化测试任务;

3、大大减少了测试用例的维护复杂性,提升了脚本开发效率,测试脚本的可复用性、移植性较强;

关于具体的测试模型使用实例,后续后不断更新介绍。。。

UI自动化测试模型的更多相关文章

  1. 浅谈UI自动化测试

    最近一直在学习python,正好部门技术结构调整,就开始了点工向UI自动化测试的转变,我要说瞌睡来了就掉枕头么? 不过还好,可以将python的学习成果在自动化测试中实践... 1.about自动化测 ...

  2. APP的UI自动化测试框架及平台化探索

    顾铮,10年+测试及测试开发相关经验,2014年加入京东,曾主导设计开发UI测试框架,参与CI测试平台建设,现负责iOS侧的工具,框架建设.在UI自动化,性能测试,单元测试方面有较深入研究,在App, ...

  3. 腾讯优测优分享 | 游戏的UI自动化测试可以这样开展

    腾讯优测是专业的自动化测试平台,提供自动化测试-全面兼容性测试,云真机-远程真机租用,漏洞分析等多维度的测试服务,让测试更简单! 对于目前的两大游戏引擎cocos-2dx.unity3D,其UI自动化 ...

  4. 使用WatiN进行UI自动化测试

    Watin是一个UI自动化测试工具,支持ie/firefox,官方网站:http://watin.org/. 主要有以下特点: 支持主要的html元素,见:http://watin.org/docum ...

  5. 如何正确选择UI自动化测试

    近年流行一个词-UI,和UI搭边好像都那么高大上,软件测试行业也不例外,比如UI自动化测试. 常见的UI自动化测试程序有哪些呢? l  带UI的Unit Test,比如mock掉底层代码,仅仅测试UI ...

  6. UI自动化测试框架(项目实战)python、Selenium(日志、邮件、pageobject)

    其实百度UI自动化测试框架,会出来很多相关的信息,不过就没有找到纯项目的,无法拿来使用的:所以我最近就写了一个简单,不过可以拿来在真正项目中可以使用的测试框架. 项目的地址:https://githu ...

  7. 【转】Web UI自动化测试原理

    目前市面上有很多Web UI自动化测试框架,比如WatiN, Selinimu,WebDriver,还有VS2010中的Coded UI等等.  这些框架都可以操作Web中的控件,模拟用户输入,点击等 ...

  8. 关于去哪儿网的UI自动化测试脚本(Python实现)

    UI自动化测试Qunar机票搜索场景访问Qunar机票首页http://flight.qunar.com,选择“单程”,输入出发.到达城市,选择today+7日后的日期,点“搜索”,跳转到机票单程搜索 ...

  9. 分享UI设计模型

    UI设计模型是可重用的界面设计解决方案,可以让开发人员少走弯路,节约不少开发时间.下面慧都小编跟大家分享6个很有用的UI设计模型资源,希望对你有用: 1.UI Patterns 由一个丹麦人开发的UI ...

随机推荐

  1. MVC中返回json数据的两种方式

    MVC里面如果直接将数据返回到前端页面,我们常用的方式就是用return view(): 那么我不想直接用razor语法,毕竟razor这玩意儿实在是太难记了,还不如写ajax对接来得舒服不是 那么我 ...

  2. canvas-2lineJoin.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. ES6学习之变量的解构赋值

    前言:什么是ES6?ECMAScript 6(简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.其中相比较于ES5新增了诸多的特性,并且ES6可转换为ES5的语法.- ...

  4. git与vscode连接的一种简单方式

    首先你得安装git,如果你还没安装git,推荐你一个视频git的下载与安装,这套视频包含VS code和git的基本使用,当你看完它,就可以不看我的这篇博客了. 废话不多说,直接进入正题: 首先进入g ...

  5. 笔记-返回到前一个页面时显示前一个页面中ajax获取的数据

    笔记第一部分:http://www.cnblogs.com/zczhangcui/p/6869219.html 在第一部分遇到的问题是,用ajax获取了一系列列表信息后,拼接好html后插入到了原有页 ...

  6. js小知识

    1.重新声明js变量,变量值不丢失 2.background-color 使用jquery获取样式中的background-color的值时发现在获取到的颜色值在IE中与Chrome.Firefox显 ...

  7. 【代码笔记】Web-ionic-index创建侧边栏

    一,创建侧边栏. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  8. NopCommerce 根据手机浏览器和桌面浏览器切换 Theme

    自从 NopCommerce 升级到 3.x 以来,默认的 ViewName.Mobile.cshtml 方式就被响应式的默认 Theme 取代了. 但是在今天各种手机专用前端库大行其道的情况下,响应 ...

  9. 二. Redis 安全性

    由于Redis速度相当快,当一台服务器比较好的时候,一个外部用户可以在一秒钟内进行150K(15万)次的密码尝试,因此意味着你需要设置一个非常非常强大的密码来防止暴力破解. 1.设置密码 (1). 通 ...

  10. python格式化字符串format函数

    1. format可以接受无限个的参数,位置可以不按顺序: In [1]: "{} {}".format("hello","world") ...