网络基础
ip地址
IP协议提供的一种统一的地址格式,ip地址是标识网络中唯一的一台设备
ip地址的表现形式
IPV4:以点分隔十进制数据
IPV6:以冒号分隔十六进制数据
查看电脑的网卡信息
windows使用:ipconfig
mac / linux使用:ifconfig、ip addr
本机ip地址
127.0.0.1本机域名: localhost
IP地址的作用
通过ip地址能够在网络中找到对应的网络设备。
端口
端口是传输数据的通道,好比教室的门,是数据传输的必经之路。
每一个端口都会有一个对应的端口号,好比每个教室的门都有一个门牌号,想要找到端口通过端口号即可。
端口号
就是对端口进行了编号,用来区分和管理不同端口的,通过端口号能找到唯的一个端口。好比门牌号,其实就是一个数字。
数据通信的流程:通过ip地址找到对应的设备,通过端口号找到对应的端口,然后通过端口把数据传输给应用程序。
端口号总共有65536个。
端口和端口号的关系
端口号可以标识唯一的一个端口。
ip+端口号通信流程
1、通过ip地址能够找到网络中对应的设备
2、通过端口号能够找到对应的端口,通过该端口给对应的程序发送数据。
说明:通过端口号就是用来查找对应运行的应用程序的。
端口号的分类
知名端口(Well-Known Ports)
知名端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等等。
动态端口(Dynamic Ports)
动态端口的范围从1024到65535,一般程序员开发应用程序使用的端口号。比如1024端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号。
说明:程序运行结束端口号就会被释放掉
tcp传输协议
tcp是传输控制协议,它是面向连接、可靠、基于字节流的传输协议,能够保证数据是可靠的,不会导致数据错乱和丢失。
提示:想要保证数据按照指定规则进行传输,必须要选择某种传输协议,比如: tcp、udp
tcp的通信流程
1.创建连接
2.数据通信
3.关闭连接
tcp的特点
面向连接:在数据通信之间先建立好连接,当数据通信完毕,则断开连接
可靠的:
1.错误校验
2.应答机制
3.超时重传
4.流量控制和阻塞管理
tcp的使用场景
要求的是数据必须可靠,比如:下载文件,浏览网页等都是基于tcp传输协议的。
udp传输协议
它是一种不面向连接,不能保证数据可靠性的传输协议,但是传输速度比tcp要快。
udp的使用场景
比如:发送广播、收音机、视频传输等都是基于udp来完成的。
http协议
是一个超文本传输协议,它是基于tcp协议来进行数据传输的,目前http协议可以发送和接收任意类型的数据,原来主要用于网页数据的传输
http协议作用
规定了浏览器和web服务器传输数据的格式
刘览器必须要发送http请求报文数据
web服务器必须要发送http响应报文数据。
https协议
https是对http协议进行数据加密的,也就是说http协议是明文传输的,https协议是加密传输的,能够保证数据的安全性。
https进行数据加密是通过SSL(安全套接字层)进行加密的。
http和https的对比
1.安全性不同
http是明文传输的
https是基于http进行加密传输的,https的安全性更高
2.端口号不同
http默认使用端口号:80
https默认使用端口号:443
3.https这个协议需要购买CA证书
4.传输速度不同
http由于在传输数据的时候不需要加密,则传输速度比https要快。
https由于在传输数据的时候需要加密,则传输速度没有http快,但是数据更加安全。
使用谷歌浏览器的开发者工具查看http协议的通信过程
1、打开谷歌浏览器
2、在空白地方右击选择检查
3、选择Network页签
4、输入想要访问网址
network里面的每一条记录都是请求+响应的一次过程
主要的页签:
request headers:请求头信息
response headers:响应头信息
response:响应体信息, web服务器给浏览器的数据。
开发者工具的标签选项说明:
元素(Elements) :用于查看或修改HTML标签;
网络(Network) :查看http协议的通信过程
http请求报文
get请求报文
post请求报文
get请求报文
1、请求行
get请求方法 请求的资源路径 协议版本,比如: GET /HTTP/1.1
2、请求头
host:请求主机地址
accept:告诉web服务器客户端接受数据的类型
user-agent:告诉服务器客户端的名称
cookie: pgv_pvi=1246921728; 登录用户的身份标识
3、空行
get原始报文
-- 请求行
GET / HTTP/1.1\r\n
-- 请求头
Host: www.baidu.com\r\n
Connection: keep-alive\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n
Cookie: BIDUPSID=8004359AF4B9299670C277F85B3786E3; \r\n
-- 自定义请求头
token:xxx\r\n
-- 空行
\r\n (请求头信息后面还有一个单独的‘\r\n’不能省略)
如果不使用浏览器发送请求数据,则必须把全部请求报文数据发送给后台程序,比如:使用Python程序发送请求数据,如果使用浏览器的话则不需要自己发送请求报文数据,浏览器已经帮你封装完毕了。
提示:每项数据之间使用\r\n进行分割,http协议中规定的。
post请求
1、请求行
post请求方法 请求资源路径 协议版本,比如: post N2/api/?login HTTP/1.1
2、请求头
host
user-agent
content-type:表示请求参数的类型(form表单, json数据),主要是是请求体的参数
3、空行
4、请求体
post原始报文
-- 请求行
POST /v2/api/?login HTTP/1.1\r\n
-- 请求头
Host: passport.baidu.com\r\n
Connection: keep-alive\r\n
Origin: https://www.baidu.com\r\n
Content-Type: application/x-www-form-urlencoded\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n
Cookie: BIDUPSID=8004359AF4B9299670C277F85B3786E3; \r\n
-- 空行
\r\n (请求头信息后面还有一个单独的‘\r\n’不能省略)
-- 请求体
username=lyang&pass=123456\r\n
get和post报文格式的对比
get请求:请求行、请求头、空行
post请求:请求行、请求头、空行、请求体
http响应报文组成
1、响应行
http协议版本 状态码 状态描述,比如: HTTP/1.1 200 OK
2、响应头
Server:服务器名字
Data:服务器处理时间
Content-Type:服务器告诉客户端内容的类型,比如:Content-Type: text/html;charset=utf-8
3、空行
4、响应体
客户端使用的数据在响应体里面,比如:返回的html数据或者json数据
http响应报文
-- 响应行/状态行
HTTP/1.1 200 OK # HTTP协议版本 状态码 状态描述
-- 响应头
Connection: keep-alive # 和客户端保持长连接
Content-Type: text/html;charset=utf-8 # 内容类型
Date: Sun, 27 Jun 2021 10:52:40 GMT # 服务器的响应时间
Transfer-Encoding: chunked # 发送给客户端内容不确定内容长度,发送结束的标记是\r\n,Content-Length表示服务端确定发送给客户端的内容大小,但二者只能用其一
Server: BWS # 服务器名称
-- 空行
\r\n
-- 响应体
<!DOCTYPE html><html lang=“en”> … </html> # 响应给客户端的数据
http常见的状态码
- 200 表示请求成功
- 307 表示重定向
- 400 表示请求参数有问题
- 404 表示请求资源服务器不存在
- 500 表示服务器内部代码问题
http状态码的分类
- 1xx: 表示请求已经收到,可以继续再发送请求
- 2xx: 表示操作成功
- 3xx: 表示重定向
- 4xx: 表示客户端错误
- 5xx: 表示服务端程序错误
响应报文中的Content-Type
Content-Type 表示告诉客户端内容类型
- 表现形式
- text/html 表示服务器给客户端是网页或者文本数据, 完整格式: Content-Type: text/html
- application/json 表示服务器给客户端是json数据,完整格式: Content-Type: application/json
请求报文中的Content-Type
在post请求报文中,会有Content-Type,Content-Type 表示告诉服务端内容类型
- 表现形式
- application/x-www-form-urlencoded 表示以表单形式提交数据给web服务器端, 具体格式:Content-Type: application/x-www-form-urlencoded
- application/json 表示以json格式的数据提交给web服务器端, 具体格式: Content-Type: application/json
Content-Type 最常见的数据格式
web服务器给客户端数据的时候使用的Content-Type
- text/html 一般服务器响应给客户端网页数据的时候会使用该格式
- image/jpeg 一般服务器响应给客户端是jpeg格式图片的时候会使用该格式
- image/png 一般服务器响应给客户端是png格式图片的时候会使用该格式
- application/json 一般服务器响应给客户端是json数据的时候会使用该格式
客户端web服务器数据的时候使用的Content-Type
- application/json 表示客户端以json形式提交数据给web服务器
- application/x-www-form-urlencoded : 表示客户端以form表单形式提交数据给web服务器
- multipart/form-data 表示客户端上传文件数据给web服务器使用该格式
http的请求方法
- get 获取服务器数据
- post 向服务器提交数据
- head 获取响应头信息
- put 修改数据
- delete 删除数据
get请求方法
-
get请求表示获取服务器的数据,本质是 “得” 数据
-
请求参数的表现形式
-
http://www.baidu.com?参数名1=值1&参数名2=值2, 比如: http://www.baidu.com?username=zhangsan&password=zhang
- 提示: url中不能出现中文或者空格,如果有中文或者空格需要进行url的编码
- 提示: get参数需要放到请求地址的后面,使用 ? 进行追加, 多个参数之间使用 & 拼接
-
post请求方法
- post方法表示给服务器提交数据的,本质是 “给” 数据
- 请求参数的表现形式
- 参数都会以请求体的方式进行提交,在url地址里面看不到提交的参数
- 如果请求体里面有多个参数,以表单形式提交的话,多个参数使用 & 拼接, 比如: username=hello&pw=abc
- 如果请求体里面有多个参数,以json形式提交的话,多个参数使用 ,分割,比如:
- 特殊说明: 请求参数的类型需要根据接口文档指定
- 比如:如果后台程序需要的是json数据格式,那么我们需要指定请求头里面Content-Type: application/json
- 提示:如果在请求头里面没有指定Content-Type,默认是以表单形式提交,格式:Content-Type: application/x-www-form-urlencoded
- 参数都会以请求体的方式进行提交,在url地址里面看不到提交的参数
get和post请求的区别
- get本质是从服务器获取数据
- post本质是给服务器提交数据
- get没有请求体
- post有请求体
- get请求的参数都会暴露在url中,相对来说不安全
- post请求的参数都会在请求体里面,相对来说更安全
- get请求默认会对页面数据进行缓存
- post请求默认不会对页面数据进行缓存
- get请求回退无害,不需要再次提交
- post请求回退会重新发起请求,需要再次提交数据
- get请求有长度限制,但是http协议中没有要求长度限制,但是get请求一般都受浏览器本身的限制。
- post请求没有长度限制。
- get请求的执行速度比post请求要快。
接口介绍
接口就是客户端和服务端进行数据交互的通道,客户端通过接口可以把数据提交给服务端,服务端把处理好的数据通过接口发给客户端。通俗理解接口就是一个url,比如: http://127.0.0.1:8080/product
接口测试介绍
接口测试不关注界面功能,关注的是url接口是否能够满足指定功能,比如: http://127.0.0.1:8080/product 这个接口是一个添加商品的接口,则测试该接口是否能够完成添加商品的操作。
接口测试的原理
模拟客户端向web服务器端发送http请求报文数据以及获取http响应报文,并验证响应报文的数据和预期结果是否一致。
接口测试的测试点(关注点):
- 关注url的地址和请求方法是否正确
- 验证请求回来的数据和预期结果是否一致
- 隐私参数是否能够保证安全,比如:密码不能在url地址中出现,密码是否进行加密
- 接口是否能够支持n多个用户同时访问,并能正常提供响应数据的能力。
RESTful风格
只是接口地址的一种表现形式,RESTful风格接口设计更加简洁。
提示:不管是传统接口还是RESTful风格接口,对应我们测试而言都是一样的,正常根据接口文档进行测试即可。
json的介绍
json是JavaScript对象的字符串,它其实就是一个数据格式,目前主要使用web前端和后台程序之间的数据通信上。
json的格式
-
对象格式 表示一个数据,比如一个学生信息,一个老师信息。
- 对象格式: 使用
{}
, 比如:{"name":"李四","age":20}
- 对象格式: 使用
-
数组格式 表示一个集合,这个集合里面可以包含多个数据。
- 数组格式: 使用
[]
, 比如:[{"name":"张三","age":20},{"name":"李四","age":30}]
提示:json数据中的引号必须使用双引号。
- 数组格式: 使用
json数据的使用场景
json数据主要使用在前端程序和后台程序的数据交互上。
例如: 前端程序一般需要把数据准备成json格式发送给后台程序,后台程序接收到数据后进行相关的处理,再把处理好的数据以json格式方式返回给前端程序。
提示:前台和后台json数据都是需要包装成http协议的数据进行传输, 请求的json数据会放到请求体里面,响应的json数据会放到响应体里面。
接口测试流程
- 需求分析
- 接口文档分析
-
请求数据
请求的url是否正确
请求的方法是否正确
请求的参数是否正确 -
响应数据
响应的内容是否和预期结果一致
响应头信息是否明确
响应的状态码是否正确
响应的参数是否有说明
响应体的参数要有说明
响应头的参数也要有说明
-
- 设计和编写测试用例
- 执行用例
- 跟踪和管理缺陷(禅道)
- 测试完成以后,需要编写测试报告