zoukankan      html  css  js  c++  java
  • 15 | 过不了的坎:聊聊GUI自动化过程中的测试数据

    从测试数据的角度再来谈谈 GUI 自动化测试。

    GUI 测试中两种常见的数据类型

    第一大类是,测试输入数据,也就是 GUI 测试过程中,通过界面输入的数据。比如“用户登录”测试中输入的用户名和密码就就属于这一类数据;再比如,数据驱动测试中的测试数据,也是指这一类。

    第二大类是,为了完成 GUI 测试而需要准备的测试数据。比如,“用户登录”测试中,我们需要事先准备好用户账户,以便进行用户的登录测试。今天我分享的测试数据创建的方法,也都是围着这一部分的数据展开的。

    创建数据的方法

    从创建的技术手段上来讲,创建测试数据的方法主要分为三种:

    • API 调用;

    • 数据库操作;

    • 综合运用 API 调用和数据库操作。

    从创建的时机来讲,创建测试数据的方法主要分为两种:

    • 测试用例执行过程中,实时创建测试数据,我们通常称这种方式为 On-the-fly。

    • 测试用例执行前,事先创建好“开箱即用”的测试数据,我们通常称这种方式为 Out-of-box。

    基于 API 调用创建测试数据

    API 通常都有安全相关的 token 机制来保护,所以实际项目中,通常会把对这些 API 的调用以代码的形式封装为测试数据工具(Test Data Utility)。

    这种方式最大的好处就是,测试数据的准确性直接由产品 API 保证,缺点是并不是所有的测试数据都有相关的 API 来支持。

    基于数据库操作创建测试数据

    实际项目中,并不是所有的数据都可以通过 API 的方式实现创建和修改,很多数据的创建和修改直接在产品代码内完成,而且并没有对外暴露供测试使用的接口。

    我们可以把创建和修改数据的相关 SQL 语句封装成测试数据工具,以方便测试用例的使用。

    但不可避免地会遇到如何才能找到正确的 SQL 语句来创建和修改数据的问题。

    提供两个思路来帮你解决这个问题:
    手工方式。查阅设计文档和产品代码,找到相关的 SQL 语句集合。或者,直接找开发人员索要相关的 SQL 语句集合。

    自动方式。在测试环境中,先在只有一个活跃用户的情况下,通过 GUI 界面操作完成数据的创建、修改,然后利用数据库监控工具获取这段时间内所有的业务表修改记录,以此为依据开发 SQL 语句集。

    注意的是,这两种思路的前提都是,假定产品功能正确,否则就会出现“一错到底”的尴尬局面。

    基于数据库操作创建测试数据的最大好处是,可以创建和修改 API 不支持的测试数据,并且由于是直接数据库操作,执行效率会远远高于 API 调用方法。

    缺点是数据库表操作的任何变更,都必须同步更新测试数据工具中的 SQL 语句。

    综合运用 API 调用和数据库操作创建测试数据

    具体来讲,当你要创建一种特定的测试数据时,你发现没有直接 API 支持,但是可以通过 API 先创建一个基本的数据,然后再通过修改数据库的方式来更新这个数据,以此来达到创建特定测试数据的要求。

    实时创建数据:On-the-fly

    GUI 测试脚本中,在开始执行界面操作前,我们往往会通过调用测试数据工具实时创建测试数据,也就是 On-the-fly 方式。

    实时创建数据存在三个问题:

    • 在用例执行过程中实时创建数据,导致测试的执行时间比较长。

    • 业务数据的连带关系,导致测试数据的创建效率非常低。

    • 实时创建测试数据的方式对测试环境的依赖性很强。

    事先创建测试数据:Out-of-box

    Out-of-box 的含义是开箱即用,也就是说,已经在被测系统中预先创建好了充足的、典型的测试数据。这些数据通常是在搭建测试环境时通过数据库脚本“预埋”在系统中的,后续的测试用例可以直接使用。

    事先创建测试数据存在的三个问题:

    • 测试用例中需要硬编码(hardcode)测试数据,额外引入了测试数据和用例之间的依赖。

    • 只能被一次性使用的测试数据不适合 Out-of-box 的方式。

    • 预埋”的测试数据的可靠性远不如实时创建的数据。

    应该选择什么时机创建测试数据

    对于相对稳定、很少有修改的数据,建议采用 Out-of-box 的方式,比如商品类目、厂商品牌、部分标准的卖家和买家账号等。

    对于一次性使用、经常需要修改、状态经常变化的数据,建议使用 On-the-fly 的方式。

    用 On-the-fly 方式创建测试数据时,上游数据的创建可以采用 Out-of-box 方式,以提高测试数据创建的效率。以订单数据为例,订单的创建可以采用 On-the-fly 方式,而与订单相关联的卖家、买家和商品信息可以使用 Out-of-box 方式创建。

    总结

    在实际项目中,对于创建数据的技术手段而言,最佳的选择是利用 API 来创建数据,只有当 API 不能满足数据创建的需求时,才会使用数据库操作的手段。实际上,往往很多测试数据的创建是基于 API 和数据库操作两者的结合来完成,即先通过 API 创建基本的数据,然后调用数据库操作来修改数据,以达到对测试数据的特定要求。

    而对于创建数据的时机,在实际项目中,往往是 On-the-fly 和 Out-of-box 结合在一起使用。对于相对稳定的测试数据,比如商品类型、图书类型等,往往采用 Out-of-box 的方式以提高效率;而对于那些只能一次性使用的测试数据,比如商品、订单、优惠券等,往往采用 On-the-fly 的方式以保证不存在脏数据问题。


    来源于:极客时间 茹炳晟 软件测试52讲

  • 相关阅读:
    [原]获取openstack-pike安装包
    [原]Failed connect to mirrors.cloud.aliyuncs.com:80; Connection refused
    [原]shell批量文件增删改前后缀
    [原]CentOS 7 chrony 笔记
    [原]Docker-issue(2) http: server gave HTTP response to HTTPS client
    [原]Docker-issue(1) image name 显示为 <none>
    [原]Django(1)----Django-setting中的STATIC_URL 和STATIC_ROOT 和STATICFILES_DIRS 的区别
    [原]Django-issue(1)---postgresql数据库连接密码错误
    [转]50个极好的bootstrap 后台框架主题下载
    [原]eclipse + pydev :Error in sitecustomize; set PYTHONVERBOSE for tracaeback: KeyError: 'sitecustomize'
  • 原文地址:https://www.cnblogs.com/Uni-Hoang/p/13275489.html
Copyright © 2011-2022 走看看