tongsiying

阅读|运动|自律

0%

接口

接口

课程内容

Web工作原理介绍
Http协议基础
Http协议Request讲解
Http协议Response讲解
Http状态码
Http消息报头
Cookie
Session

报头

web工作原理(1)
http://127.0.0.1:8081/ecshop/
user.php
http-协议类型
127.0.0.1-主机名:域名和IP等价
8081-端口号:端口管理由TCP协议完成,而不是HTTP协议
ecshop/user-页面文件
附件部分:
URL地址参数(也是最容易出问题的地方)

image-20210623222820234

web工作原理(2)

浏览器与服务器之间的交互就是由请求(Request)和响应(Response)组成,使用标准的HTTP协议(Hyper Text Transfer Protocol-
超文本传输协议)来进行请求的发送和响应

image-20210623223017868

http协议

1
2
1.HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,基于TCP/IP协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。
2.HTTP协议永远都是客户端发起请求,服务器回送响应

image-20210623223153619

http在TCP/IP协议栈中的位置

1
2
1.HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS 
2.HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL

image-20210623223329920

Http协议主要特点

1
2
3
4
5
>支持客户/服务器模式
>简单快速:客户向服务器请求服务时,只需传递请求方法和路径
>灵活:HTTP允许传输任意类型的数据对象。传输类型由Content-Type加以标记
>无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接
>无状态:HTTP协议是无状态协议,协议对于事务处理无记忆能力

Http之URL详解

1
2
3
4
HTTP URL(包含了用于查找某个资源的足够的信息)格式子下:
http:/host[":"portllabs pathl
http:表示要通过HTTP协议来定位网络资源host:表示合法的Internet主机域名或者P地址port:指定一个端口号,为空则使用缺省端口80
abs path:指定请求资源的URI,必须以/的形式给出

URL举例

1
2
3
4
5
6
7
8
9
http://mp.weixin.qq.com/s?_biz=MjM5MzIzODE5Nw==&mid=401472582&idx=1&sn=56e8f0106e43a85663353cf9a3a96f1d#wechat_redirect

1.协议类型:http
2.Host:mp.weixin.qq.com
3.Port:默认端口是80,这种情况下端口号可以省略
4.path:/s
5.分隔符:?
6.参数:biz=MjM5MzIzODE5Nw==
7.参数分隔符:&

Http协议请求(Request)

1
2
3
4
5
6
>http请求由三部分组成,分别是请求行、消息报头、请求|
正文
请求行:
一个方法符合开头,以空格分开,后面跟着请求的URI和协议的版本。
例如:POST/index.php HTTP/1.1CRLF
其中POST表示请求方法;/index.php是请求的URL;HTTP/1.1表示请求的HTTP协议版本;CRLF表示回车或者换行

Http请求方法

1
2
3
4
5
6
请求方法(所有方法全文大写),各个解释如下:
>GET请求获取Request-URI所标识的资源
>POST在Request-URI所标识的资源后附加新的数据
>HEAD请求获取由Request-URI所标识的资源的响应消息报头
>PUT请求服务器存储一个资源,并用Request-URI作为其标识
>DELETE 请求服务器删除Request-URI所标识的资源

Get的请求

1
2
3
>Get是用来从服务器上获得数据,Get传输的数据量小,这主要是因为|
URL长度限制。
>Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL

image-20210623224110616

Post请求

1
2
>Post是用来向服务器上传递数据,Post可以传输大量的数据,所以在上传文件只能使用PostPost的所有操作对用户来说都是不可见的
>Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL

image-20210623224157005

Http消息报头

1
2
3
4
5
6
7
8
HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。
>Http消息报头包括:
普通报头、
请求报头、
响应报头、
实体报头。

>每一个报头域都是由名字":"+空格+值 组成,消息报头域的名字是大小写无关的。

Http普通报头

1
2
3
4
5
6
7
有少数报头域用于所有的请求和响应消息,用于传输的消息
>Cache-Control用于指定缓存指令,缓存指令是单向的,且是独立的请求时的缓存指令包括:no-cache、no-store、max-age、max-stale、mint fresh、only-if-cached
>响应时的缓存指令包括:public、private、no-cache、no-
storetransform、must-revalidate、proxy-revalidate、max-age、s-
maxage.
>Date普通报头域表示消息产生的日期和时间
>Connection普通报头域允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接

http请求报头

1
2
3
4
5
请求报头允许客户端向服务器端传递请求的附加信息以及容户端自身的信息
>Accept 请求报头域用于指定客户端接受哪些类型的信息。
eg:Accept:image/gif,表明客户端希望接受GIF图象格式的资源;Accept:text/html,表明客户端希望接受html文本
>Accept-Charset 请求报头域用于指定客户端接受的字符集。
eg:Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受

http请求报头

1
2
3
4
5
>Accept-Encoding 请求报头域类似于Accept,但是它是用于指定可接受的内容编码。
eg:Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。

>Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。
eg:Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受

Http请求报头

1
2
3
>Authorization 请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验迹
>Host(发送请求时,该报头域是必需的)eg:http://www.guet.edu.cn/index.html该URL中包含Host 请求报头域,如下:Host:www.guet.edu.cn此处使用缺省端口号80,若指定了端口号,则变成:
Host:www.guet.edu.cn:指定端口号

http请求报头

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属|
性告诉服务器。
>Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它|
通常从HTTPURL中提取出来的
>Connection:表示是否需要持久连接。Keep-Alive持久连接
>Cookie:最重要的请求头之一,将cookie的值发送给HTTP服务器。

Request Headers
CONNECT mm. taobao. com:443 HTTP/1.1
Client
Uera-Agent: MoZilla/50(Winows NT 6.1;WOW64) Applewebi/57.536(HTIL, like Geko) Chrome/51.7074.
Transport
Connection: kepaive
Host: www. tabao. com:443

image-20210623224942795

接口测试

接口的概述

1
接口泛指实体把自己提供给外界的一种抽象方法(可以为一实体),用以由内部操作分离出外部沟通方法,使其在储改内部时不影响外界其他实体与其交互的方式。

image-20210623225202628

电脑等信息机器软件组件间的接口叫软件接口。

image-20210623225227545

电脑等信息机器硬件组件间的接口叫硬件接口。

接口的定义

1
2
3
接口是指系统模块与模块或系统与系统间进行交互,一般现在我们用的多的是基于HITTP协议为基础的接口(包括WebService协议),除此之外还有RPC的接口,但不管是哪种揍口,其本质就是发送一个Request报文给服务器,然后服务器响应返回一个Response报文。

注:这里接口特指软件接口

接口的分类

1
2
3
4
5
6
> HTTP接口、Web Service接口
-基于某种网络服务提供的接口

> API接口
-应用程序编程接口
-不一定通过网络提供编程服务接口

容易产生的误区

1
2
3
4
5
>我们通常讨论的接口,一般是指基于TCP/P传输的http协议

误区:
>接口测试并不仅限于HTTP接口
>API接口测试不等同于HTTP接口测试

接口测试

1
2
3
接口测试是集成测试实现的一种方式,其实在集成测试中分为消息接口测试和代码接口测试两类。

我们对Response的报文进行分析,判断是否和我们发给服务器的Request对应的返回相同,从而验证业务是否正确实现,这即是接口测试。

接口测试分类

1
2
3
4
5
>同层之间接口的调用,一个接口调用了其他接口比如service层会调用DAO层的接口,而应用层又会调用服务层提供的接口,一般会通过服务之间的调用,比如注册用)时,会先调用用户查询的服务,查看该用户是否已经注册。
>外部系统与系统间的交互(调用第三方的接口)
比如银行会提供接口供电子商务网站调用,支付宝会提供接口给第三方网站调用
>各个子系统之间的交互
比如订单系统需要调用商品系统、财务系统才能完成一次订单的购买

