你如何准备测试数据?

news2024/12/23 8:46:07

目录

前言:

一、基于 GUI 操作生成

二、调用 API 生成

三、通过数据库操作生成

四、综合运用 API 和数据库的方式生成


前言:

在进行自动化测试时,准备好合适的测试数据是十分重要的。

准备测试数据是我们测试过程中非常重要的一环,不管你是哪种类型的测试,都避不开。

通常,我们有 4 种方法。

一、基于 GUI 操作生成

GUI 就是图形用户界面。基于 GUI 操作生成测试数据,是最原始的创建测试数据的方法。

比如,想要测试用户登录功能,那么首先就要准备一个已经注册的用户。那么就可以直接通过 GUI 界面来注册一个新用户,然后用这个新用户完成用户登录功能的测试。

优点

  • 简单直接。
  • 所建数据完全来自真实业务流程,最大限度保证数据准确性。

缺点

  • 创建效率低:每次执行 GUI 业务操作都只能创建一条数据,而执行过程费时。
  • 不适合封装复用:如果想封装GUI的创建数据操作进行复用,就相当于在开发 GUI 自动化测试用例了。无论是从开发工作量,还是从执行效率来讲,这都不是一个好的选择。
  • 引入不必要依赖:比如,你的被测对象是用户登录功能,但是通过 GUI 页面操作准备这个已经注册的用户,就首先要保证用户注册功能没有问题,而这显然是不合理的。

通常来看,这种方法只用在手工测试环节。在 GUI 自动化里实现代价太大,还不够稳定。

但是,这种方式的必要性还是存在的。它可以帮助我们找到在创建数据的过程中,后端调用了哪些 API,为后续的 API 相关的工作打下基础。

二、调用 API 生成

通过 API 调用生成测试数据,是目前主流的测试数据生成方法了。

其实在我们用 GUI 操作生成数据时,背后就是各种 API 在工作,所以我们绕开繁重的 GUI 直接操作 API 岂不美哉?

而且,直接调用 API 也更容易封装成测试数据准备函数,方便复用。

获取 API

要调用 API 之前,得先知道有哪些 API:

  • 直接询问开发人员,最直接。
  • 如果你有一定的代码基础,可以直接阅读源代码,这个方法也可以作为直接询问方法的补充。
  • GUI 操作一遍,同时观察 API 调用日志(比如,F12、日志系统)。

优点

  • 可以保证创建的测试数据的准确性,因为本质与 GUI 背后调用 API 一样。
  • 测试数据准备的执行效率更高,因为绕开了 GUI 操作。
  • 封装成测试数据函数更方便,因为这个调用过程的代码逻辑非常清晰。
  • 测试数据的创建可以完全依赖于 API 调用,就算后续逻辑有变更,你调用 API 得到的就是变更处理后的数据。

缺点

  • 并不是所有的测试数据创建都有对应的 API 支持。
  • 有时需要多个 API 顺序调用,增加了测试数据准备函数的复杂性。
  • 虽然 API 创建效率比起 GUI 已经大幅提示,但是对于需要批量创建海量数据的场景,还是会力不从心。

因此,我们还需要通过数据库的 CRUD 操作生成测试数据。

三、通过数据库操作生成

通过数据库操作生成测试数据,也是目前主流的测试数据生成方法,弥补了上述 API 方式的一些不足。

通常我们会:

  • 直接通过数据库连接工具,直接向表里添加数据,比如Navicat。
  • 编写 sql 执行。
  • 把 sql 编写到函数里,方便调用。

获取 相关业务表

要操作数据表,还是得先知道,要操作哪些表:

  • 直接向开发人员索要使用到的 SQL 语句。
  • 直接阅读产品源代码,从里面自取。
  • 同样可以借助系统日志,里面通常会记录一些sql的执行记录。

优点

  • 生成效率非常高。
  • 适合大批量数据创建场景,比如需要百万级的测试数据。

