接口测试和性能测试的区别

news2024/11/24 19:51:42

最近我在一个论坛上看到了一个关于性能测试和接口测试的经典问题,问题如下:

问题:后端性能测试,一个功能其实都是由后台多个接口组成的。

例如一个单据的保存,可能后台需要调用几个接口。用LR录制这个功能做性能测试。和把它这个功能调用的几个接口连接起来一起做接口性能测试有什么区别呢?

        相信很多开始测试自动化的测试同学的入门都是从一些培训班或者网上课程开始的。很多培训在讲授接口测试或者性能测试的时候往往是拿LoadRunner或者jmeter去演示测试过程的。通常的课程安排一般先拿LoadRunner(或者jmeter)讲接口测试,然后继续使用LoadRunner(或者jmeter)去讲性能测试。

        无论是接口测试还是性能测试,貌似老湿们讲的步骤好像都差不多,先录制接口,然后配置场景,然后执行测试场景,给人感觉好像没啥差别。感觉好晕。。那到底两者差别在哪里呢?我们从入门者的角度来谈谈差别吧!

        这里我准备从三个部分去阐述两者的关联和区别:

        1. 至关重要的观念:测试与工具的关系。

        2. 接口测试和性能测试的侧重点。

        3. 在实际场景中二者的配置区别。

        首先我们要正试一个理念,LoadRunner和Jmeter只是一个工具,而培训班大力推崇的都是工具培训,容易让我们落入一种XXX就是性能测试的赶脚,其实不然(差别蛮多,后面会单独去写文章分享),性能测试包含了工具(LoadRunner和Jmeter),工具仅仅是扮演了性能测试中的一个执行环节而已。

        我们可以拿LoadRunner(Jmeter)做接口测试,当然也可以拿到做性能测试。所以工具是什么不重要,关键在于我们怎么去使用它,例如下面一个生活中的例子:铁锹。我们可以拿铁锹来铲土,也可以用铁锹来炒大锅饭,是不是就像LoadRunner既能做接口测试,又能做性能测试一样?

挖土的铁锹

炒饭的铁锹

        梳理清楚了第一个概念:工具和测试没有完全对等的关系后,我们来说第二个,性能测试和接口测试的区别。

        测试分很多种,如果细细罗列,从单测,接口,功能,性能,UI,至少有五层,那其实区分这些测试类型的关键点就在于测试的侧重点不一样,接口测试是针对后端开发的接口(不一定是http的,也有可能是tcp的),而性能测试是偏重于产品的各方面各阶段性能(接口的性能,页面的性能,app的性能),可以说性能测试的覆盖度比接口更大一些。那我们就拿http类型的接口测试和性能测试举例,有啥侧重点区别呢?

        简单来说,它俩区别就在于性能测试有多用户(并发)的概念,而接口测试只是单用户场景。我们做接口测试是是用于验证接口的请求和返回是否匹配(其实可以理解成接口测试也是一种功能测试);而性能测试则是很多人同时在做这种接口测试,更侧重于真实的用户场景。因为我们研发完的产品投入市场后,不会就专门给某一个人使用功能,肯定是会有很多人同时在用我们的产品功能。那在这里,很多人同时在用其实就是性能的一个关键点。

        所以总结第二点:性能测试近乎等同于很多用户同时在做接口测试。

        第三部分,也是回答本文最初抛出的问题,在实际的应用过程中,二者是否存在什么联系与区别?

        我们就简单地拿LR做接口测试和性能测试的过程为例吧,拿LR执行测试对于大多数人来说就三步:录制接口(或者接口抓包),配置场景,执行测试场景。

        录制接口这一步是没有区别的,因为我们刚才讲到过,性能测试其实也是一种特殊的接口测试。那配置场景这一步有区别吗?可能很多人也说没有区别,但其实是有的,我们举例几个区别。如果是性能测试,首先要配置多用户(或者说多线程),而接口测试不用;其次如果是性能测试,建议关掉断言(否则可能压不上去,因为断言会耗费LR或者Jmeter自身的性能);最后如果是性能测试,如果压测不上去,还可能需要做分布式(简单来说,就是多台机器同时执行性能测试)。

        那第三步:执行测试场景的时候有什么区别吗?刚才说到,接口测试一般是用断言来验证接口的正确性,那性能测试怎么去验证呢?在执行性能测试场景的时候,我们抛弃断言,要加入另外的校验方式:

        1. 最基本的三个:多用户下接口的响应时间,qps/tps(每秒请求量),出错率。

        2.服务器上的资源监控(cpu,内存,io)。

        3.被测服务的资源监控(多个服务的cpu,内存,io)以及错误日志。

        以上三点都是衡量性能测试的标准,也是当执行性能测试场景出问题时候,用于定位问题的重要证据,所以我们可以知道,当接口测试出了问题,我们可以通过断言迅速知道出了问题;而性能测试出了问题,需要从多个方面多个维度去调试定位,性能测试对于系统架构的理解能力要求更高!

        以上就是我从入门角度,对接口测试和性能测试的区别的一些知识分享,希望对一些即将入门或者刚入门的你有帮助!有任何疑问请直接在文末留言,你的留言是对我原创最大的鼓励,谢谢!

