全程软件测试(九):自动化测试框架的构成与分类《全程软件测试》读书笔记

发布于 2021-05-09 23:21 ,所属分类:软件测试工程师学习资料

点击上方蓝字我们

前言

前几章中我们整理了测试的全流程,这节开始,我们从基础的手工测试进阶到自动化测试、敏捷测试和测试驱动开发等模式,了解软件测试在技术模式上的不断变化。


自动化测试(TA)框架的构成

在第一节介绍测试环境时,我们已经集成了CI环境。


CI环境中包含代码管理工具、CI调度工具和配置管理工具等,可以进行持续构建。它能适应不同项目的需求,同时构建多个不同版本,并通过虚拟技术降低建设和维护成本。CI环境是支持整个研发与交付的环境。


可以看到,测试环境是CI环境的关键组成部分。


测试环境不仅要支持CI环境,还要支持测试开发、测试资源管理等大规模的测试活动,以及性能测试、安全性测试、易用性测试等多种测试类型。若想搭建自动化测试平台,就需要以自动化测试(TA)框架作为基础,与CI环境、配置管理系统、缺陷管理系统等集成起来,持续构建后直接触发自动化测试,做到CI与持续测试无缝集成。






在上图的结构中:


  • Harness/IDETA框架的核心,相当于“夹具”,框架中的其他组成部分都能作为插件与之集成,且承担脚本的创建、编辑、调试和管理等。

  • TA脚本的管理包括公共脚本库、项目归类的脚本库,可与github这样的代码管理工具集成。

  • 测试资源管理增加、删除和配置相应的测试设备(软硬件资源),并根据它们的使用状态来分配测试资源。

  • 测试数据管理测试数据的自动生成、存储、备份和恢复等。

  • 开放的接口(API)提供给其他持续集成环境、开发环境或其他测试环境的集成接口。

  • 代理负责Harness与工具的通信,控制测试工具的运行。

  • 任务安排安排和提交定时任务、时间触发任务等,以便实现无人值守的自动化测试执行。

  • 数据统计分析针对测试结果(含测试工具运行产生的日志),生成可读性良好的测试报告。


自动化测试框架集成了测试脚本开发环境、测试执行引擎、测试资源管理、测试报告生产器、函数库、测试数据源和其他可复用的模块,还能灵活集成单元测试、系统功能测试和性能测试等测试工具。这些测试工具发现的缺陷能自动记录到缺陷库中,形成一个良好的开发和测试整合的环境。


我们也可以把一个基础的自动化测试框架理解为一个简单的操作系统,它定义了几层架构,定义了各层互相通信的方式。通过这个架构我们才能在上面进行拓展我们的测试对象(核心体)、测试库(链接库)、测试用例集(各个windows进程)、测试用例(线程),而它们之间通过参数的传递进行通信(即相当于系统中的消息传递)。


TA框架的分类

自动化测试框架最终的目的无非是将不同层次的对象和逻辑进行抽象和分离封装,从而使得被测试程序的变更所导致的测试脚本框架的变更维护工作量减少到最少。


根据分离封装对象的不同,可以将自动化测试框架分为5种不同的类型。


1
测试脚本模块化框架


测试脚本模块化框架将被测应用程序划分为单独的模块、单元或部分,每个模块都会为它们创建独立的测试脚本。通过组合每个模块及其测试脚本,可以构建出代表各种测试案例的更大的测试。应用程序更改将只影响与它们相关联的测试脚本所涉及的模块,而不影响其他部分。模块化测试脚本框架使用封装的原理提高了自动测试组合的可维护性和可升级性。


高度的模块化,使得维护更加容易且具有成本效益。创建测试用例所需的精力很少,因为可以重复使用不同模块的测试脚本。但如果没有语言开发基础,建立框架可能会很困难,同时由于将数据硬编码到测试脚本中,因此无法重复使用数据集。


2
测试库结构框架


库结构框架建立在模块化框架的基础上,有同样的优势,它不仅可以将被测应用程序划分为测试脚本,还可以将测试脚本中的相似任务划分为通用功能,创建功能库文件。该库构成了自动化测试的常用功能,可以在需要时由测试用例脚本调用。


高度的模块化使得测试维护简单且预算友好。它的公共函数库可以被几个测试脚本使用,具有高度的可重用性。但是框架中引入的库使框架更加复杂了,测试数据也被硬编码到测试脚本中,因此数据中的更改必须适用于测试脚本,测试脚本的开发也需要更多的时间和技术。


3
关键字驱动测试框架


