接口测试时, 数据Mock为何如此重要?

一、为什么要mock

工作中遇到以下问题,我们可以使用mock解决:

1、无法控制第三方系统某接口的返回,返回的数据不满足要求

2、某依赖系统还未开发完成,就需要对被测系统进行测试

3、有些系统不支持重复请求,或有访问访问频次限制。如不可重复支付,获取敏感信息的接口访问频次不可高于xx等 

二、mock的实现原理

一般测试场景中,都是对接口的返回数据进行mock。以http协议为例,

1、最简单的mock,可在mock服务器上保存一份mock数据,并给此mock数据生成对应的url。将要访问的第三方url,以mock url代替,这样即可满足最基本的mock需求。可在此处了解到更多关于此种mock的信息。

2、使用proxy实现mock。wiremock/anymock等开源工具可提供此实现。好处在于:

  1.    可查看请求及回应,方便获取mock数据的原型

  2.    匹配到规则的请求会返回mock数据,未匹配到的请求访问原服务  

  3.    无需修改服务配置,无需重启服务

最近有接触到一些函数级别的mock。比如,mockito这个工具,即可实现不发出请求,即可获得mock数据的功能。

三、Mock的好处

1. 团队可以并行工作

有了Mock,前后端人员只需要定义好接口文档就可以开始并行工作,互不影响,只在最后的联调阶段往来密切;后端与后端之间如果有接口耦合,也同样能被Mock解决;测试过程中如果遇到依赖接口没有准备好,同样可以借助Mock;不会出现一个团队等待另一个团队的情况。这样的话,开发自测阶段就可以及早开展,从而发现缺陷的时机也提前了,有利于整个产品质量以及进度的保证。

2. 开启TDD模式,即测试驱动开发

单元测试是TDD实现的基石,而TDD经常会碰到协同模块尚未开发完成的情况,但是有了mock,这些一切都不是问题。当接口定义好后,测试人员就可以创建一个Mock,把接口添加到自动化测试环境,提前创建测试。

3. 可以模拟那些无法访问的资源

比如说,你需要调用一个“墙”外的资源来方便自己调试,就可以自己Mock一个。

4. 隔离系统

假如我们需要调用一个post请求,为了获得某个响应,来看当前系统是否能正确处理返回的“响应”,但是这个post请求会造成数据库中数据的污染,那么就可以充分利用Mock,构造一个虚拟的post请求,我们给他指定返回就好了

5. 可以用来演示

假如我们需要创建一个演示程序,并且做了简单的UI,那么在完全没有开发后端服务的情况下,也可以进行演示。说到演示了,假如你已经做好了一个系统,并且需要给客户进行演示,但是里面有些真实数据并不想让用户看到,那么同样,你可以用Mock接口把这些敏感信息接口全部替换。

6. 测试覆盖度

假如有一个接口,有100个不同类型的返回,我们需要测试它在不同返回下,系统是否能够正常响应,但是有些返回在正常情况下基本不会发生,难道你要千方百计地给系统做各种手脚让他返回以便测试吗?比如,我们需要测试在当接口发生500错误的时候,app是否崩溃,别告诉我你一定要给服务端代码做些手脚让他返回500 。。。而使用mock,这一切就都好办了,想要什么返回就模拟什么返回,妈妈再也不用担心我的测试覆盖度了

如何mock数据

1.安装Node.js ,通过http-server开启本地服务器

获取端口http://localhost:8000,然后通过在文件夹创建html和json文件来测试数据

示例:

图片

我们打开浏览器的控制台就能看到输出的数据

图片

2.通过线上来mock数据

  1. 使用 https://easy-mock.com

  2. 使用 http://rapapi.org/org/index.do

以第一种为例,进入网站后建立个人项目
进入项目后通过创建接口

图片

选择接口类型

图片

图片

图片

进行创建

进行查看

图片

控制台结果

图片

四、特殊场景下对mock数据的处理

有些场景对于mock来说较为特殊。比如,某接口对数据有加解密操作,这使得mock的数据无法直观理解,无法有效率地调整mock数据的内容以完成测试目标。另外,有些rpc协议不具通用性,通用的mock平台来支持此类协议成本太高。所以,我们的需要对我们的方法做一些变通。

1. 对于接口加解密数据,我们开发一个函数,来支持mock数据的加解密。手工测试时,该函数可表现为mock平台的插件;接口自动化时可表现为处理mock数据的函数。也可以采用方法

2. 直接将这个函数的逻辑整体mock掉。开发某功能:当程序运行到指定的方法时,不继续运行函数体,而是发送一个http请求到mock平台,将mock数据return出去。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

三石峰汽车生产厂的设备振动检测项目案例

