探讨接口测试颗粒度

news2024/9/21 20:50:46

偶然间在论坛上看到一个帖子,帖子内容如下:
 

假设现在有一个新增商品的接口,返回的参数中有新增商品的 id(每次返回的 id 都不一样)、success(判断是否成功,0 失败 1 成功)
1. 接口测试,断言的时候是否需要断言 id,还是说只需要断言 success 等于 1 就行?
2. 如果需要断言 id,是断言 id 不为空即可,还是说从数据库中取新增商品的 id 和接口返回的 id 进行比较,断言是否相等,这种比较有必要吗

问题的核心点是接口测试断言颗粒度问题,大家的观点基本上属于两派:

1. 只需要断言接口响应即可,无需做DB落表数据断言

2. 断言尽可能详细,DB断言很重要。

单体架构测试颗粒度

本文的主题也由此展开,探讨一下微服务接口测试的颗粒度问题。

20年之前,当时负责的产品属于单体架构,产品功能也相对比较简单。第一家公司产品是一个用户营销平台(画像系统),核心功能就是用户标签管理、圈人管理以及客群管理;第二家公司所在部门做在线教育产品,产品是内容生产平台,该平台用于对 K12 教辅书籍进行流水线形式录入,功能涉及文件上传、目录录入、内容框选、题目录入、题目质检等。

当时的测试策略,测试重点在于功能测试,测试手段是手工端到端测试以及实现自动化的接口端到端测试用例。说白了只要覆盖核心的业务场景(核心链路),发布后就基本上没太大问题。

当然,单接口的自动化测试也有覆盖,包括对接口在处理业务前的前置处理逻辑测试,以及接口处理业务逻辑后的输出结果测试。

1.默认值测试

很多情况一些非必填的参数会有默认值,比如说一个查询的接口,参数count为返回查询的结果数量, 默认为10,那么就应该有一条case来测试,当然前置条件是数据库里面必须要存在这样的数据超过10条。

2.异常类型测试

比如上面的count参数,这个参数的类型一定是可以转换为int类型的,这时候我们需要测试如果传的一些不可以 转换为int类型值来测试代码是否加入判断

3.必传项测试

如果接口的参数有必传项,那么需要测试在不传这个参数的时候接口返回情况,测试是否会提示 相应的error code

4.非必传项测试

如果接口有非必填项,当我不传递这些参数的时候会不会正常的返回相应的结果

5.非空测试

无论是必传的和非必传的参数,传递的key是正确的,但是value=null,这时候返回结果是否正确

6.错误码测试

通用的错误码与业务错误码是否能够清晰的说明调用问题,错误码是否能够尽可能的全的覆盖所有的情况

7.接口返回值

主要是对接口返回结果进行断言。例如返回结果中某些字段是否缺失,类型是否正确等。

但我印象中,单接口测试用例发现的缺陷比例占比相对比较少,更多缺陷都是通过端到端测试发现的。

总结一下,可能是出于业务简单(链路复杂度低、业务模型简单)的缘故,测试手段为手工测试+自动化测试,测试场景覆盖核心业务流程即可,接口自动化测试断言返回数据就能满足质量要求,也很少断言DB数据。

微服务架构测试颗粒度

来到阿里,接触的产品业务复杂度、技术架构复杂度指数级增高,此外金融类业务对资损的把控极其严格,只要是资损至少是P级故障了,并且和绩效直接挂钩。所以金融类业务的质量保障工作压力颇大,对测试质量要求极高。因此对落库数据正确性、对下游调用的参数正确性都必须校验到。

通常情况下,开发的编码质量也比较高,常规的业务功能用例开发基本上联调过问题不大。对测试同学来说,测试的重点更多偏向于异常测试场景,例如缓存数据一致性、高并发、异步消息重发/漏发等这些情况下系统该如何正确处理。

为什么与之前单体架构测试颗粒度差别如此之大?我从二者架构差异的以下几点说一下:

1.微服务架构部署和运维成本更高:微服务架构中的服务数量通常比单体架构更多,每个服务都需要独立部署、配置和监控,这会导致部署和运维成本变得更高。

2.微服务架构通常是分布式系统的:微服务架构中的服务分散在不同的服务器上,服务之间通过网络通信。服务实现时必须考虑分布式系统的问题,比如服务发现、负载均衡、容错等,显然这些都会增加系统的复杂性。

3.数据一致性问题:由于微服务架构中的服务是相互独立的,服务之间使用各自的数据库。这使得数据一致性变得更难以保证。

4.服务之间的依赖更加复杂:在微服务架构中,一个服务通常会依赖其他多个服务,这就需要管理服务之间的依赖关系(契约)。

ok,说了这么多差异,下面介绍一下当前的接口测试颗粒度。

在测试策略上,不同于单体架构的端到端测试,如今测试重点是服务自身。如上图所示,如果以下单支付业务为例,服务A可以理解为网关的下单支付接口,服务B可以是X应用的下单支付接口,服务C可以是下游X域的支付接口,这样服务A、B、C分属不同的开发团队,则各个开发团队也只能保证各自应用服务的质量,所以测试重点就是服务自身,很少进行端到端测试。

