经验:工具在接口测试中发挥什么样的作用?

news2025/7/17 14:29:02

接口测试究竟是什么?为什么要用接口测试?它有哪些工具呢?这一连串的问题敲击着我们,请带着这些问题,在本文中寻找答案,我将为您打开接口测试的大门。

1 初探接口测试

接口测试是什么。它检查数据的交换,传递和控制管理过程,它绕过了移动端,对服务端进行测试,是个十足的跨栏高手。

图片

图片来源:网络

你一定听说过ui测试,它可以对前端进行测试,例如selenium工具是一个典型的ui测试工具,是否可以通过ui测试来诊断后端呢?不可以!

因为后端非常复杂,就像下图这样。ui测试无法涵盖这么复杂的链路的,在这么庞大的结构下,selenium显得力不从心。这就是我们为什么要绕过移动端,从而使用接口测试的原因。

图片

图片来源:阿里云

那么接口测试有什么优点呢?我们对测试进行分层,如下面这个图片,越往上,速度越慢,发现bug的时间越晚,接口测试(service)相比ui测试,可以更早发现问题,更快的质量反馈。

图片

既然接口测试优于ui测试,我们为什么不取消ui测试?虽然ui界面不稳定(经常变化),也很肤浅(无法涵盖所有后端测试),但ui端很多东西是无法被替代,比如颜色好不好看,小数点显示几位合适,按钮是不是小了,等等。

很多人觉得自己只会一种测试就可以了,但你不知道,测试是一个整体,无法互相替代。我们希望一个优秀的工程师,是至少满足我们的3.5级标准。也就是自动化测试+接口+持续集成这个核心

我们接口测试工具都是依赖下面的七层网络模型,但七层只是概念,真正只使用有五层(tcp/ip)。比如tcpdump是个超级底层的东西,它就是在网络层嗅探,因此需要使用root权限。

图片

图片来源:百度百科

如果对接口测试工具进行分类,可以如下几类:

网络嗅探工具:tcpdump、wireshark

代理工具:fiddler、charles、anyproxyburpsuite、mitmproxy

分析工具 curl、postman、chrome Devtool

下面对部分工具进行简介。我会告诉你为什么用,怎么用,以及工具之间的联系。

2 tcpdump

首先登场的是tcpdump。将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

上面说过,它在网络层嗅探,是个超级底层的工具,我们用几个命令了解它的威力。

它是一个十足的网络管理员,比如你可以让管理员tcpdump时刻监听443端口,如果有异样就向我们汇报:

tcpdump port 443 -v -w /tmp/tcp.log

port 443 监听443端口

-v 输出一个稍微详细的信息

-w 把数据写到log中

利用这条命令,会把得到的报告放到目录 /tmp/tcp.log中,随后我将带领您,用wireshark分析tcpdump生成的报告,体会他们兄弟俩的友情。

3 wireshark

wireshark也是一款网络嗅探工具,它不仅包含tcpdump功能,还有更多扩展功能,比如分析工具。

但是它有一个弊端,如何我们的数据包走的是https,是无法抓到的,因为https是一个加密消息,加密是为了让消息更可靠,浏览器很讨厌,他会把http转换成https,那么有哪些网站可以用http呢?

在百度上搜mp3:http://www.baidu.com/s?wd=mp3

这是一个典型的http请求,首先用tcpdump截获请求,并生成log,然后用wireshark打开tcpdump生成的log:你会看到前几项是非常奇怪的东西,这是什么?

图片

这是三次握手,为什么要三次握手?因为信道是不可靠的,我们发送数据前,就必须确保信道稳定,而三次握手就像是下面这些操作:

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

如果你觉得头晕,不如想象成下面这样:

开发小哥向测试媛打招呼

测试媛点头微笑并简单回复

开发小哥点头微笑

图片

经过打招呼,他们就可以更进一步交流,就像下面这样:

图片

时间飞快,不知不觉聊了一个下午,是时候说再见了,于是进行了四次挥手:

图片

第一次挥手:客户端向服务器端发送一个FIN,请求关闭数据传输。

第二次挥手:服务器接收到客户端的FIN,向客户端发送一个ACK,其中ack的值等于FIN+SEQ

