最佳利用Mock提升测试效率的7个技巧!

2024-01-12

再聊这个问题之前,我们先了解一下公司技术架构的演变过程,这样我们才能真正体会到我们为什么要使用 Mock功能。

单体应用

在早期, 大部分公司的应用技术栈主要可以分为两大类:LAMP(Linux + Apache + MySQL + PHP)和 MVC(Spring MVC+ Hibernate/MyBatis + Tomcat)。这两种技术栈都是为单体应用架构设计的,具有易学易懂、开发上手快以及测试、部署、运维方便等优点。因此,单人甚至可以完成一个网站的完整开发和部署过程。以MVC架构为例,通常我们只需将一个 war 包部署到Tomcat中,启动Tomcat并监听特定端口,就可以向外部提供服务。在业务规模和开发团队人数较小的初期,这种单体应用架构可以有效控制团队的开发和运维成本。

但是随着业务规模的不断扩大,团队开发人员的不断扩张,单体应用架构就会开始出现问题。只有经历过公司业务量从 0 到百万级流量的人员对此深有感触,别说现在的千万甚至亿级流量。从我的角度来看,会有如下几个明显的问题:

  • 部署效率低、时间长: 在我们测试过的项目里面,最久的编译、打包到部署完成达到 1 个小时,如果提测的版本存在阻碍问题,再次进行部署,我们想想就可以知道这种效率。

  • 团队协作效率低、成本高 :团队规模达到一定规模之后,这种模式就会存在这种团队协作效率低下的问题,例如一个人的代码修改了要打包,就需要通知所有人,是否提交了代码,提交的有没有影响。

  • 系统高可用降低: 由于团队里面每个人的技术水平不一,就会导致代码里面存在不稳定的因素,又因为单体应用所有功能都打在一个 war 包里面,就会影响程序的运行。例如编写的代码存在内存泄露、耗资源等情况,很容易是整个应用挂掉。

  • 线上发布太慢 :部署过环境的都清楚,我们把安装包上传到服务器后,就是启动应用,但是有些启动的时候很长,特别是 Java 应用,我见过就一个小业务的应用,启动就差不多用了 15 分钟,如果是再大一些,启动时间就更长了。

微服务

具体微服务可以去参考对应的微服务的技术文章进行了解,下面是个人的理解。

微服务是一种应用构建方式,该应用由多个小型服务组成,这些服务各自运行在独立的进程中。这些服务通过轻量级通讯机制相互交互,同时,它们可以通过自动化部署机制独立地进行部署。由于在微服务架构中,各个服务都是相互独立的,因此它们可以根据业务需求使用不同的技术进行实现。

个人看来,微服务具有如下优点:

  • 更快的开发速度 微服务架构支持团队对服务进行独立的开发与部署,从而提升了开发的效率。同时,每个服务的独立性也允许开发者采用各种不同的技术栈和工具进行服务开发,使得技术选择更加灵活多样。

  • 更好的灵活性 微服务架构支持团队对服务进行独立的开发与部署,这使得系统更加灵活。此外,由于每个服务都是独立的,因此可以更容易地添加新功能或修改现有功能。

  • 更好的扩展性 微服务架构支持将应用程序划分为多个独立的服务,每个服务都能进行独立的部署和扩展。这种架构方式增强了系统的可扩展性,便于根据业务需求动态地添加或删除服务。

  • 更好的可靠性 微服务架构提供了将应用程序分割为多个单独服务的能力,这些服务都可以独立部署和运行。这种架构方式进一步提升了系统的健壮性,能更有效地应对故障和错误处理。

  • 更高的维护性 微服务架构将应用程序划分为众多独立的服务,每个服务都拥有自己的代码库和专属团队。这样的划分方式使得代码更具模块性,从而更便于进行维护和更新。

当然微服务也具体一定的缺点,如下:

  • 分布式系统的复杂性: 微服务架构由于涉及到多个服务的协同工作,因此增加了系统的复杂度。在这种架构中,必须对服务间的性能、通讯、数据一致性以及故障定位、恢复等问题进行深入考虑。

  • 部署和运维的复杂性: 在微服务架构中,由于涉及到多个服务的部署,因此部署的复杂性得到了提高,其中需要深入考虑服务间的依赖关系和版本控制等问题。同时,微服务架构也增加了运维的复杂性,因为需要部署和管理多个服务,这就需要我们关注服务的监控、故障恢复以及容量规划等问题。

  • 测试的复杂性: 在微服务架构中,服务数量众多,每个服务都是独立的业务单元,服务主要通过接口进行交互,如何保证依赖的正常,是测试面临的主要挑战。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