基于此,如果你负责的服务是服务B,则你测试的颗粒度至少保证到:

1.服务A各种调用B的请求场景需要考虑到。正向的场景可以正确响应和异常的场景服务B则给予上游约定的错误码。

2.服务B内部的业务正常和异常处理落库的数据正确性。

3.服务B调用服务C,请求报文是否和契约一致。

此外,上文说到了数据一致性问题。整个也是比较重要的,一笔请求从A到C,则如何保证数据的金额、状态一致性也是需要测试同学关注的。当然如今对分布式系统数据一致性采取的都是最终一致性的实现方式。

1.采用分布式事务:分布式事务是指跨越多个节点的事务。当多个操作需要在不同的节点上执行时,为了确保所有节点上的操作都能正确地执行并且保持一致,可以使用分布式事务来协调这些操作。常见的实现方式包括两阶段提交和三阶段提交。

2.使用分布式锁:分布式锁是指在分布式系统中对共享资源进行加锁的一种机制。它可以防止多个节点同时对同一个资源进行修改,从而保证数据的一致性。常见的分布式锁实现包括基于数据库的分布式锁和基于缓存的分布式锁等。

3.采用分布式缓存:将数据存储在分布式缓存中,每个节点都可以从缓存中读取数据。如果缓存中没有所需的数据,则可以从数据库中读取。这种方法可以大大减少对数据库的访问次数,因此也能提高系统的性能。

如何测试数据一致性,测试同学只有先了解这些框架本身的原理,才能通过一定的测试手段构造这样的业务场景。

即使有些场景无法构造,也是可以使用被动手段来验证数据一致性,例如可以借助于核对的手段。对同一笔单据,服务A-服务B-服务C,落库数据的一致性核对;以及服务B落库数据各表数据一致性核对。

总结一下:微服务架构下业务复杂度高、技术架构服务高,对测试质量提出了更高的要求,单体架构下的测试策略已经不适用于微服务架构,微服务架构更偏重于接口测试。对接口测试的颗粒度要求尽可能细:

1.异常场景正确处理(这点和单体架构测试点几乎是一致的,如1-6)

2.契约测试保证契约符合预期

3.落库数据准确性

现在回头再看文章开头的那个问题,我认为他们说的都没错,凡事没有绝对性,不同的产品有不同的质量要求,最优解就是花最少的时间得到最优的质量回报。


 

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

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

相关文章

代码随想录之对称二叉树