第三次挥手:服务器向客户端发送一个FIN,告诉客户端应用程序关闭。

第四次挥手:客户端收到服务器端的FIN,回复一个ACK给服务器端。其中ack的值等于FIN+SEQ

这个过程就像是:

开发小哥:“是时候说再见了”

测试媛 :“嗯”

测试媛 :“那下次再见”

开发小哥:“好”

图片

需要注意的是,一个请求可能分为多个包,一个数据也是这样,于是你在wireshark会看到很多包。

有人会问,既然wireshak包含了tcpdump的功能,我们费这么大力气导出tcp.log干嘛,为什么不直接用wireshark截获数据包?

是这样的,在接口测试,我们的抓包过程都是在服务器上,服务器是个暴脾气,不给你提供ui界面,而wireshark恰好有ui界面,在服务器上无法工作,瞬间变成了盲人。

我们只能利用tcpdump抓包生成log,然后将log分给wireshark,在客户端上分析。wireshark无法分析https协议的包,那我们对https就束手无策了吗?不是的,我们很强大,代理工具charles就可以破解https。

4 chrome Devtools

这是chrome自带的分析工具。使用前,你要勾选命令行->更多工具->开发者工具,在页面上右键检查来打开分析工具。需要注意的是:本次我们只关注network它非常全面,比如状态,类型等等。

图片

上面就是它的全貌了,我们点击一个连接,可以看到下面的交互细节。

图片

上面的东西非常多,我们点击xhr 来筛选,xhr可以进行同步或异步地返回 Web 服务器的响应,并且能够以文本或者一个DOM文档的形式返回内容。右键->copy->copy as curl,以下是在雪球模拟搜索请求"souguo"的命令。

但是,当我们直接在命令行中运行时,你会发现,出现一些问题,这是因为少了cookie:

curl ‘https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=SOGO’ -H ‘Accept: /’ -H ‘Referer: https://xueqiu.com/k?q=sogo’ -H ‘Origin: https://xueqiu.com’ -H ‘User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36’ --compressed

windows不带有curl命令,需要进行安装。curl命令的具体使用请关注霍格沃兹测试学院教学视频。

windows不带有curl命令,需要进行安装。

5 面试常见问题

1. http与https

有人对http与https还是很模糊,这里进行说明,首先用下面的curl命令访问ceshiren.com,你会看到它包含连接成功,服务器验证,加密连接等等,我称这些为加密。

图片

-vvv:查看细节

上面的加密连接完成后,继续往下看,这便是主题,你会看到一系列字段,包括请求类型是get,请求内容是什么。注意下面返回的符号<,是指服务器返回给我们的内容,keep-alive的意思是保活,不进行四次挥手等等。我称这些为主题。

图片

同样,我附上wireshark http的内容:

在这里插入图片描述

看到了吗,他们的主题简直是一模一样。于是得出这样的结论,https和http本质是一样的,不同的就是这个加密过程,https试图对链接进行加密,这种加密让我们开发人员很烦恼,不得不承认,https很棒,时刻保护着我们。

浏览器也很棒,他会把http链接转换为https。

2. session与cookie的区别

第一次访问百度时,会有setCookie命令。于是浏览器存一份在本地,当再次访问时,浏览器会带上这份cookie在请求头,增加这个机制是为了追踪一个人访问的过程。

session是什么呢?session是一个特殊的cookie,它把数据都存在了服务器,本地只有一个id,服务器可以用id去寻找它对应的数据。

在这里插入图片描述

3. get与post的区别

发起请求时,我们常常会看到get和post,他们究竟有什么区别呢?在神秘而美丽的万维网中,TCP就像是运输汽车,我们用TCP来运输数据。

它勤劳而可靠,从不会丢货。如果路上全是一模一样的运输汽车,那这个公路会一团混乱,因为非常紧急的汽车(警车)可能被前面的汽车拦堵在路上,因为它们都是TCP。

图片

为了避免这种情况发生,警察叔叔制定了交通规则:HTTP。HTTP给汽车分门别类,有GET, POST, PUT, DELETE等等,HTTP规定,GET请求的汽车,要贴上GET的标签,而且要求把传送的数据放在车顶上(url中)。如果是POST请求,要贴上POST的标签,并把货物放在车厢里(请求体body)。