关键字驱动也叫表格驱动测试,它的基本工作是将测试用例分成四个不同的部分:测试步骤、测试步骤中的对象、测试对象执行的动作和测试对象需要的数据。这四个部分都可以使用Excel表格进行维护。


关键字驱动的思想就是把编码从测试用例和测试步骤中分离出来,这样对于不会编码的人员更容易理解自动化,从而让手工测试人员也可以编写自动脚本,但这并不意味这不需要自动化测试人员。对于自动化框架的构建,自动化代码的更新,结构调整等都需要一个技术性的人员。


关键字驱动测试看上去非常像手工测试。这种框架只要求非常少的代码就可以生成许多的测试用例,用数据表生成不同的测试用例却可以重用相同的代码。


4
数据驱动测试框架


数据驱动指的是从数据文件中读取输入数据并将数据以参数的形式输入脚本测试,不同的测试用例使用不同类型的数据文件。具体来说,测试脚本是固定的,而测试数据可以从外部的数据文件,以Excel、CSV、SQL等形式作为参数传入测试脚本。这样,我们只需要维护一份脚本和一份数据文件即可。


实行数据驱动测试的步骤如下:

(1)编写测试脚本,脚本需要支持程序对象、文件或者数据库读入测试数据。

(2)将测试脚本使用的测试数据存储进程序对象、文件或者数据库等外部介质。

(3)运行脚本,循环调用存储在外部介质的测试数据

(4)验证所有的测试结果是否符合期望的结果。


在数据驱动框架中,测试数据和测试脚本是分离的。在许多测试场景中,需要使用不同的测试数据多次测试同一功能或特性。如果测试数据是硬编码进测试脚本的,那么每更换一次测试数据都需要修改测试脚本。这是很大的工作量。此时,可以使用数据驱动框架。数据驱动测试极大地提高了脚本的利用率和可维护性,但是对于界面变化较大的情景不适合数据驱动测试。


5
混合测试自动化框架


最普遍的是上面四种方法混合搭建的框架。







除了上面的分类角度,我们也可以根据脚本的语言或描述方式将自动化测试框架进行分类。


1
函数型自动化测试框架


属于轻量型的测试框架。它只是通过函数的方式来定义和调用测试用例,借助IDE平台管理测试用例集,从而快速的实现自动化测试,比如xUnit等。


2 单领域语言型


通过自然语言或者关键字形式的领域特定语言(DSL)描述测试用例,形成更清晰、更易理解的自动化脚本,如RSpec、Jasmine、Mocha等。


3 多领域语言型


通过多句或者多个关键字的领域语言来描述一个特定的场景,使得测试用例更容易阅读和理解,并且容易形成一套活文档系统,如Cucumber、JBehave、SpecFlow、Robot Framework等。


4 富文档型


通过富文档的方式来描述负责的软件测试场景,甚至可以增加业务流程图或者系统用户界面等,如Concordion、Fitnesse、Guage等。


如果只快速实现自动化测试,可以选择函数型自动化测试框架;如果为了解决知识传递问题,让测试用例更可读和易懂,可以选择单领域语言型;如果为了进一步解决和非技术人员协作开发的问题,使测试脚本更具可读性和可维护性,拥有一套活文档,可以选择多领域语言型自动化测试框架或富文档型。


有的框架只支持自己特定的脚本,有的框架可以支持流行的编程语言,如Robot Framework、Selenium、Appium等。我们选择框架时,应该优先选择后者。


以上就是自动化测试框架的两种分类。下一节,我们接着与大家讨论几种常用的自动化测试框架。







本章回顾


  • 自动化测试框架(TA)的构成


  • 根据分离封装对象分类:测试脚本模块化框架,测试库结构框架,关键字驱动框架和数据驱动测试框架


  • 根据脚本的语言或描述方式分类:函数型自动化测试框架,单领域语言型框架,多领域语言型框架和富文档型框架


参考资料:

[1] 朱少民,2020-04,全程软件测试:第三版,人民邮电出版社
[2] 佚名,2020-10,什么是测试自动化框架?,CSDN
[3] 王党军,2017-03,谈自动化测试框架思想与构建,博客园
[4] 程序员一凡 ,2020-09,几种典型的软件自动化测试框架,CSDN
[5] Roger_ge(csdnblog),2010-09,评四种常用的自动化测试框架,CSDN
[6] 通往光的路,2018-05,自动化测试框架——数据驱动测试介绍,CSDN
[7] oO_Ray,2014-11,什么是关键字驱动框架(自动化测试),博客园,

原文:

http://www.toolsqa.com/selenium-webdriver/keyword-driven-framework/introduction/


END


相关资源