测试分析

我们通过前面说的单体应用、微服务可以知道,现在大部分公司都是微服务化,我们看下下面一个图。

上述的服务之间的关系看起来比较简单,但是也是互相之间调用、依赖,但是实际的公司应用情况更加复杂,微服务数量少则几十上百个,多的上千个,它们之间的关系像蜘蛛网一样复杂。

如上图所示,当我们在测试微服务A 的功能时,微服务 B 、 E 经常不稳定,第三方服务也是一样非常不稳定,这个时候非常影响我们测试的进度、效率。这导致了尽管待测系统已经开发完毕,测试脚本、测试用例也准备充分,但测试工作却无法进行,这是一个令人沮丧的结果。面对这种情况,我们感到非常不适,因为尽管我付出了大量努力,但工作进度却因一个不是我们负责的服务而受阻。这种感觉就好像是全力出击,却只是打在了棉花上,无论自己有多大的力量也无法施展。

在团队有一定规模的公司里面,日常工作中大家应该碰见到前后端项目、跨团队项目、和第三方公司合作的测试任务。下面情况很常见:

  • 前端进入开发了,后端还在开发中,无法进行联调

  • 跨团队项目,存在一些关联团队的功能开发进度拖慢

  • 第三方合作项目,内部基本上开发完成,第三方公司的一直没完成

  • 自动化用例运行总是出现部分失败,由于其他服务不稳定

那作为QA工程师,面对这样的情形,我们该怎么办呢? 难道一直等着吗?有什么办法解决么?

我们能否这样做的,我的被测服务就是服务 A,那么我不用管其他服务是不是好用,我只要保障服务 A 能够走完流程,就可以完成服务A测试任务了。这个思路,我们只需要找一个工具模拟其他服务的工作就好了了,也不用再关心其他服务到底调用了多少服务。

Mock 应用

我们知道我们需要模拟其他服务的处理,不同的是,它不需要实现原有服务的处理逻辑,只要能按服务的处理逻辑给出对应返回就可以了,就是目前我们常说的 Mock 服务、挡板服务/系统

那么,到底应该怎么选择 Mock 服务呢?

我们要基于自己和团队的技术栈来做选择,这决定了你进行模拟服务的效率。你要知道,无论Mock服务做得多么完美,它只是一个 Mock,它存在的意义就是帮助你快速完成被测服务的测试工作,因此,选择一个学习成本低、上手快并且完全适合你自己技术栈的 Mock 框架,能让你的测试工作事半功倍。我们主要需要下面几个参考点:

  • 使用简单、容易上手

  • 处理速度快

  • 非常轻量级

  • 投入成本低