图片

当然,你也可以在GET的时候往车厢内(body)偷偷藏点货物;也可以在POST的时候在车顶上(url中)放一些数据。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

6 推荐学习

当然,接口测试远不止上面这些,你需要知道更多,比如charles到底怎么使用?打开一个网站会发生什么事情?使用nc黑客工具模拟浏览器可以偷偷地干什么?http的header必须要有什么?这些都是接口测试中必须要知道的知识。


资源分享【这份资料必须领取~】

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

准备了1个月,面试字节跳动测试工程师“凉经”分享

3月份参加了字节跳动测试工程师的面试&#xff0c;前几天收到的字节跳动测试工程师的拒信&#xff0c;我再一次被扔到人才库了 我此时的心情就是很复杂就是从3月份中旬&#xff0c;我得知我的简历被捞起来之后&#xff0c;我的心情特别高兴&#xff0c;然后把面试时间约到了3月…

C++进阶 多态原理

作者&#xff1a;小萌新 专栏&#xff1a;C进阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;简单介绍C中多态的概念 多态原理多态的原理虚函数表多态的原理为什么对象不能构成多态动态绑定和静态绑定继承多态面试题概念题问答题总…

【SpringBoot+Redis】实现多端登录+token自动续期和定期刷新+自定义注解和拦截器实现鉴权(角色和权限校验)

目录前言思路1、登录、token相关2、鉴权相关实现一、登录1、先定义一个Component组件2、登录、退出二、鉴权、token相关1、自定义注解2、拦截器鉴权、token续期和定期刷新3、新增/更新角色时&#xff0c;更新redis中角色对应的权限4、更新菜单权限标识时&#xff0c;更新redis中…

优优聚:美团成立机器人研究院!

美团成立机器人研究院 不用出门走路购买生活必须品&#xff0c;也不用等待几天的快递时间&#xff0c;现在的消费者越来越习惯“外卖点一切”、半小时送达的购物方式。 在即时零售市场中&#xff0c;美团&#xff0c;无疑是当下的焦点。 万万没想到的是&#xff0c;“外卖送一…

Java+MySQL基于SSM的二手玩具交换网站

本二手玩具交换网站主要包括系统用户管理模块、商品信息管理模块、所有购买记录、订单信息、登录模块、和退出模块等多个模块。它帮助二手玩具交换实现了信息化、网络化,通过测试,实现了系统设计目标,相比传统的管理模式,本系统合理的利用了二手玩具交换数据资源,有效的减少了二…

转行IT,女生学编程有前途吗?

一直以来&#xff0c;IT行业对技术的高要求让人们把这个行业标签为男生专属&#xff0c;从前只有个别女生顶着强大的压力、身边人的不理解坚守在IT岗位。 近些年随着互联网科技的发展与普及&#xff0c;很多女孩子发现原来IT技术没有自己想象中难&#xff0c;而且还可以毕业拿高…

Java项目:springboot课程自动排课系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 课程自动排课系统&#xff0c;该系统分两种角色&#xff1a;管理员与普通用户&#xff1b; 主要功能包括&#xff1a; 首页&#xff1a;查看分…

【运维有小邓】AD域权限报表

企业需要每天都警惕内部攻击和间谍等重大安全威胁。防范潜在的攻击者对保护组织的网络和数据大有裨益。但是&#xff0c;要实现此目标&#xff0c;还需满足几点。您必须完全了解分配给Windows Active Directory (AD)中用户和组的权限&#xff0c;它们可访问的帐户、资源和数据&…

java学习day64(乐友商城)Elasticsearch

1.Elasticsearch介绍和安装 用户访问我们的首页&#xff0c;一般都会直接搜索来寻找自己想要购买的商品。 而商品的数量非常多&#xff0c;而且分类繁杂。如何能正确的显示出用户想要的商品&#xff0c;并进行合理的过滤&#xff0c;尽快促成交易&#xff0c;是搜索系统要研究…

自己可以学习python吗?

现在还有很多小伙伴们在怀疑自学Python编程语言行不行&#xff0c;我想说Python自学是肯定行的&#xff0c;最重要的是要看自己的努力程度&#xff0c;Python是一个简单的编程语言&#xff0c;任何懂python语法规则的人都可以操作部署&#xff0c;更重要的是它是免费开源的&…