其他测试技术的关联

1
自动化测试可以分为:UI层自动化和接口层自动化

image-20210624072535483

其他测试技术的关联

1
2
性能测试可以分为:系统级性能测试和接口层性能测试
安全测试:对于接口层和UI层都需要进行测试

image-20210623230048834

为什么做接口测试

1
2
3
4
>为了保证系统的独立性,也为了使业务更加的独立,系统间的交互越来越多的使用接口(高内聚低耦合)。这时候对于传统测试人员需要等到系统集成后才能进行测试,不但很难确保测试的覆盖率(接口覆盖率),效率也非常低下,为了解决这两个问题,接口测试也应运而生了。
>UI的错误相对来说是比较容易修正的,但是数据的错误
(业务的错误)所带来的危害就大得多了,所以为了持续性的检查接口数据的准确性,通过在早期进行接口自动化测试,可以很好的发现定位问题。
ОEo

接口测试的适用范围及覆盖率

1
2
3
>接口是系统与系统间或者模块与模块间的交互,任何数据都是有其意义的,如果在传输过程中丢失了或者发送了错误的数据,就会导致意外或者业务逻辑处理机制,进一4发现存在的问题,并且为此付出很大的代价。

>所以任何接口都是应该经过测试,即有交互的地方,我们就要进行接口测试。首先要达到100%的接口覆盖率,在有条件的情况下做到进一步的100%需求对接口的映射及100%的接口对代码的逻辑覆盖率

接口测试目的