选择 Mock 技术栈与选择测试框架的技术栈有所区别。在挑选 Mock 技术栈时,你需要重点考虑学习成本,并努力将其降至最低,这是选择 Mock 框架的首要因素。此外,你需要关注的不仅是自己的学习成本,也要考虑团队的学习成本,因为现在每个项目可能都需要 Mock 服务。这就要求每个项目的测试工程师都有能力独立构建 Mock 服务。在 Mock 服务的技术选型上,应以团队的整体技术栈为基础,并参考自己的技术进行选型。

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:自动化测试老司机 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最佳利用Mock提升测试效率的7个技巧! 的相关文章

  • 软件测试|深入了解Python中的super()函数用法

    简介 Python中的super 函数是一种强大的工具 用于在子类中调用父类的方法 它在面向对象编程中非常有用 可以让你轻松地扩展和重用现有的类 本文将详细介绍super 函数的用法 并提供一些示例来帮助你更好地理解它的功能 什么是supe
  • 软件测试|SQLAlchemy环境安装与基础使用

    简介 SQLAlchemy 是一个强大的 Python 库 用于与关系型数据库进行交互 它提供了高度抽象的对象关系映射 ORM 工具 允许使用 Python 对象来操作数据库 而不必编写原生SQL查询 本文将介绍如何安装 SQLAlchem
  • 软件测试|Selenium StaleElementReferenceException 异常分析与解决

    简介 Selenium 是一个流行的自动化测试工具 用于模拟用户与网页交互 然而 当我们在使用 Selenium 时 可能会遇到一个常见的异常 即 StaleElementReferenceException 这个异常通常在我们尝试与网页上
  • 软件测试|web自动化测试神器playwright教程(三十八)

    简介 在我们使用selenium时 我们可以获取元素的属性 元素的文本值 以及输入框的内容等 作为比selenium更为强大的web自动化测试神器 playwright也可以实现对元素属性 文本值和输入框内容的抓取 并且实现比seleniu
  • 软件测试|教你如何使用Python绘制出奥运五环旗

    简介 我们之前介绍过使用turtle来绘制正多边形 但是绘制正多边形只是turtle模块最基础的使用 我们可以使用turtle模块绘制出更多不一样的精彩图形 本文就来给大家介绍一个比较简单的turtle绘图实例 绘制奥运五环旗 初始化参数
  • 软件测试|使用matplotlib绘制多种柱状图

    简介 在数据可视化领域 Matplotlib是一款强大的Python库 它可以用于创建多种类型的图表 包括柱状图 本文将介绍如何使用Matplotlib创建多种不同类型的柱状图 并提供示例代码 创建基本柱状图 首先 让我们创建一个基本的柱状
  • 软件测试|教你使用Python下载图片

    前言 我一直觉得Windows系统默认的桌面背景不好看 但是自己又没有好的资源可以进行替换 突然我一个朋友提醒了我 网络上的图片这么多 你甚至可以每天换很多个好看的背景 但是如果让我手动去设置的话 我觉得太麻烦了 我不如使用技术手段将图片下
  • 软件测试|如何使用selenium处理iframe富文本输入框

    简介 在网页开发中 富文本框是常见的元素 用于输入富文本内容 如富文本编辑器或邮件编辑器 如果我们要使用Python和Selenium进行自动化测试或操作这种富文本框 可能会遇到一些挑战 本文将详细介绍如何使用Python和Selenium
  • 如何写好一个错误报告

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 一篇文章带你了解Python常用自动化测试框架——Pytest

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 摸爬滚打多年的打工人,总结了三条职场真理,绝不假大空!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 新手也能看懂的【前端自动化测试入门】

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • 月薪2W的软件测试工程师,到底是做什么的?

    在生活中 我们常常会遇到以下几种窘迫时刻 准备骑共享单车出行 却发现扫码开锁半天 车子都没有反应 手机导航打车 却发现地图定位偏差很大 司机总是跑错地方 买个水 却遭遇自动售货机吐币 或者不找零钱 好不容易休息打个游戏 却一直出现卡顿 闪退
  • Python常用的自动化小脚本!

    一 list转json string转json 可以使用Python内置的 json 模块将列表 List 和字符串 String 转换成JSON格式 List转JSON假设我们有一个列表 List my list apple banana
  • 探索自动化测试断言:提升测试效率与质量的关键!

    前言 断言在自动化测试中起着关键的作用 它是验证测试结果是否符合预期的重要手段 如果在自动化测试过程中忽视了断言 那么这个测试就失去了其本质的意义 因为我们无法得知测试结果是否达到了预期的效果 因此 断言在自动化测试中的重要性不言而喻 那么
  • tcpdump抓包

    tcpdump抓包 基本概念 1 类型的关键字 host 指明一台主机 如 host 10 1 110 110 net 指明一个网络地址 如 net 10 1 0 0 port 指明端口号 如 port 8090 2 确定方向的关键字 sr
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • 外包干了3个月,技术退步明显。。。。。

    先说一下自己的情况 本科生 20年通过校招进入广州某软件公司 干了接近3年的 功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了3年的功能测试 已经让我变得不思进取 谈了2年的女朋
  • Airtest自动化测试工具

    一开始知道Airtest大概是在年初的时候 当时 看了一下官方的文档 大概是类似Sikuli的一个工具 主要用来做游戏自动化的 通过截图的方式用来解决游戏自动化测试的难题 最近 移动端测试的同事尝试用它的poco库来做自动化 看样子还不错

随机推荐