【学习笔记】前端HTML+CSS部分必懂基础内容(面试考察重点)

一、HTML 1. 什么是语义化&#xff1f;为什么要语义化&#xff1f;语义化标签有哪些 语义化&#xff1a;根据内容的结构化&#xff08;内容语义化&#xff09;&#xff0c;选择合适的标签&#xff08;代码语义化&#xff09;便于开发者阅读和写出更优雅的代码的同时让浏览器的…

试卷的安全方案

摘 要 随着互联网的飞速发展,传统的人工试卷保密措施已渐渐形成智能互联网加密保护。巨大的变革大大减少工作量&#xff0c;提升试卷质量&#xff0c;但随之而来的试卷拟定到发放以及回收的安全问题日益凸显。为了保护智能互联网试卷的保密性,认证授权加密已经成为了互联网传输…

MIUI10国际版系统自定义字体设置办法

国际版系统主题商店中没有字体设置。只有主题和壁纸 需要用到第三方主题安装工具mythemer和miui字体打包主题工具mifont maker 首先在网络上下载ttf格式的字体。 打开mifont maker&#xff0c;点击create custom font 点击pick font选择下载的字体 点击create miui font 制…

AlertDialog6种使用方法

AlertDialog 1.AlertDialog的6种创建模式 1.1setMessage 1&#xff09;Java代码 //1.创建构造器AlertDialog.Builder buildernew AlertDialog.Builder(this);//2.设置参数builder.setTitle("弹窗提示").setIcon(R.mipmap.boy).setMessage("选择你的性别&#xf…

刚毕业1年,做Python挣了60W!”网友:吹的不多..

现状揭秘 &#xff1a; Python岗位大厂50K起&#xff1f; 程序员&#xff1a; 心态崩了&#xff01; 屠杀各种榜单&#xff0c;拿下语言排行榜的Python&#xff0c;薪酬真的如同网传开挂了吗&#xff1f; 从上图看&#xff0c;Python薪酬普遍集中在 25-35k &#xff0c;也就是…

构建系列之新一代利器Esbuild(上)

What is Esbuild&#xff1f; Esbuild 是由 Figma 的 CTO 「Evan Wallace」基于 Golang 开发的一款打包工具&#xff0c;相比传统的打包工具&#xff0c;主打性能优势&#xff0c;在构建速度上可以快10~100 倍。 为什么会这么快&#xff1f; go实现&#xff0c;编译为本地代码…

Linux:阿里云服务器购买数据盘并挂载流程

1.进入ECS实例详情&#xff0c;找到‘创建云盘’按钮 2.进入购买界面并配置 3.确认订单等待自动挂载 4.返回实例&#xff0c;就能看到刚刚够买的数据盘 5.查看已挂载数据盘情况 df -lh6.查看所有数据盘包括未挂在的数据盘 fdisk -l 7.对数据盘进行分区。 fdisk /de…

maven中的pom

maven中的pompom的最低要求配置pom的默认行为packaging有哪些关于dependencytypescope关于 Dependency Management构建maven聚合工程&#xff0c;父子工程maven官方文档 !!!pom的最低要求配置 总共5个 project-根元素modelVersion -设置为4.0.0即可groupId-项目分组的idartif…

Polygon zkEVM发布公开测试网2.0

1. 引言 Polygon zkEVM发布公开测试网2.0&#xff0c;相比于10月份发布的公开测试网1.0版本&#xff0c;做了如下改进&#xff1a; 支持递归证明&#xff08;testnet1.0采用的是one batch of transactions对应one proof&#xff09;&#xff1a;从而支持多个provers并行工作&…

【架构师(第五十三篇)】 性能优化之 HTTP 缓存

ETag ETagHTTP 响应头是资源的特定版本的标识符&#xff0c;这可以让缓存更高效&#xff0c;并节省带宽&#xff0c;因为如果内容没有改变&#xff0c;web 服务器不需要发送完整的响应。 第二次请求的时候会添加一个 If-None-Match 请求头&#xff0c;去判断文件是否发生过变化…