2023最新Jmeter接口测试从入门到精通(全套项目实战教程)

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

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

相关文章

Java如何进行数据脱敏

1.SQL数据脱敏实现 MYSQL(电话号码,身份证)数据脱敏的实现 1 2 3 4 5 6 7 8 -- CONCAT()、LEFT()和RIGHT()字符串函数组合使用,请看下面具体实现 -- CONCAT(str1,str2,…):返回结果为连接参数产生的字符串 -- LEFT(str,len):返回从字符串st…

Vue Router的进阶

进阶 导航守卫 官方文档上面描述的会比较深奥,而守卫类型也比较多,其中包含了全局前置守卫、全局解析守卫、全局后置钩子、路由独享守卫、组件内守卫。每一种守卫的作用和用法都不相同。这会使得大家去学习的时候觉得比较困难,这边主要介绍…

如何平衡需求的优先级冲突?

每个项目都有各种需求,如业务需求、技术需求、用户需求、系统需求。我们需要对这些需求进行优先级排序,平衡不同利益相关者的需求,以更好满足客户需求,确保关键业务目标得到优先满足,并合理分配资源,避免资…

移植 NetXDuo 到 STM32F4 芯片

移植 NetXDuo 到 STM32F4 芯片 1. NetXDuo 和 ThreadX 源码获取2. 准备工作2.1 基本工程模板获取 —— CubeMx 3.ThreadX 移植3.1 添加到工程3.2 文件修改3.3 补充完成回调函数 4. NetXDuo 移植4.1 将 NetXDuo 添加到工程4.2 驱动层实现4.3 测试 1. NetXDuo 和 ThreadX 源码获取…

RT-Thread 中断管理(学习二)

中断的底半处理 RT-Thread不对中断服务程序所需要的处理时间做任何假设、限制,但如同其它实时操作系统或非实时操作系统一样,用户需要保证所有的中断服务程序在尽可能短的时间内完成。这样在发生中断嵌套,或屏蔽了相应中断源的过程中&#x…

小黑开始了拉歌训练,第一次进入部室馆,被通知要去当主持人心里有些紧张的leetcode之旅:337. 打家劫舍 III

小黑代码(小黑卡在了bug中,上午一步步探索做出,非常NB!!!) # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left lef…

Hive窗口函数回顾

1.语法 1.1 基于行的窗口函数 Hive的窗口函数分为两种类型,一种是基于行的窗口函数,即将某个字段的多行限定为一个范围,对范围内的字段值进行计算,最后将形成的字段拼接在该表上。 注意:在进行窗口函数计算之前&#…

X86指令基本格式

X86指令基本格式 1 什么是机器码2 X86指令基本格式3 指令前缀3.1 第一组:封锁和重复执行前缀3.2 第二组:段前缀3.3 第三组:修改操作数默认长度3.4 第四组:修改默认地址长度 4 操作码5 ModR/M与SIB5.1 ModR/M字节5.2 SIB字节 6 地址…

uCharts常用图表组件demo