缺点

  • 很多时候,一个前端操作引发的数据创建,往往会修改很多张表,因此封装的数据准备函数的维护成本要高得多。
  • 容易出现数据不完整的情况,当对于表的操作理解不全,就可能出现漏插入表数据的情况。
  • 当业务逻辑发生变化时,即 SQL 语句有变化时,需要维护和更新已经封装的数据准备函数。

现在看起来,没有一个是十全十美的方法

四、综合运用 API 和数据库的方式生成

的确,到现在没有一个是完美的方法,但是我们可以组合起来使用啊。

最典型的应用场景是,先通过 API 调用生成基础的测试数据,然后使用数据库的 CRUD 操作生成符合特殊测试需求的数据。

比如,我要创建一个用户,这个用户得有一个国籍属性。但是,创建用户的 API 生成的用户数据,是不带有国籍的。那我就先用 API 创建数据,然后去数据库修改这个数据,增加国籍这个字段的值就好了。

随着现在系统服务引入的其他中间件也越来越多,可能还需要涉及到缓存、消息队列的数据创建,届时再进行分享。

 作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

留【自动化测试】即可【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N658http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=X9i91KLq54E3uzoxNh3LdDkASWSc8gYX&authKey=QRYEZFtSoQCjHcqu%2FiM%2By9jPaGkKC0PTsp8UUs59i%2FT%2FKqDNjl4TgYRfqrTb%2FLxY&noverify=0&group_code=574737577

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/727593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ5.0--顺序消息

RocketMQ5.0–顺序消息 一、顺序消息概览 RocketMQ支持局部消息顺序消费,可以确保同一个消费队列中的消息被顺序消费,如果做到全局顺序消费则可以将主题配置成一个消费队列。并发(默认)消息消费参考​ 《RocketMQ5.0.0消息消费&…

java中对象字段转换

文章目录 前言一、对象属性转换问题二、如何处理转换?三 、处理办法1 利用 JsonProperty 改变转出属性2 利用 JsonAlias 增加接收的属性 总结 前言 在java中,有时候会涉及到一些对象的转换,为什么转换呢? 由于接受参数和用的时候对应不上由于经历过一些修改,为了兼容 一、对…

mac上 如何批量在文件名后加相同的文字?

mac上如何批量在文件名后加相同的文字?不管你是使用windows电脑还是使用mac电脑,很多小伙伴都会在电脑上进行文件批量重命名的操作,不过这项操作对于使用windows系统电脑的小伙伴来说会简单一些,因为在网上可以搜索到很多这样的教…

Python基础:错误与异常

文章目录 错误和异常程序错误异常处理断言处理程序调试 错误和异常 程序错误 程序的错误 ​ python程序中错误通常分为3种类型,即语法错误、运行错误和逻辑错误。 语法错误:源代码中的拼写语法错误,这些错误导致Python编译器无法把Python…

处理 git仓库提交大小写不识别的问题

源码 echo off title Handle name capitalization git config core.ignorecase false echo.&pause新建一个文本改名 处理资源大小写不识别问题.bat 以文编编辑器打开赋值粘贴上面的代码 丢到你的git仓库根目录 双击运行就可以了

知行之桥EDI系统QA第三期:启动知行之桥专题

随着使用知行之桥EDI系统的用户群体日益壮大,在使用过程中,用户可能对系统的工作原理、功能模块和实施过程有一些疑问。近期整理了有关启动知行之桥EDI系统时,常见的几个问题: 一、启动知行之桥服务报错:Failed to st…

王海峰最新发声!

7月6日,2023世界人工智能大会(WAIC)在上海世博中心开幕,众多专家学者、科技领军人才、企业代表共同探讨人工智能赋能产业发展的全新变化,展望技术新趋势。百度首席技术官、深度学习技术及应用国家工程研究中心主任王海…

无法应付大文件、海量文件可靠传输的FTP,用什么替代?

