当前位置: 首页 > news >正文

【经验分享】自动化测试框架实战

一、什么是自动化测试框架

在了解什么是自动化测试框架之前,先了解一下什么叫框架?框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。 从框架的定义可以了解,框架可以是被重用的基础平台;框架也可以是组织架构类的东西。其实后者更为贴切,因为框和架本来就是组织和归类所用的。所以自动化测试框架的定义为:由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合。也可以是一种思想和方法的集合。

框架分类:

  • 按框架的定义来分  自动化测试框架可以分为:基础功能测试框架、管理执行框架。
  • 按不同的测试类型来分  可以分为:功能自动化测试框架、性能自动化测试框架。
  • 按测试阶段来分  可以分为:单元自动化测试框架、接口自动化测试框架、系统自动化测试框架。
  • 按组成结构来分  可以分为:单一自动化测试框架、综合自动化测试框架。
  • 按部署方式来分  可以分为:单机自动化测试框架、分布式自动化测试框架。

二、自动化测试框架

1、模块化思想

就是将一个测试用例中的几个不同的测试点拆分并且将其单个点的测试步骤进行了封装,形成了一个模块。
例如:一个测试用例要对一个登录程序进行测试,其中包括:用户名输入、密码输入、以及确定登录;那么就可以将用户名输入、密码输入、确定登录、取消登录四个操作分别封装在四个不同的模块中。测试时,只需调用其模块即可。这样的话,当一个模块有变化,你只需单独维护那个模块即可,也可以根据模块的不同组合成不同的测试用例。

2、测试库思想

就是模块化思想的升华,其为应用程序的测试创造了库文件(可以是APIs、DLLs等),这些库文件为一系列函数的集合。其与模块化思想不同的是,其拓展了接口思想,即可以通过接口去传递参数,而不是一个封死的模块,可以说是一个多了一个“门”的交互型模块。
例如:还是以上那个测试用例,只是将用户名输入、密码输入、确定登录、取消登录封装成一个库,这个库含有一个函数Login,这个函数Login接收两个参数“用户名、密码”,对输入不同的用户名和密码可以进行不同的测试用例。

3、数据驱动思想

从数据文件读取输入数据,通过变量的参数化,将测试数据传入测试脚本,不同的数据文件对应不同的测试用例。
关键是其思想能够好的应用到你的框架中。就是变量不变,数据驱动结果,不同的数据导致了不同的结果的产生。而对于数据的导入,可以通过很多方式,例如:EXCLE表、XML(用在WEB中)、数据库(DB)、CSV文件、TXT等都可以。

4、关键字思想

关键字驱动或者一个关键字,对对象的抓取,其测试对象就是一种面向对象的思想,例如:QTP、RFT中,对象可以为一个数据封装为一个关键字(即可以将gui元素封装成了一个个关键字),这样可以对其关键对象进行各种操作了,不同的对象可以驱动不同的测试流向与结果。

关键字驱动测试是数据驱动测试的一种改进类型,它将测试逻辑按照关键字进行分解,形成数据文件,关键字对应封装的业务逻辑。 关键字主要包括:被操作对象(Item)、操作(Operation)和值(value),依据不同对象还有其它对应参数。关键字驱动的主要思想是:脚本与数据分离、界面元素名与测试内部对象名分离、测试描述与具体实现细节分离。可根据界面的变化更新对应的关键字对象,而不用重新录制脚本。

三、自动化框架设计原则

关键字驱动的自动化测试框架是对数据驱动的逻辑扩展,用关键字的形式将测试逻辑封装在数据文件中,测试工具只要能够解释这些关键字即可对其应用自动化,它的核心思想可以概括为三个分离。

  • 界面元素名与测试内部对象名的分离 

在被测应用程序和录制生成的测试脚本之间增加一个抽象层,它可以将界面上的所有元素映射成相对应的一个逻辑对象,测试针对这些逻辑对象进行,界面元素的改变只会影响映射表,而不会影响测试。

  • 测试描述与具体实现细节的分离

测试描述只说明软件测试要做什么以及期待什么样的结果,而不管怎样执行测试或怎样证实结果。这样做是因为测试的实现细节通常与特定的平台以及特定的测试执行工具有着密切的联系。这种分离使得测试描述对于应用实现细节是不敏感的,而且有利于测试在工具和平台间的移植。

  • 脚本与数据的分离 

最后,可以把测试执行过程中所需的测试数据从脚本中提取出来,在运行时测试脚本再从数据存放处读取预先定制好的数据,这样脚本和数据可以独立维护。

四、Robot Framework+Selenium2框架 

Robot Framework 的架构是一个通用的验收测试和验收测试驱动开发的自动化测试框架(ATDD)。它具有易于使用的表格来组织测试过程和测试数据。

Selenium2 是用于测试 Web 应用程序用户界面 (UI) 的常用框架。它是一款用于运行端到端功能测试的工具。拥有简洁的API,WebDriver和WebElement对象,更好的抽象。且支持多中操作系统,多语言,多浏览器。

Robot Framework+Selenium2:基于Selenium2提供的测试库,通过Robot Framework以关键字编写、组织测试用例,执行并收集分析结果,形成一套web应用自动化测试的解决方案(即以关键字驱动的自动化测试框架)。

环境安装

  • python
  • wxpython
  • Robot Framework
  • RIDE
  • Selenium2Library

(为了python良好的兼容性、以及robot framework扩展库的更好支持,推荐使用ubuntu系统)

使用RIDE编写第一个测试用例

1、新建测试项目、测试套件,并引入所用到的库

2、查询提供的关键字及使用方法

3、根据库提供的关键字编写测试用例

4、测试结果查看

 

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的软件测试八股文,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

相关文章:

  • 什么是IPv6
  • 解决pycharm中matplotlab画图不能显示中文的错误
  • SpirngBoot核心思想之一IOC
  • Mac通过ssh连接工具远程登录服务器( Royal TSX安装及使用)
  • 深度学习:(七)梯度下降法在神经网络中的应用
  • 基于微信小程序的旧衣回收系统
  • Vue.js组件开发
  • 如何将精益思维应用于智能音箱的产品设计?
  • 如何在算家云搭建MVSEP-MDX23(音频分离)
  • 【C++】set详解
  • 如何选择合适的跨境网络专线?
  • #git 问题failed to resolve head as a valid ref
  • RabbitMQ 实验入门
  • 【Ubuntu】DNS设置不生效/重启被重置
  • TypeSctipt学习第二篇
  • @angular/forms 源码解析之双向绑定
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • HTML中设置input等文本框为不可操作
  • Java 多线程编程之:notify 和 wait 用法
  • MobX
  • Terraform入门 - 1. 安装Terraform
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 警报:线上事故之CountDownLatch的威力
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  •  一套莫尔斯电报听写、翻译系统
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #NOIP 2014# day.1 T2 联合权值
  • (10)ATF MMU转换表
  • (13)DroneCAN 适配器节点(一)
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (第61天)多租户架构(CDB/PDB)
  • (二)c52学习之旅-简单了解单片机
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)hibernate配置管理
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (七)Java对象在Hibernate持久化层的状态
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (四)汇编语言——简单程序
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)Oracle存储过程编写经验和优化措施
  • (转载)从 Java 代码到 Java 堆
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .net反编译的九款神器
  • .net连接MySQL的方法
  • .NET企业级应用架构设计系列之应用服务器
  • .net网站发布-允许更新此预编译站点
  • @EnableAsync和@Async开始异步任务支持
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法