带渐变阴影的曲线图 <view class"charts-box"><qiun-data-charts type"area" :opts"opts" :chartData"chartData" :ontouch"true":background"rgba(256,256,256,0)" /> </view>data(){return{…

嵌入式学习(1)HAL库

文章目录 1.HAL库文件介绍2.HAL库编程目录结构3.使用cubemx生成HAL库编程目录结构 1.HAL库文件介绍 2.HAL库编程目录结构 3.使用cubemx生成HAL库编程目录结构

【JavaEE重点知识归纳】第7节:类和对象

目录 一&#xff1a;了解面向对象 1.什么是面向对象 2.面向对象和面向过程区分 二&#xff1a;类定义和使用 1.什么是类 2.练习&#xff1a;定义一个学生类 三&#xff1a;类的实例化 1.什么是实例化 2.类和对象的说明 四&#xff1a;认识this 1.为什么要有this引用…

rails 常量自动加载和重新加载机制

在Rails中&#xff0c;有一个称为"常量自动加载和重新加载机制"的功能&#xff0c;它使得在开发和生产环境中能够自动加载和重新加载类和模块。这个机制允许您不必手动管理类的加载&#xff0c;使得开发更加方便。 快乐学习&#xff1a; 自动加载、重新加载 自动加…

Yii2全拦截路由catchAll的使用

定义&#xff1a;catchAll 路由&#xff08;全拦截路由&#xff09; 应用场景&#xff1a;网站维护的时候需要向用户抛出一个维护的页面&#xff0c;方便提醒用户 使用方法&#xff1a; 1、在应用配置中设置 yii\web\Application::catchAll 属性 2、新增对应的控制器方法 3、…

【Putty】win10 / win 11:SSH 远程连接工具 Putty 下载、安装

目录 一、Jmerter 连接 SSH 隧道的 mysql&#xff08;不可行&#xff09; 二、Putty 介绍 三、Putty 的下载 四、Putty 无需安装直接使用 五、Putty 使用 &#xff08;1&#xff09;我需要连接 ssh 隧道的 MySQL 参数如下 &#xff08;2&#xff09;Putty 使用教程 一、…

MA-SAM:模态不可知的三维医学图像分割SAM自适应

论文&#xff1a;MA-SAM: Modality-agnostic SAM Adaptation for 3D Medical Image Segmentation | Papers With Code 代码&#xff1a;GitHub - cchen-cc/MA-SAM: PyTorch implementation for MA-SAM 机构&#xff1a;a)高级医疗计算和分析中心&#xff0c;麻省总医院和哈佛…

华为云开源低代码引擎 TinyEngine 正式发布

随着企业对于低代码开发平台的需求日益增长,急需一个通用的解决方案来满足各种低代码平台的开发需求。正是在这种情况下,低代码引擎应运而生。它是一种通用的开发框架,通过对低代码平台系统常用的功能进行解构,将其划分为多个功能模块,并为每个模块定义了相应的协议和开发…

Go 语言中 panic 和 recover 搭配使用

本次主要聊聊 Go 语言中关于 panic 和 recover 搭配使用 &#xff0c;以及 panic 的基本原理 最近工作中审查代码的时候发现一段代码&#xff0c;类似于如下这样&#xff0c;将 recover 放到一个子协程里面&#xff0c;期望去捕获主协程的程序异常 看到此处&#xff0c;是否会…

传输层TCP协议

前言 传输层的历史渊源可以追溯到计算机网络的早期阶段。在20世纪60年代和70年代&#xff0c;计算机网络主要是由一些简单的点对点连接组成的。这些连接通常使用专用的硬件和协议&#xff0c;例如串行线路和电话线路。在这种情况下&#xff0c;传输层的功能是由这些协议本身来提…

【SpringCloud】认识微服务

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 认识微服务 一、 服务架构演变1.1 单体架构…

Qt之进程通信-QProcess(含源码+注释)

文章目录 一、QProcess进程通信示例二、QProcess通信个人理解三、源码MainWindowProcessSenderMainWindowProcessSender.hMainWindowProcessSender.cppMainWindowProcessSender.ui MainWindowProcessRecvMainWindowProcessRecv.hMainWindowProcessRecv.cppMainWindowProcessRec…