自动化测试模型概述

1. 概念

自动化测试模型可以看作自动化测试框架与工具设计的思想。自动化测试不仅仅是单纯写脚本运行就可以了,还需要考虑到如何使脚本运行效率提高,代码复用、参数化等问题。自动化测试模型分为四大类:线性模型,模块化驱动测试,数据驱动,关键词驱动

2. 线性模型

线性脚本中每个脚本都相互独立,且不会产生其他依赖与调用,其实就是简单模拟用户模拟操作流程的脚本。

例如,将一个登录网页和退出的过程,用python+selenium,顺序写成脚本,就是一个线性模型。

再例如,录制/回放测试框架。它采用的原理是通过录制应用程序产生的线性脚本进 行回放从而到达自动化测试的目的。

线性模型的优点是简单,通过录制或按照顺序编写即可得到所需脚本。但同时也有很大的缺点,它不具有逻辑判断的能力,可维护性差,效率低下。

3. 模块化驱动测试

线性模块虽然每个用例都可以拿出来独立运行,但是用例之间重复代码很多,开发、维护成本高。其实把重复的操作代码封装为独立的公共模块,当用例执行时需要用到这部分,直接调用即可,这就是模块驱动的方式。比如登录系统、退出登录、截图函数等等。

4. 数据驱动

数据驱动简介

模块驱动的模型虽然解决了脚本复用的问题,但是需要测试不同数据的用例时,模块驱动的方式就不很合适了。数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。简单来说,就是参数化的应用。数据量小的测试用例可以使用代码的参数化来实现数据驱动,数据量大的情况下建议大家使用一种结构化的文件(例如yaml,json等)来对数据进行存储,然后在测试用例中读取这些数据。加载数据的方式可以是列表、字典或是外部文件(txt,csv,xml,excel),目的就是实现数据和脚本的分离。
该种框架的原理是采用了数据驱动脚本进行测试,数据驱动脚本是将数据输入存储在独立的数据文件中,脚本只存放控制信息,测试时输入直接从文件中读取,这样同一脚本可以运行于不同的测试用例中,实现了脚本与数据的分离。
其优点是可以快速增加相似测试,测试者增加新的测试不必掌握测试工具语言,对侧后的类似测试无额外维护开销;缺点是初始建立测试脚本的开销较大,进行数据扩展的脚本需要针对相同的测试内容并具有相同的测试逻辑。

数据驱动应用场景

App、Web、接口自动化测试
测试步骤的数据驱动
测试数据的数据驱动
配置的数据驱动

配置驱动实例

代码如下:

import pytest
import yaml

class TestDemo:
    @pytest.mark.parametrize("env", yaml.safe_load(open("./env.yaml")))
    def test_demo(self, env):
        if "test" in env:
            print("这是测试环境")
            """
            由于parametrize 要求传入的参数为list 或 tuple,
            但是我们传入的为字典,所以打印结果为 “test”,所以应修改yaml文件为list
            """
            print(env) 
            print(f"测试环境的ip为{env['test']}") # 修改env.yaml文件后结果为127.0.0.1

        elif "dev" in env:
            print("这是开发环境")

如果env.yaml 内容如下,则 print(env) 的结果为 ‘test’ ,因为 parametrize 装饰器要求传入的参数为list 或 tuple,但是我们传入的为字典,所以打印结果为 “test”,所以应修改yaml文件为lis

test: 127.0.0.1

运行结果

collecting ... collected 1 item

test_demo.py::TestDemo::test_demo[test] PASSED                           [100%]这是测试环境
test


============================== 1 passed in 0.06s ==============================

Process finished with exit code 0

修改 env.yaml 文件如下后

-
  test: 127.0.0.1

运行结果

collecting ... collected 1 item

test_demo.py::TestDemo::test_demo[env0] 

============================== 1 passed in 0.06s ==============================

Process finished with exit code 0
PASSED                           [100%]这是测试环境
{'test': '127.0.0.1'}

4. 关键字驱动

关键字驱动(表驱动)是对数据驱动的逻辑扩展,它的核心思想可以概括为三个分离,其核心思想就是对象、操作、值概念的诠释。

1)界面元素名与测试内部对象名的分离 在被测应用车需和录制生成的测试脚本之间增加一个抽象层,它可以将界面上的所有元素映射成相对应的一个逻辑对象,测试针对这些逻辑对象进行,界面元素的改变置灰影响映射表,而不会影响测试。

2)测试描述与具体实现细节的分离 把测试描述和测试的具体实现分离开来。测试描述值说明测试要做什么以及期待什么样的结果,而不管怎样执行测试或怎样证实结果。这样做是因为测试的细节通常与特定的平台以及特定的测试执行工具有着密切的连写。这用分离是的测试描述对于应用实现细节是不敏感的,而且有利于测试在工具和平台间的移动。
3)脚本与数据的分离 最后,可以把测试执行过程中所需的测试数据从脚本中提取出来,在运行时测试脚本再从数据存放处读取预先定制好的数据,这样脚本和数据可以独立维护。

以上这三个分离各司其职、互相独立,最大程度地减少相互之间的影响。从关键字驱动的思想可以看出,该种测试框架不仅实现了将数据和脚本相分离,而且实现了测试逻辑和数据的分离,大大提高了脚本的复用性和维护性,从而更大限度地实现了测试工具的自动化。

5. 关键字驱动和数据驱动的区别

数据驱动是从数据文件(excel,csv,yaml,数据库)读取输入,输出的数据,然后通过变量传入自动化测试用例中,在整个过程中,数据的读取,测试状态,测试信息全部在测试用例里面,测试数据都是数据文件中,通过修改数据达到驱动自动化用例执行的方式叫做数据驱动。

关键字驱动时从面向对象的思维出发,同样的业务逻辑会封装成一个函数,这个函数的名字就叫关键字,不同的关键字实现不同的业务逻辑,当所有的业务逻辑都可以通过调用关键字来实现的时候,就是关键字驱动框架。

一般情况下企业里面都是数据驱动和关键字驱动一起使用。

原文链接
原文链接2

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值