1
2
3
4
5

>核心:保证系统接口的功能正常
>方式:持续集成
>目的:提高测试效率,保证数据的准确性
>文档:接口测试对接口定义文档要求很高,所有的接口数据类型及业务分支导致的报文返回结构是需要事先定义好的,所以要形成文档的习惯,以方便查阅,尽量减少团队与团队间的沟通成本
1
2
3
4
5
6
7
接口测试方法
>可以通过编写脚本代码进行测试
自己开发脚本
>可以通过工具进行测试
第三方工具:SoapUI、Jmeter可以
>手工在浏览器进行测试
辅助工具:Fiddler,PostMan,HttpWatch

接口测试流程

1
2
3
4
5
6
7
8
类似于功能测试,
→需求讨论
→评审需求
→确定需求
→产出接口定义
→根据需求文档及接口定义设计测试用例(测试用例主要从业务场景,功能以及异常测试几个方面考虑)
→评审用例
→执行测试

image-20210623230552160

image-20210624072648902

接口文档的分析

1
2
3
4
5
6
7
8
9
10
11
手机号码归属地
接口地址:http://apis.juhe.cn/mobile/get
支持格式:json/xml
请求方式:get
请求示例:http://apis.juhe.cn/mobile/get?phone=13429667914&key=您申请的KEY

1.请求参数说明:
名称 类型 必填 说明
phone int 是 需要查询的手机号码或手机号码前7
key string 是 应用APPKEY(应用详细页查询)
dtype string 否 返回数据的格式,xmljson,默认json

接口测试用例设计(1)

1
2
>功能测试:接口是否满足了所提供的功能,相当于是正常情况测试,如果一个接口功能复杂时推荐对接口用例进行结构划分,这样子用例真有更好的可读性和维护性。
>逻辑测试:逻辑测试严格讲应为单元测试,单元测试应保持内部逻辑的正确性,可单元测试和接口测试界限并不是那么清楚,所以我们也可以从给出的设计文档中考虑内部逻辑错误的分支情况和异常

接口测试的用例设计(2)

1
2
>输入参数测试:针对输入的参数进行测试接口有翻页时,页码与页数的异常值测试数据库的增删改查,比如一个post按口操作完成后,通过列表页接口看下新的数据是否和刚才的post一致每个接口入参的默认值、异常类型、非空校验接口返回的图片地址能否打开,图片尺寸是否符合需求
当输出参数有联动性时,需要校验两参数的实际结束是否都符合实际需求

接口测试用例设计(3)

1
2
3
4
5
6
>异常情况测试:接口实现是否对异常情况都进行了处理
所有功能都要考虑兼容旧版本入参支持传多个值时,要考虑传的值的个数多的情况下,接口是否报错
输出参数类型
请求参数的边界值
请求参数的必填项和可选项
所有列表页接口必须考虑排序值

接口测试用例编写

1
2
3
4
5
6
>接口测试用例和单元或者系统的用例其实区别也不大,要说明调用的接口传递的数据以及应该对应返回的内容目可(其他属性根据具体情况添加)
>通过接口测试文档了解以下信息。
请求的URI
请求的方式
返回值内容
状态码,接口测试用例要覆盖到每一种情况

接口测试用例举例

测试用例编号 Interface_getSupportCityString_001
接口方法名 getSupportCityString
接口地址 http://webservice.webxml.com.cn/webServices/weatherWs.asnx
theRogionCode=31101
<soap:Envelope xmlns:seap=”http://schemas.xmlsoap.org/soap/envelope
xmins:xsi=”http://wwww.W3.org/2001/XMLSchema-ins tance
xmlns:xsi=”http://wwww.w3.org/2001/XMLSchema">
soap:Body
返回 北京,792
昌平,785
大兴,826
房山,827
怀柔,752
通州,3409K/string>
朝阳,3408
响应指标 响应时间小于500ms
备注 通过SoapUI实现调用,断言返回条数是否为7条,并且第一条为792,返回类型为字符串

接口测试常用的工具

1
2
3
4
5
切换host工具:SwitchHosts
抓包工具:Fillder,WireShark,httpWatch等
调试工具:firebug等
辅助测试工具:Postman,HttpRequester等
性能测试工具:Jmeter,Loadrunner,apache ab等

响应

Http协议响应(Response)

1
2
3
4
>HTTP响应由三个部分组成,分别是状态行、消息报头、响应正文
状态行格式如下:
HTTP-Version Status-Code Reason-Phras,其中HTTP-Version表示服务器HTTP协议的版本Status-Code表示服务器发回的响应状态代码;例如:
HTTP/1.1 200 OK

Http状态码

