早上看到群里有人发文章看了下,很多基础知识点,都是之前面试的问题,当初回答的不是太好,所以现在保存下,得好好加强基础知识了!
本节内容
- 接口及接口测试
- 络基础知识:IP,域名, DNS及端口
- 络基础知识:OSI七层模型及TCP协议
- HTTP协议
接口及接口测试
这里插播一个段子
app随手机壳变色
上图中,程序员口中提到的接口是什么意思呢br> 手机壳有没有颜色这个属性(功能)— 有
手机壳有没有提供让程序获取它颜色的途径— 没有,这个途径就是接口
接口的概念
接口又称API(Application Programming Interface,应用程序编程接口),是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
简单概括为以下3点:
- 程序代码(函数方法)
- 屏蔽实现细节
- 可以被访问/调用来获取信息或实现某些功能(提供访问地址,定义了访问规则)
接口自述(通俗的来说):
- 首先我有一些功能(功能函数)
- 你不用关心我怎么实现的(屏蔽细节)
- 我会给你一个我的地址(接口地址)
- 你按照地址找到我,按照我规定的格式(请求类型)告诉我所需要的信息(参数)就行
- 我会给你个反馈(相应信息)
举个栗子:
西虹市公考 名处 — 接口名称
名地址: 西虹市街口区带莫路3 — 接口地址
现场需填写资料: 姓名,身份证证 码,专业, 考岗位等等 — 接口参数
验证规则: — 参数验证规则
- 身份证需与本人一致
- 专业需与 考岗位符合
- 名时间 2024.8.22-2024.8.30
现场会给出是否 名成功 — 接口响应信息
软件中的接口
接口处理过程
软件项目中,接口是系统与系统之间,模块与模块之间或者服务于服务之间相互调用的入口。
从开发者角度,接口是分工协作的产物,不同开发者实现自己的功能之后,封装成接口,供其他开发者调用。其他开发者只要按规定格式发送一些必要参数,就能使用该功能
接口交互场景
常见接口类型/strong>
-HTTP接口,RPC接口,Web Service接口, Dubble接口,RESTful接口,其中RESTful接口是基于HTTP接口的,Web Service及Dubble属于RPC接口
- HTTP接口:通过HTTP协议传输的接口,可以传输文本表单数据,也可以传输Json类型的对象数据或xml类型的数据
- RPC: 远程方法调用,随着分布式系统的出现,当你需要调用部署到其他服务器上的方法时,需要用到RPC。RPC只是提出了这样一个问题,有很多种解决方案,比如WebService(基于SOAP协议), REST(基于HTTP协议)。
- SOAP: 简单面向对象协议,基于HTTP,使用xml作为默认传输格式
- Web Service: 基于SOAP协议的一种RPC实现方案。相比传统的HTTP接口只传输文本请求和文本相应,通过Web Service可以直接拿到远程的一个对象,并能够直接调用该对象的属性和方法,比HTTP更高级。
-
REST/RESTful API: REST,表述性状态转移。一种HTTP接口的设计风格,将一切接口视为资源,要求接口路径同意管理,分版本管理,规定了GET/POST等请求以及HTTP状态码的使用规范,默认使用JSON格式传输。RESTful API即满足REST风格即设计规范的API接口
相互关系
什么是接口测试/h3>
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个
子系统之间的交互点。测试的重点是要检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
为什么要做接口测试/strong>
- 接口测试介于单元测试与系统测试之间,单元测试一般由开发完成(不要相信开发)
- 接口是各种系统功能的基础,一旦接口出现问题可能会引起许多系统功能的问题并且不容易定位
- 开展接口测试可以及早发现问题,有效降低测试成本
- 接口一般较UI相对稳定,利于进行自动化和持续集成
接口测试都测什么/strong>
接口测试一般有以下岗位实施:
- 手工测试岗:先提测接口再提出功能,兼做接口自动化
- 测试开发岗:专职做接口(或UI)的自动化用例开发,测试工具开发
接口测试点参考:
服务端接口测试
怎样掌握接口测试/strong>
- 了解OSI 络模型,TCP/UDP协议,掌握HTTP/HTTPS协议,了解RPC, Web Service及REST,理解Session和Cookie
- 掌握常用的接口测试工具如curl命令,Postman,Jmeter,LR,SoupUI,AB等
- 掌握基本的抓包工具如Chrome开发者工具,Fiddler,Charles,Wireshark,tcpdumps等
- 掌握一门编程语言Python或Java
- 了解Nginx, Apache, Tomcat等服务器中间件
- 掌握数据库基本查询命令,及一些NoSQL(如Redis)操作,用于检查响应结果
- 掌握基本的Linux日子查询和筛选命令
接口测试重难点
- 动态变量参数化
- 接口依赖及中间变量问题
- 异步接口结果验证问题
- 相应参数及嵌套很多的验证问题
- 接口测试框架的稳定性问题
- 资源清理问题
- 多接口场景测试
…
络基础知识:IP,域名, DNS及端口
IP地址
就像每个人都有一个身份证 码
IP地址是IP协议提供的一种统一的地址格式,它为互联 上的每一个 络和每一台主机分配一个逻辑地址
ip地址
查看IP命令
- Windows: ipconfig
- Linux: ifconfig
Python练习:检查字符串是否ip
使用map函数实现方法(参考)
端口
“端口”是英文port的意译,可以认为是设备与外界通讯交流的出口。
如果把IP地址比作一间房子,端口就是出入这间房子的门。一个IP地址的端口可以有65536(即:2^16)个
端口类型
- 公认端口:从0到1023,紧密绑定于一些服务
- 注册端口:人1024到49151,许多服务绑定这些端口,这些端口同样用于许多其它目的。
- 动态或私有端口:从49152到65535。理论上,不应为服务分配这此端口。实际上,机器通常从1024起分配动态端口。
常见软件默认端口 - Apache/Nginx(HTTP服务): 80
- Tomcat: 8080
- Oracle: 1521
- MySQL: 3306
- SQL Server: 1433
- PostgreSQL: 5432
- MongoDB: 27017
- Redis: 6379
- Memcached: 11211
查看端口命令
- Windows: netstat -ano
- Linux: netstat -ntlp
端口查看
解决端口占用问题
- Windows: netstat -ano | findstr “8080”,找到占用端口的程序的PID -> 打开任务管理器 -> 设置显示PID -> 找到并结束对于程序
- Linux: netstat -ntlp | grep “8080”, 找到对应的程序 -> ps -ef | grep “程序名” 找到对于的pid -> kill 相应的id
域名及DNS
由于IP地址不容易记忆,为IP地址赋予了一个利于记忆的别名,称为域名
如,百度的ip为: 61.135.169.125,对应的域名为 www.baidu.com
域名及ip
如何查看域名所对于的ip/strong>
- Windows/Linux: ping www.baidu.com
DNS
DNS即域名解析系统,域名和IP地址相互映射的一个分布式数据库,提供域名转到对应ip的服务
络基础知识:OSI七层模型及TCP协议
OSI七层模型
OSI即开放系统互连参考模型,一种 络架构,分为7层。
OSI 络模型
- 上三层—应用层,控制软件方面
- 应用层:文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
- 表示层:数据格式化,代码转换,数据加密
- 会话层:解除或建立与别的接点的联系(会话)
- 下四层—数据流层,用来管理硬件
- 传输层:提供端对端的接口 TCP,UDP
- 络层:为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP
- 数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
- 物理层 以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2
OSI七层模型及各层协议
TCP及UDP协议
TCP和UDP都是传输层的协议
- TCP:传输控制协议
- UDP: 数据 文协议
TCP和UDP的区别
- UDP的特点如下:
- 无链接
- UDP使用尽最大努力交付,不保证可靠性
- UDP是面向 文的,UDP对应用层交付下来的 文,既不合并,也不拆分,而是保留这些 文的边界。应用层交给UDP多长的 文,UDP就照样发送,即一次发送一个 文
- UDP没有拥塞控制
- UDP支持一对一、一对多、多对一和多对多的交互通信
- UDP的首部开销小,只有8字节
- TCP的特点:
- TCP是面向连接的
- 每条TCP连接只能用于两个断点,一对一
- TCP提供可靠交付的服务:连接传输数据、无差错、不丢失、不重复、并且按序到达
- TCP提供全双工通信
- 面向字节流。TCP根据对方给出的窗口和当前 络拥塞的程度来决定一个 文应该包含多少个字节
参考:TCP和UDP协议的对比
HTTP协议
HTTP:超文本传输协议,是用于从WWW服务器传输超文本到本地浏览器的传输协议。
HTTP协议是一种无状态协议,主要包含请求和相应两大部分:
请求(Request)
请求是我们发送给接口的数据对象,包含接口地址(URL),请求方法,参数,请求头(Headers), Cookies, 数据等
真实抓包一个请求:
抓包请求
请求原始格式-GET(Raw格式:Fiddler抓包得到)
- 第1行: 请求方法 接口地址 HTTP协议版本
- 第2-N行:请求headers(如果有Cookie,最后一行为Cookie)
- 空一行
- 请求数据(POST等方法使用,此处为空)
请求原始格式-POST请求(Raw格式:Fiddler抓包得到)
URL
URL:统一资源定位符,接口的访问地址(包含服务器地址+接口地址)
URL组成格式
如:https://www.sojson.com/open/api/weather/json.shtmlity=北京
注意:要使用英文不能使用中文/p>
URL编码:
URL编码是一种浏览器用来打包请求参数及表单参数的格式, 参数和参数之间使用&分割,非ASCII码使用%加16进制编码替换
如:
编码后为:
链接:URL编码/解码工具(http://tool.chinaz.com/Tools/urlencode.aspx)
请求方法
序 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体 |
2 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)数据被包含在请求体中 |
3 | HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取 头 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容 |
5 | DELETE | 请求服务器删除指定的页面 |
6 | CONNECT | 预留给能够将连接改为管道方式的代理服务器 |
7 | OPTIONS | 允许客户端查看服务器的性能 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
GET请求和POST请求的区别
-
GET请求:
- GET请求可被缓存
- GET请求保留在浏览器历史记录中
- GET请求可被收藏为书签
- GET请求不应在处理敏感数据时使用
- GET请求有长度限制
- GET请求只应当用于取回数据
-
POST请求:
- POST请求不会被缓存
- POST请求不会保留在浏览器历史记录中
- POST不能被收藏为书签
- POST请求对数据长度没有要求
请求参数(URL参数)
如:
- 中的,向接口传递一个参数“city”,参数值为“北京”
- 不同的参数之间用&隔开,非ASCII码参数会自动url encode
请求Headers(请求头)
常见Headers
常见Headers
请求数据(又称为Request Body 或 Data)
请求数据类型(Content-Type)(重点)
- application/x-www-form-urlencoded: 页表单格式(默认)
- application/json:REST接口常用格式
- text/xml:xml格式,RPC接口,Dubbo接口常用格式
- test/html: html格式
- multipart/form-data: 混合表单,支持上传图片
数据编码
- ASCII码: 单字节,美国信息交换标准码, 包含数字,字母,英文标点及一些控制字符
- ISO-8859-1:又称Latin1,单字节,向下兼容ASCII,用于支持部分于欧洲使用的语言
- ANSI编码:单字节表示英文,双字节表示汉字,对ASCII的扩展,不同的国家和地区制定了不同的标准,中文中的GBK,GB2312属于ANSI编码
- Unicode编码: 采用二个字节编码(英文和中文的字符都以双字节存放),与ANSI码不兼容
- UTF-8:是目前互联 上使用最广泛的一种Unicode 编码方式,又称万国码
指定请求数据编码(解决中文乱码):
请求Headers设置Content-Type: application/json; charset=utf-8
- Base64: 一种用64个字符来表示任意二进制数据的方法。
- Base64编码的作用:由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。
- 而且base64特别适合在http,mime协议下快速传输数据。
Base64在接口中的的使用
参考:Base64编码及其作用
响应(Response)
接口返回的信息,包含HTTP状态码,响应头和相应信息
原始相应数据(Raw格式,Fiddler抓包)
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!