FTP作为世界第一款文件传输协议,在很长时间内,都广泛在世界范围内应用于各个行业和领域的文件传输,FTP解决了文件传输协议有无的问题,填补了互联网传输协议的空缺,极大程度改善了文件传输的困境。 但随着网络技术的发展…

HTTPS 的加密流程详解

HTTPS 采用的是对称加密和非对称加密结合的「混合加密」方式: 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。 在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。 采用「混合加密」的方式的原因&#…

TiDB(3):TiDB安装部署

https://pingcap.com/docs-cn/stable/overview/#部署方式 1 部署方式选择 https://gitee.com/pingcap/tidb?_fromgitee_search 通过查阅官方文档和网友踩坑经验,建议自己测试的时候使用官网推荐的Docker Compose方式快速构建TiDB集群即可(或者使用单机版) 2 TiDB-L…

【PHP+VUE】手术麻醉临床信息管理系统源码

一、前言 手术麻醉信息系统将为医院手术室带来规范化的工作管理标准、实时快捷的信息流,医疗经验的积累和有效归纳, 全面解决了手术室麻醉过程管理的信息化和数字化。 能够规范手术室的工作流程,实现麻醉、手术过程中的信息数字化和网络化,…

基于Pytorch深度学习的脑肿瘤分类识别(文末送书)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

第十四章 原理篇:DEIT

参考教程: https://arxiv.org/pdf/2012.12877.pdf https://github.com/facebookresearch/deit 文章目录 概述Knowledge DistillationDEITbase model: VITtransformer blockclass tokenposition embedding Distillation through attention 代码实现DistilledVisionTr…

Java Excel 打开文件报发现“xx.xlsx”中的部分内容有问题。是否让我们尽量尝试恢复问题解决

问题描述: 发现“文件.xlsx”中的部分内容有问题。是否让我们尽量尝试恢复? 问题分析: 1、后端的导出接口写的不对,又返回流数据,又返回响应体数据,导致前端将流数据和响应体数据都下载到了excel文件中。…

web开发应用技术论文范文

web开发技术论文篇一:《WEB开发基本技术实验项目设计》 摘 要:在众多企业开展电子商务的背景下,在管理信息系统网络化发展的趋势下,对经管专业学生阿来说了解并掌握web开发的基本技术知识是十分必要的,为此本文以黄梯云…

Nova: 基于committed relaxed R1CS的IVC方案

Nova是INV的一种实现方案,所谓IVC是指Prover可以向Verifier证明 z i F ( i ) ( z 0 ) z_i F^{(i)}(z_0) zi​F(i)(z0​) 。 最朴素的做法是直接进行i次迭代,每次迭代都进行一次zkSnark,但这样做有三个问题: Prover所需内存大…

软件安全测试流程与方法分享(中)

安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。安全是软件产品的一个重要特性,安全测试也是软件测试重的一个重要类别,本系列文章我们与…

趁规则改变之前,转变思维

在职场和生活中,我们常常强调了解和遵守规则的重要性。无论从事哪个行业、从事何种工作,赚取收入都需要理解并适应游戏规则。然而,规则并非永远不变,它会随着竞争环境、市场条件甚至社会文化的变迁而发生变化。 举个例子&#xff…

LeetCode 打卡day57--动态规划之回文串问题

一个人的朝圣 — LeetCode打卡第57天 知识总结 Leetcode 647. 回文子串题目说明代码说明 Leetcode 5. 最长回文子串题目说明代码说明 Leetcode 516. 最长回文子序列题目说明代码说明 知识总结 今天是动态规划的回文串问题系列 Leetcode 647. 回文子串 题目链接 题目说明 给…

nginx四层转发应用

默认使用yum安装的nginx是没有额外安装的动态模块的,需要自己额外安装 ls /usr/lib64/nginx/modules/ 若是不安装stream模块,直接在nginx的配置文件中调用stream模块,重载配置文件的时候会报错识别不到stream功能 安装stream模块 yum insta…