本内容来自代码随想录 使用后序遍历。 class Solution { public:bool traversal(TreeNode* left,TreeNode* right){//处理空节点情况if (left nullptr && right ! nullptr) return false;else if (left ! nullptr && right nullptr) return false;else if …

Python人工智能之混合高斯模型运动目标检测详解分析

搬运工项目,换个平台纪录,之前的广告太多 运动目标检测是计算机视觉领域中的一个重要内容,其检测效果将会对目标跟踪与识别造成一定的影响,本文将介绍用Python来进行混合高斯模型运动目标检测,感兴趣的朋友快来看看吧 …

4.2寸黑白红TFT电子标签【基站版】

ESL_TFT_4.2_V4 产品参数 产品型号 ESL_TFT_4.2_V4 尺寸(mm) 101.7*84.4*6.5mm 显示技术 TFT反射式 显示区域(mm) 84.8(H) * 63.6(V) 分辨率(像素) 400*300 像素尺寸(mm) 0.212x0.212 显示颜色 黑/白/红 视觉角度 45/45/60/60 工作温度 -20-70℃ 产品重量…

Spring6从入门到精通 第一章 带你玩转Spring

这里写目录标题 一 Spring框架产生的原因二 Spring6配置的关键环节 一 Spring框架产生的原因 传统的JavaWeb存在着耦合度较高的问题,而且实现完整的的MVC三层架构,开发成本过大,因此出现了Spring这个轻量级的开发框架,相当于建筑里…

C++初阶之命名空间的使用

目录 前言 命名空间的介绍 1.1 命名空间的定义 1.2 命名空间的使用 C输入&输出 总结: 前言 今天小编就给大家带来C的相关内容了,相对于C语言而言C的语法会比较复杂一点点,但是我相信大家通过自己的努力,也会很快的上手…

使用AIDEGen进行AOSP开发

什么是AIDEGen AIDEGen,大概是“Android IDE (helper) Generator”的简写,是 AOSP 源代码树中的一个工具,它允许从 Android Studio 等通常仅为非平台应用程序开发配置的 IDE 中处理系统应用程序。 AIDEGen 旨在自动化项目设置过程&#xff…

计算机视觉 | 八斗人工智能 (上)

目录 数字图像像素和分辨率灰度、通道和对比度其他概念 插值算法上采样和下采样的概念1. 最邻近插值2.双线性插值(最常用)3.双三次插值 直方图均衡化1. 灰度图直方图均衡化2. 彩色图直方图均衡化 数字图像 像素和分辨率 像素: 像素是分辨率…

智能营销服务性能提升2倍关键秘诀?就是亚马逊云科技

随着数字化进程加快和B2B商业市场竞争的白热化,通过挖掘数据“黄金”提升投资回报比与市场竞争力的智能营销,正成为B2B营销的热门风口。 但企业在获得更精准、更智能营销服务的同时,也不得不面临来自海量数据的搜寻以及数据实时更新等方面的…

Golang gorm

GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly. 一 对多入门 比如要开发cmdb的系统,无论是硬件还是软件。硬件对应的就是对应的哪个开发在用。或者服务对应的是哪个业务模块在使用,或者应用谁在使用。那么这…

【CXL】在gem5中跑一个实际的应用程序——Viper KV存储

有了CXL扩展内存,自然是要在DRAMCXL扩展内存上跑跑实际的应用程序,看看和DRAM传统磁盘有什么区别。 实际的应用程序其实就是一些工业界部署使用的,比如数据库、深度学习训练项目等等。本文主要找到一个KV存储Viper,搭建并进行简单…

水电设计院信息管理系统1.0

水电设计公司信息管理系统软件使用说明书 代码太多就不贴了,请在我的资源里下载,已部署在企业进行试运行。https://download.csdn.net/download/weixin_44735475/87704302 目录 1.引言 1 2.项目背景 1 3.系统功能 2 3.1系统功能 2 3.2系统性能 2 3.3系…

Python GUI自动化神器pyautogui,精准识别图片并自动点赞(32)

小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 欢迎和猫妹一起,趣味学Python。 今日主题 你听过GUI自动化吗? GUI自动化就是用软件模拟鼠标和键盘的操作。 提到Python GUI自动化,不…

Flink State 笔记帖

1 State 分类 Operator State 主要用在Source、Sink等没有key分布的位置。 Keyed State 用在keyBy后的KeyedStream里,每个存储状态与一个key想关联。 ValueState ListState MapState ReducingState AggeratingState 2 State Backend StateBackend分类 HashMa…

JVM之JDK 监控和故障处理工具总结

JDK 命令行工具 这些命令在 JDK 安装目录下的 bin 目录下: jps (JVM Process Status): 类似 UNIX 的 ps 命令。用于查看所有 Java 进程的启动类、传入参数和Java 虚拟机参数等信息;jstat(JVM Statistics Monitoring Tool&#x…

虚拟人与娱乐传媒融合,推动综艺新模式

经过多年的更新迭代和市场的推动,虚拟人技术正在逐渐迈向成熟:3D虚拟形象的制作变得越来越精致且真实,并且出现了越来越多功能丰富使用便捷的动捕设备。因此,包括综艺影视在内的诸多领域,开始尝试将虚拟人技术融入行业…

DETR:end-to-end object detection with transformers

DETR 论文精读【论文精读】_哔哩哔哩_bilibili更多论文:https://github.com/mli/paper-reading/, 视频播放量 90699、弹幕量 493、点赞数 3566、投硬币枚数 2939、收藏人数 2564、转发人数 663, 视频作者 跟李沐学AI, 作者简介 ,相关视频:在线…

【设计原则】依赖倒置原则--高层代码和底层代码到底谁该依赖谁?

文章目录 前言一、谁依赖谁二、依赖于抽象总结 前言 依赖这个词,程序员们都好理解,意思就是,我这段代码用到了谁,我就依赖了谁。依赖容易有,但能不能把依赖弄对,就需要动点脑子了。 如果依赖关系没有处理…

【红队APT】反朔源隐藏C2项目CDN域前置云函数数据中转DNS转发

文章目录 域前置-CDN隐藏C2真实IP 防止被溯源什么是域前置条件原理 完整复现域前置溯源 DNS协议-域名记录解析云函数-腾讯云操作云函数如何溯源 端口转发-Iptables中间件反向代理-Apache 域前置-CDN隐藏C2真实IP 防止被溯源 国内外云服务上大部分已经不支持域前置了&#xff0…

局域网哪些特点?快解析内网穿透实现外网访问局域网SVN

无线局域网传统是有线局域网络的补充和扩展,具有灵活性、可移动性及较低的投资成本等优势,受到了家庭网络用户、中小型办公室用户、广大企业用户及电信运营商的青睐,成为当前整个数据通信领域发展最快的产业之一。 局域网一般为一个单位所建&…

(20230418 SALE算法)个人模型学习笔记记录 500

写给自己: 一、先不做对称的结构试一下,上一个ALE的模型,记得有次没有做对称结构,居然需要11天才能算完,当时吓得我赶紧删除了,做了对称结构。先试一下这个S-ALE能否不做成对称的。但是我感觉或许也会计算很长时间。要不我先试一下。 写给自己: 一、先不做对称的结构…