1
2
3
4
5
6
状态码由三位数字组成,第一个数字定义了响应的类别,分为5种类型:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功-表示请求已被成功接收、理解、接受
3xx:重定-要完成请求必须进行更进一步的操作
4xx:客户端错误-请求有语法错误或请求无法实现
Sxx:服务器端错误-服务器未能实现合法的请求

常见的状态码

1
2
3
4
5
6
> 200 OK请求已成功,请求所希望的响应头或数据体将随此响应返回
400 Bad Request语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求;请求参数有误
403 Forbidden服务器已经理解请求,但是拒绝执行它4014 Not Found请求失败,请求所希望得到的资源未被在服务器上发现
> 500 Internal Server Error服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。
>502 Bad Gateway作网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
>503 Service Unavailable由于临时的服务器维护或者过载,服务器当前无法处理请求。

Http响应报头

1
2
3
4
5
响应报头允许服务器传递不能放在状态行中的附加响应信息以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
>Location响应报头域用于重定向接受者到一个新的位置。
Location 响应报头域常用在更换域名的时候。
>server响应报头域包含了服务器用来处理请求的软件信息与User-Agent请求报头域是相对应的
eg: Server: Apache-Coyote/1.1

Http响应报头

1
2
3
>WWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。
eg:WWW-Authenticate:Basic realm="Basic Auth Test!"
//可以看出服务器对请求资源采用的是基本验证机制。

http响应报头

1
2
3
4
5
6
7
8
9
10
11
12
Content-Type是返回消息中非常重要的内容,它标识出这个返回内容的类型,其值为“主类型/子类型”的格式,例如最常见的就是text/html,它的意思是说返回的内容是文本类型,这个文本又是HIML格式的
Content-Type来决定如何显示返回的消息体内容

Response Headers:
HTTP/1. 1 200 Connection Established
Miscellaneous
ClientToSeryerBytes: 1669
EndTime: 146:30.504
FiddlerGateway: Direct ServerToClientBytes: 33290
StartTime: 19:45:00.110
Transport
Connection: dose

Http实体报头

1
2
3
4
5
请求和响应消息都可以传送一个实体。一个实体由实体报域和实体正文组成,但并不是说实体报头域和实体正文要一起发送,可以只发送实体报头域。实体报头定义了关于梁体正文(eg:有无实体正文)和请求所标识的资源的元信息
>Content-Encoding实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。

Content-Encoding这样用于记录文档的压缩方法
eg:Content-Encoding:gzip

Http实体报头

1
2
3
4
5
>Content-Language实体报头域描述了资源所用的自然语言没有设置该域则认为实体内容将提供给所有的语言阅读者eg:
>Content-Language:gbk Content-Length实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示
>Content-lype实体报头域用语指明发送给接收者的实体正文的媒体类型。eg:
Content-Type:text/html;charset-1SO-8859-1
Content-Type:text/html;charset-GB2312

Cookie

1
2
>Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies 
>Cookie将状态保存在客户端,通过Cookies,服务器就可以清楚的知道请求2和请求1来自同一个客户端

image-20210624074021107

JSON格式及在线解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
>JSON:JavaScript Object >Notation(JavaSeript对象表示法)
>JSON是存储和交换文本信息的语法。类似XML
>JSONXML更小、更快,更易解析。

{
"sites": [{
"name":
"家之诺",
"url":
"www.haozhinuo.com
},
{
""
name ":"
电话 ",
"telephone":
"(025)83413826"
},
{
"name":
"地址",
"address":
"南京市秦准区石鼓路98号阳光大厦H层F座"
}
]
}

Session

1
2
>Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构来保存信息
>服务器给每个Session分配一个唯一的JSESSIONID,并通过Cookie发t给客户端。当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIOND,这样服务器能够找到这个客户端对应的Session

image-20210624074146183

WebService协议介绍

1
2
3
4
5
6
7
> Web Service就是一个网络组件(一个可以通过网络访问的程序)
>它有一个或多个端口(Port),这些端口用于接收客户端的请求,并返回响应
>请求和响应的都是一种基于XML的消息。不过这种消息遵循特定的格式(SOAP)
>每个Web Service都有一个描述文件(WSDL),它描述一个Web ervice的如下方面:
(1)服务的端口(接收SOAP消息的端口)
(2)服务提供的操作
(3)操作的输入输出格式的定义(通过XMLSchema定义输入输出格式

XML约束

1
2
3
4
5
6
7
8
9
10
11
XML指可扩展标记语言(EXtensible Markup Language)
XML一种标记语言,很类似HTML
XMI的设计宗旨是传输数据,而非显示数据
XML标签没有被预定义。您需要自行定义标

<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don' t forget the meeting!</body>
</note>
赞赏一下吧~