以下内容是在阅读茹炳晟老师的《软件测试52讲》之后结合自己工作中遇到的问题的一些思考。


前言

刚看了茹炳晟老师的《软件测试52讲》中的测试数据准备的部分。果然,测试数据的准备是连大佬也逃不开的难题。但是,大佬不愧是大佬,18年的大佬就已经在通过平台生成测试数据了,而22年的我还在0.0时代,手动创建测试数据…

这真是一个悲桑的故事…


一、如何准备测试数据?

1.通过手动创建测试数据

这个方法其实在老师的文章里没有提及,但这确确实实又是一种还有很多测试都在用的数据准备方法。我们现在用的也是这种方法,但是在两周一次迭代的情况下,我们已经很清醒的认识到手动创建测试数据的缺点:

  • 耗时长。手动创建测试数据是一个繁琐而漫长的过程,漫长的程度取决于测试的需求在哪一个环节的业务流。比如,我们现在一个需求是,客户下单后,系统会根据订单中参与的角色对其进行返佣。手动创建测试数据的话就需要走完整个下单、签单、生成返佣的流程,才能生成一条测试数据;
  • 效率低。手动创建测试数据,往往是走完了一个流程后才能生成一条可用的数据,如果需求或者测试点有重合的,那这条测试数据可以再重复利用,比如一条待创建订单的数据,我要验证下单时金额的计算,也要验证创建订单时状态的改变,那么数据就可以被重复利用。但更多的情况还是,每一个验证的点都至少需要一条测试数据(算上回归的话需要准备的数据更多);
  • 测试依赖度太高。如果创建测试数据要走的流程中,有因为bug或者其他原因阻塞的,就无能为力了;

2.通过GUI自动化生成测试数据

GUI自动化,比如:selenium,是通过程序控制鼠标和键盘进行输入,模拟手工测试的一种测试方法。
大概的思路就是:①定位元素;②创建一个动作;③将定位到的元素放在这个动作中;④执行动作;
这种方法的缺点:

  • 不稳定。由于元素定位的不稳定,可能有时候定位不到元素或者UI发生变化后,代码也要跟着变动。创建测试数据的成功率不高;
  • 不适合封装成测试数据工具。“由于测试数据的创建是通过 GUI 操作实现的,所以把这种数据创建方法封装成测试数据准备工具的过程,其实就是在开发 GUI 自动化测试用例。”
  • 测试依赖度太高。因为GUI也是在模拟手动操作,所以也与手动创建测试数据具有同样的问题;

3.通过接口创建测试数据

无论是手动创建测试数据还是GUI自动化创建测试数据,本质上都是在调用后端接口。比如我要创建一个订单,页面上需要先登录、加购、再创建订单,但实际就是前端调用创建订单的接口,传入用户cookie、商品id、商品数量等参数,后端接口再把这些数据存到各个表中。所以也可以直接通过调用接口创建测试数据,不过这个方法的前提是,对被测系统的业务流程、接口文档已经比较熟悉。

这种方法的优点:

  • 效率高。因为跳过了GUI,直接调用接口,因此执行起来的效率是比较高的;
  • 相对稳定。因为接口定义好后,一般不会轻易去做改变,即使其中的逻辑有变化,开发修改好后,接口也是照样不变的;
  • 更方便封装成函数;

这种方法也同样具有缺点:

  • 传参复杂。某些接口需要传的参数很多,参数数据准备起来也比较麻烦;
  • 接口调用顺序。一些业务流程上的测试数据,需要调用一系列接口才能创建,接口之间的数据流转,先调用哪个接口,后调用哪个接口也是一个问题;
  • 接口关联。调用多个接口后,接口之间有数据依赖的需要做关联,比如上一个接口的返回要作为下一个接口的入参;
  • 有些测试数据没有api支持,只能通过数据库的crud操作创建;
  • 无法高效率的完成海量数据的创建;

4.通过数据库创建测试数据

上面说到调用接口后,最终是把数据存到每张相关的表里,所以也可以直接在对应表中插入数据来创建。这种方法的前提条件是,对被测系统的表结构、每个业务对应的主表附表比较熟悉。

这种方法的优点:

  • 效率高。直接通过写sql语句在对应表中插入数据,并封装成函数。可以在短时间内生成大量数据。

这种方法的缺点:

  • 维护成本高。当sql语句发生变化时,需要维护和更新已经封装好的函数;
  • 容易出现数据不完整的情况。前端的一个操作往往需要在多张表中插入数据,在创建数据的时候可能会出现只在主表中插入数据,而附表数据遗漏的情况。

5.综合接口+数据库创建测试数据

这种方法是通过调用接口创建基本数据,再通过数据库修改数据以满足测试的前置条件。
比如,要测试一个商品在未配置的地区不可销售的场景。

  • 可以先调用创建商品的接口,创建一个基本的商品;
  • 再调用商品上架的接口,保证商品已上架;
  • 然后再通过数据库更新商品配置的地区;

总结

这篇文章主要是记录一下测试数据的五种准备方法,其中大多是借鉴茹炳晟老师的《软件测试52讲》
中的观点,少部分是结合自己工作中遇到的问题的一些思考。
主要是给以后的测试工作确定一个升级路线。
旨在学习,路漫漫其修远兮~