汽车生产厂的设备振动检测项目 ----天津三石峰科技(http://www.sange-cbm.com) 汽车产线有很多传动设备需要长期在线运行,会出现老化、疲劳、磨损等问题,为了避免意外停机造成损失,需要加装一些健康监测设备&#xf…

计算机组成刷题一轮(包过版)

搭配食用 计算机组成原理一轮-CSDN博客 目录 一、计算机系统概述 选择 计算机系统组成 冯诺依曼机 软件和硬件的功能 CPU等概念 计算机系统的工作原理 机器字长 运行速度 求MIPS 编译程序 机器语言程序 平均CPI和CPU执行时间 综合应用 存储程序原理 二…

圆 高级题目

上边的文章发了圆的初级题目,这篇来发高级 参考答案:ACCBBBBCDC

拓扑排序-java

主要通过宽度优先搜索(BFS)来实现有向无环图的拓扑序列,邻接表存储图。数组模拟单链表、队列,实现BFS基本操作。 文章目录 前言 一、有向图的拓扑序列 二、算法思路 1.拓扑序列 2.算法思路 三、使用步骤 1.代码如下(示…

Java实现数据结构——顺序表

目录 一、前言 二、实现 2.1 增 2.2 删 2.3 查 2.4 改 2.5 销毁顺序表 三、Arraylist 3.1 构造方法 3.2 常用操作 3.3 ArrayList遍历 四、 ArrayList具体使用 4.1 杨辉三角 4.2 简单洗牌算法 一、前言 笔者在以前的文章中实现过顺序表 本文在理论上不会有太详细…

上汽集团25届暑期实习测评校招笔试题库已发(真题)

📣上汽集团 25届暑期实习测评已发,正在申请的小伙伴看过来哦👀 ㊙️本次实习项目面向2025届国内外毕业生,开放了新媒体运营、销售策略、市场运营、物流、质量分析等岗位~ ✅测评讲解: 👉测评自收到起需在…

利用streamlit结合langchain_aws实现claud3的页面交互

测试使用的代码如下 import streamlit as st from langchain_aws import ChatBedrockdef chat_with_model(prompt, model_id):llm ChatBedrock(credentials_profile_name"default", model_idmodel_id, region_name"us-east-1")res llm.invoke(prompt)re…

市值超越苹果,英伟达的AI崛起与天润融通的数智化转型

Agent,开启客户服务新时代。 世界商业格局又迎来一个历史性时刻。 北京时间6月6日,人工智能芯片巨头英伟达(NVDA)收涨5.16%,总市值达到3.01万亿美元,正式超越苹果公司,成为仅次于微软&#xf…

C++ 命名空间|缺省参数|函数重载

一、命名空间 1.什么是命名空间 命名空间&#xff08;namespace&#xff09;是C中的一种机制&#xff0c;用来解决不同代码库之间的命名冲突问题。 先来看一个例子&#xff1a; #include <iostream>void print() {std::cout << "Hello from print()"…

Polar Web【简单】upload

Polar Web【简单】upload Contents Polar Web【简单】upload思路EXPPythonGo 运行&总结 思路 如题目所说&#xff0c;本题考查的是文件上传漏洞的渗透技巧。 打开环境&#xff0c;发现需要上传的是图片文件&#xff0c;故考虑使用截取数据包进行数据修改进行重放。在重发器…

Java面向对象-方法的重写、super

Java面向对象-方法的重写、super 一、方法的重写二、super关键字1、super可以省略2、super不可以省略3、super修饰构造器4、继承条件下构造方法的执行过程 一、方法的重写 1、发生在子类和父类中&#xff0c;当子类对父类提供的方法不满意的时候&#xff0c;要对父类的方法进行…

蓝牙安全入门——两道CTF题目复现

文章目录 蓝牙安全入门题目 low_energy_crypto获取私钥解密 题目 蓝牙钥匙的春天配对过程配对方法密钥分发数据加密安全漏洞和保护实际应用实际应用 蓝牙安全入门 &#x1f680;&#x1f680;最近一直对车联网比较感兴趣&#xff0c;但是面试官说我有些技术栈缺失&#xff0c;所…

一文带你轻松掌握Java数组定义和声明

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

【Redis】解决 Redis 运行在 Protected Mode 下的 DENIED 错误:消除 Redis 受保护模式的完美方案

【Redis】解决 Redis 运行在 Protected Mode 下的 DENIED 错误&#xff1a;消除 Redis 受保护模式的完美方案 大家好 我是寸铁&#x1f44a; 总结了一篇【Redis】解决 Redis 运行在 Protected Mode 下的 DENIED 错误&#xff1a;消除 Redis 受保护模式的完美方案✨ 喜欢的小伙伴…

优质免费的 5 款翻译 API 接口推荐

当谈到翻译API时&#xff0c;我们通常指的是一种编程接口&#xff0c;它允许开发者将文本从一种语言翻译成另一种语言。这些API通常由专业的翻译服务提供商提供&#xff0c;如谷歌翻译 API、实时翻译API、腾讯翻译API、DeepL翻译API、Azure翻译API等。 这些API通常提供多种语言…

【Linux文件篇】优化文件读写,加速数据处理策略——缓冲区

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 前言&#xff1a;我们已经复习了C语言中的接口&#xff0c;并且学习了许多文件系统调用&#xff0c;了解了文件描述符以及重定向。今天我们继续学习文件缓冲区的相关内容。 缓冲区 在学习C语言时&#xff0c;我们经常…

codeforce round951 div2

A guess the maximum 问题&#xff1a; 翻译一下就是求所有相邻元素中max - 1的最小值 代码&#xff1a; #include <iostream> #include <algorithm>using namespace std;const int N 5e4;int a[N]; int n;void solve() {cin >> n;int ans 0x3f3f3f3f;…

贪心算法06(leetcode738,968)

参考资料&#xff1a; https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html 738. 单调递增的数字 题目描述&#xff1a; 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。…

MySQL普通表转换为分区表实战指南

码到三十五 &#xff1a; 个人主页 引言 本文将详细指导新手开发者如何将MySQL中的普通表转换为分区表。分区表在处理庞大数据集时展现出显著的性能优势&#xff0c;不仅能大幅提升查询速度&#xff0c;还能有效简化数据维护工作。通过掌握这一技巧能够更好地应对数据密集型应…

【Bazel入门与精通】 rules之属性

https://bazel.build/extending/rules?hlzh-cn#attributes Attributes An attribute is a rule argument. Attributes can provide specific values to a target’s implementation, or they can refer to other targets, creating a graph of dependencies. Rule-specifi…