zoukankan      html  css  js  c++  java
  • 自动化测试框架知多少:概述、构成及常用框架类型

    自动化测试框架的引入

    我认为,测试框架好比工具箱,其作用是可以便捷、高效地完成测试工作。而测试框架的引入,往往不是一蹴而就的,好的测试框架都是在实践中逐渐演化而来的。

    那么,测试框架有哪些构成呢?下面我来为你一一讲解。
    自动化测试框架的构成

    一个成熟的测试框架主要由 4 部分组成:基础模块、管理模块、运行模块和统计模块,接下来我将逐一讲解。
    1. 基础模块

    如果把自动化测试框架比作一辆汽车,那么自动化测试基础模块就是那四只轮胎,没有它们,这辆汽车寸步难行,它们一般包括如下部分。

        底层核心驱动库: 一般指用于操作被测试应用程序的第三方库,例如在 Web 端的 Selenium/WebDriver。

        可重用的组件: 一般用来降低开发成本,常见的有时间处理模块、登录模块等。

        对象库: 存储被测试对象的仓库。在实际应用中,常常将页面进行分组,把一个页面上的所有对象放到一个类里,也就是 Page Object 模式。

        配置文件: 包括测试环境的配置和应用程序的配置。测试环境配置,指的是一个功能从开发代码完成到上线,往往要经过几个测试环境的测试,测试环境的配置能够减少环境切换成本;应用程序配置,主要包括被测试程序的一些配置,利用配置文件,可以做到在不更改代码的情况下覆盖相同程序的不同程序配置。

    2. 管理模块

    自动化测试管理模块就好比汽车的内饰和外观,它对测试框架的使用操作体验有着直接影响,一般可分为测试数据管理和测试文件管理两部分。

        测试数据管理

    测试数据存放的文件是否跟测试用例强绑定,以及测试数据是否容易替换、是否和测试框架耦合等,这些都决定着测试框架的“内饰”好坏。

    测试数据,一般指测试用例用到的各种测试数据,它们是为了验证业务正确性而构造的,每一条测试用例一般对应着一组或多组测试数据,测试数据创建一般分为实时创建和事先创建。

    实时创建, 是在测试代码运行时才生成的测试数据。其好处有:测试数据是和测试代码耦合的,测试人员不需要关心其创建过程和业务调用链,通常用在测试的公用功能上。例如,给用户绑定银行卡以方便后续支付等。而坏处则是如果调用链太长,耗时会比较久。

    事先创建, 是指测试代码运行前就准备好数据文件。其好处是数据拿来即用,几乎不耗费时间,由于没有业务调用,所以这在一定程度上减少了调用失败的风险;坏处则是数据文件本身需要维护,以保持可用性和正确性。

    测试数据在测试中非常重要,它关系到你的测试是否有效,测试框架要做到对测试数据有效管理。

        测试文件管理

    测试文件管理就好比汽车的颜色和外观,决定着第一印象,所以测试框架的文件结构应该清晰有序、一目了然。

    比如,一个测试用例应该对应建立三个文件,分别是:Page 类文件(xxxPage,根据 PO 模型)、测试类文件(testxxxPage)和对象库文件(xxxPageYml)。

    这三个文件共同描述了一个完整的测试用例,当你看到一个 Page 类时,就应该做到它还有一个对应的测试类。

    测试文件的结构清晰有助于他人理解测试框架的设计思想,更有利于测试框架的维护和推广。
    3. 运行模块

    自动化测试运行模块是测试框架的发动机,它主要用于测试用例的组织和运行,一般包括如下部分。

        测试用例调度,驱动机制。 测试框架应能按需组织,调度测试用例生成、执行。举例来说,测试框架可以在运行时根据使用者给定的 Tag 动态挑选要运行的测试用例,并把它们调度执行(可以顺序执行,也可以并发执行,还可以远程执行)。

        错误恢复机制。 由于测试环境、测试程序、测试代码存在各种不确定因素,测试框架应该具备一定的错误恢复机制。在测试用例执行中,引起错误的类型一般可分为代码/运行导致的错误和环境/依赖导致的错误,测试框架应该能够识别这两种错误并给予相应的处理。

        持续集成支持。 测试框架应该能够和 CI 系统低成本集成,包括通过用户输入参数指定运行环境、测试结束后自动生成测试报告等。

    4. 统计模块

    自动化测试统计模块,就相当于汽车的品质和口碑。好的统计模块,不仅能告诉你当前的测试有没有 Bug,还能分析软件质量随着时间的演变情况,这是测试框架的质量体现。

    自动化测试统计模块一般包括如下两部分:

        测试报告。 测试报告应该全面,包括测试用例条数统计、测试用例成功/失败百分比、测试用例总执行时间等总体信息。其中,对于单条测试用例,还应该包括测试用例 ID、测试用例运行结果、测试用例运行时间、测试用例所属模块、测试失败时刻系统截图、测试的日志等信息。

        日志模块。 测试框架应该包括完善的日志文件,方便出错时进行排查和定位。

    常用的测试框架类型

    测试框架有很多类型,比较常见的有以下四类。
    1. 模块化测试框架

    模块化测试框架是利用 OOP 思想和 PO 模式改造而来的框架。

    模块化测试框架把整个测试分为多个模块,模块化有以下几个特征:

        我们将一个业务或者一个页面成为一个 Page 对象;

        这个 Page 对象,我们以一个 Page 类来表示它;

        这个 Page 类里存放有所有这个 Page所属的页面对象、元素操作;

        页面对象和元素操作组成一个个的测试类方法,供测试用例层调用。

    简单来说,使用了 PO 模式的框架就可以叫作模块化测试框架。

        模块化测试框架的好处在于方便维护,你的测试用例可以由不同模块的不同对象组成;

        坏处在于你需要非常了解你的系统及这些模块是如何划分的,才能在测试脚本里自如地使用,否则你就会陷入重复定义模块对象的循环里。

    2. 数据驱动框架

    数据驱动框架主要解决了测试数据的问题。

    在测试中,我们常常需要为同一个测试逻辑,构造不同的测试数据以满足业务需求,这些测试数据可以保存在测试代码里,也可以保存在外部文件里(包括 Excel、File、DB)。

    数据驱动框架的精髓在于,输入 M 组数据,框架会自动构造出 M 个测试用例,并在测试结果中把每一个测试用例的运行结果独立展示出来。

    在 Python 架构里,最出名的数据驱动框架就是 DDT。


    3. 关键字驱动框架

    关键字驱动其实就是把一系列代码操作封装成一个关键字(这个关键字其实是函数名),在测试里,可以通过使用组合关键字的方式来生成测试用例,而不去关心这个关键字是如何运作的。

    关键字的一个典型应用是将登录操作封装为关键字 Login,之后在后续代码里,有关 Login的操作,就仅需调用这个关键字 Login,而不必又重新进行一次登录操作。

    关键字在领域里的最佳应用典范我认为是BDD(行为驱动开发),它甚至被当成一种独立的敏捷软件开发技术来使用。
    4. 混合模型

    需要注意的是,没有任何规定要求你的测试框架要属于以上某种类型,因为测试框架的存在不是为了分类型,而是为了更好地测试。

    所以在工作中,我们常常需要糅合不同框架模型,我们将这种模式的测试框架称为混合模型。混合模型可以包含模块化框架,也可以使用数据驱动,或者使用 BDD 模式。
    小结

    这一讲,我们讨论了自动化测试框架的一些基本概念和类型,就像大猩猩使用工具提升吃饭效率一样,测试框架的引入能大大提升测试效率;也讲解了自动化测试框架的基础组成部分,有助你在后续的框架设计中,更全面地评估你的测试框架水平;最后介绍了测试框架的类型,助于你辨别,融合不同的测试框架类型,设计出更合适的测试框架。




  • 相关阅读:
    LeetCode 1245. Tree Diameter
    LeetCode 1152. Analyze User Website Visit Pattern
    LeetCode 1223. Dice Roll Simulation
    LeetCode 912. Sort an Array
    LeetCode 993. Cousins in Binary Tree
    LeetCode 1047. Remove All Adjacent Duplicates In String
    LeetCode 390. Elimination Game
    LeetCode 1209. Remove All Adjacent Duplicates in String II
    LeetCode 797. All Paths From Source to Target
    LeetCode 1029. Two City Scheduling
  • 原文地址:https://www.cnblogs.com/qiaoli0726/p/14174221.html
Copyright © 2011-2022 走看看