测试难题:测试数据准备之如何准备测试数据相关推荐

  1. 体质测试数据统计软件,[体质测试数据excel自动统计表]体质测试数据Excel自动统计模板的研制...

    <[体质测试数据excel自动统计表]体质测试数据Excel自动统计模板的研制>由会员分享,可在线阅读,更多相关<[体质测试数据excel自动统计表]体质测试数据Excel自动统计模 ...

  2. 你遇到过的测试难题(4)活动抽奖转盘九宫格抽奖测试用例测试点

    你遇到过的测试难题(4)关于抽奖活动概率测试 业务背景 测试计划 测试准备 测试关注点 测试总结 时间测试: 中奖记录: 中奖概率: 性能测试: 安全性测试: 时间场景: 动效场景: 概率场景: 抽奖 ...

  3. 显卡用电测试软件,全部显卡的耗电量的测试数据

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 7950 GT SLI______######¦)#######}' 49W-117W ! 7900 GX2 SLI_____############## ...

  4. 数据库 测试数据生成_我们的测试数据生成器如何使假数据看起来真实

    数据库 测试数据生成 by Tom Winter 汤姆·温特(Tom Winter) 我们的测试数据生成器如何使假数据看起来真实 (How our test data generator makes ...

  5. 手机断触怎么办_手机屏幕断触怎么办?弹片微针模组解决手机屏幕测试难题

    手机屏幕分为显示屏和触摸屏,显示屏有LCD和OLED两种材质,触摸屏分为电阻式触摸屏和电容式触摸屏,手机上大都应用的是电容式触摸屏.当手指触摸手机屏幕时会改变触摸屏触摸点处的电容大小,从而实现触摸位置 ...

  6. 测试人员,如何准备测试数据

    在日常的测试工作中,大家是否会遇到类似的问题呢? 1.比如页面数据不够,翻页功能无法测试 2.页面某些功能暂时没有找到满足要求的数据 3.做数据分析的时候,需要用到大量的数据,而现有环境中数据量满足不 ...

  7. 压力测试实战,压力测试步骤压力测试数据 (史上最全最详细教程)

    目录:导读 前言 一.为什么准备数据 二.测试数据分类 三.测试数据准备要求 四.测试数据准备思路 五.总结 前言 压力测试只有在服务器处于高压状态时,才能真正反映各种设置暴露出来的问题.现在很多压力 ...

  8. 测试数据管理:测试数据和设计方法是什么?如何管理

    测试数据设计与管理指南 在目前信息与技术革命性增长史上,测试者通常在软件测试生命周期中经历大量的测试数据消耗. 测试人员不仅收集/维护现有来源的数据,而且还生成大量测试数据,以确保其在实际使用中提供产 ...

  9. 格式化测试数据,组装用于插入表中的sql语句

    最近闲的蛋疼,每每在写测试例子的时候,万恶的测试数据需要手工书写insert语句的向表中插入,很费事,于是就像写个脚本来实现自动生成插入语句 测试数据: 100 北京 20120203123 100 ...

最新文章

  1. 【错误记录】PyCharm 中从 GitHub 中 Clone 代码到本地报错 ( OpenSSL SSL_read: Connection was reset, errno 10054 )
  2. Cisco DHCP and NAT config
  3. js下的keyCode.
  4. HDU 2042:不容易系列之二
  5. 翁恺老师C语言学习笔记(十)指针_运算符取得变量的地址
  6. java list数据的更新_新增页面提交数据 list页面没有更新数据
  7. c编程连接mysql
  8. 单片机CC2530学习笔记
  9. 单片机外文参考文献期刊_单片机_英文参考文献..doc
  10. 学习笔记29--Apollo车辆要求及Apollo支持的传感器
  11. 要用计算机处理频谱,妙用Adobe Audition 系列教程(二):频谱分析仪 | 小众声学...
  12. Flask-Websocket
  13. 2022 年最有前景的 5 个 Web IDE
  14. 计算机视觉关于进化计算表达方式0.0.6
  15. c语言中除法除以1000与1e3,北京航空航天大学C语言b第二讲(第三、四章)数据类型、运算符与表达式和最简单的C程序设计.ppt...
  16. 液压缸移动负载分析(液压系统基础)
  17. rss和css,RSS 简介
  18. NoesisGUI入门及初步使用感想
  19. openpbs环境下GPU版NAMD的作业提交问题
  20. MongoDB与MySQL的插入、查询性能测试

热门文章

  1. 第十一章 曲线积分与曲面积分
  2. 【AD21】keepout层和机械1层怎么相互转换
  3. Cris 的 Scala 笔记(三):变量
  4. oracle 分组 排名,Oracle数据库之分组查询及排序
  5. MATLAB编程实现哈夫曼编码
  6. 安卓BLE蓝牙开发总结(一):BLE蓝牙的打开与搜索
  7. nfs服务器随机读写性能,linux nfs 读写性能
  8. python读取.csv 大文件的解决办法(iterator=true)
  9. vue 存取、设置、清除cookie
  10. 关于添加android:name=android.permission.INSTALL_PACKAGES报错的解决方法