软件开发的两种结构
C/S:Client/Server
客户端–服务器结构:
C/S的优点:
主要特点是交互性强,具有安全的存取模式,网络通信量低,响应速度快,利于处理大量数据
① 能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器,所以C/S客户端响应速度快
② 操作界面漂亮,形式多样,可以充分满足客户自身的个性化要求
③ C/S结构的管理信息系统有较强的事务处理能力,能实现复杂的业务流程
④ 安全,C/S一般面向相对固定的用户群,程序更加注重流程,它可以对权限进行多层次校验,提供了更安全的存取模式,对信息安全的控制能力很强,一些高度机密的信息系统采用C/S结构适宜
C/S的缺点:
① 需要专门的客户端安装程序,分布功能弱,针对点多面广不具备网络条件的用户群体,不能实现快速部署安装和配置
② 兼容性差,对于不同的开发工具有较大的局限性。若采用不同工具,需要重新改写程序
③ 开发,维护成本较高,需要具有一定专业水准的技术人员才能完成,发生一次升级,则所有客户端的程序都需要改变
④ 用户群固定,由于程序需要安装才能使用,因此不适合面向一些不可知的用户
B/S:Browser/Server
浏览器–服务器结构:
B/S的优点:
① 分布性强,客户端零维护。只要有网络,浏览器,可以随时的进行查询浏览等业务处理
② 业务扩展简单方便,通过增加网页即可增加服务器功能
③ 维护简单方便,只需要改变网页,即可实现所有用户的同步更新
④ 开发简单,共享性强
B/S的缺点:
① 无法实现具有个性化的功能要求
② 在跨浏览器上,B/S架构不尽如人意
③客户端服务器端的交互式请求-响应模式,通常动态刷新页面,响应速度明显降低(Ajax可以一定程度上解决这个问题)无法实现分页显示,给数据访问造成较大的压力
④ 速度和安全性上需要花费巨大的设计成本
⑤ 功能弱化,难以实现传统模式下的特殊功能要求
总结:
C/S响应速度快,安全性强,用户体验好,一般应用于局域网中,但是开发维护成本高
B/S可以实现跨平台,客户端零维护,但是个性化能力低,响应速度较慢,所以有些单位日常办公应用B/S,在实际生产中使用C/S结构
Http协议
1)http协议:Hyper Text Transfer Protocol(超文本传输协议)
Http是一个客户端和服务端请求和应答的标准,客户端时终端用户,服务器端时网站。当在浏览器的地址栏中输入一个URL(统一资源定位符)或是单击一个超级链接时,URL就确定了要浏览的地址,浏览器通过Http(超文本传输协议),将web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。
2)URl:统一资源定位符,是互联网上用来标识某一处资源的地址。
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
URL组成:
① 协议
url的协议部分为http,代表网页使用的是Http协议,//为分隔符。在internet中可以使用多种协议:Http,Ftp
② 域名
域名部分为www.aspxfans.com,一个URl中也可以使用Ip地址作为域名使用
③ 端口部分
域名后面的是端口,域名和端口之间使用:作为分隔符。端口不是一个URl必须的部分,如果省略端口部分,将采用默认端口
④ 虚拟目录
从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”
⑤ 文件名
从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名
⑥ 锚
从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
⑦ 参数
从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
3)Http1.0和Http1.1的区别
① 长连接
HTTP1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启长连接keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。HTTP1.0需要使用keep-alive参数来告知服务器端要建立一个长连接。
② 节约带宽
HTTP1.0中存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能。HTTP1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,客户端接收到100才开始把请求body发送到服务器;如果返回401,客户端就可以不用发送请求body了节约了带宽。
③HOST域
在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname),HTTP1.0没有host域。随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都支持host域,且请求消息中如果没有host域会报告一个错误(400 Bad Request)。
④ 缓存处理
在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
⑤ 错误通知的管理
在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
4)HTTP1.1和HTTP2.0的区别
① 多路复用
HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。
② 头部数据压缩
在HTTP1.1中,HTTP请求和响应都是由状态行、请求/响应头部、消息主体三部分组成。一般而言,消息主体都会经过gzip压缩,或者本身传输的就是压缩过后的二进制文件,但状态行和头部却没有经过任何压缩,直接以纯文本传输。随着Web功能越来越复杂,每个页面产生的请求数也越来越多,导致消耗在头部的流量越来越多,尤其是每次都要传输UserAgent、Cookie这类不会频繁变动的内容,完全是一种浪费。
HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。
③ 服务器推送
服务端推送是一种在客户端请求之前发送数据的机制。网页使用了许多资源:HTML、样式表、脚本、图片等等。在HTTP1.1中这些资源每一个都必须明确地请求。这是一个很慢的过程。浏览器从获取HTML开始,然后在它解析和评估页面的时候,增量地获取更多的资源。因为服务器必须等待浏览器做每一个请求,网络经常是空闲的和未充分使用的。
为了改善延迟,HTTP2.0引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前,免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以直接从本地加载这些资源,不用再通过网络。
5)Http请求
客户端连上服务器后,向服务器请求某个web资源,即客户端向服务器发送了一个Http请求
6)Http请求方式
Http1.0定义了三种请求方法:
Get,Post,Head
Http1.1新增了五种请求方法:
Options,Put,Delete,Trace,Connect
Get
请求指定的页面信息,并返回实体主体
Head
类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
Post
向指定资源提交数据进行处理请求(提交表单或上传文件),数据被包含在请求体中(post请求可能会导致新的资源的建立或者已有资源的修改)
Put
从客户端向服务器传送的数据取代指定的文档的内容
Delete
请求服务器删除指定的页面
Connect
Http1.1协议中预留给能够将连接改为管道方式的代理服务器
Options
允许客户端查看服务器的性能
Trace
回显服务器收到的请求,主要用于测试或诊断
7)Get和Post请求的区别
① Get使用Url或Cookie传参,而Post将数据放在Body中
② Get的Url会有长度上的限制,2kb,而Post的数据则可以非常大
③ Post比Get安全,因为数据在地址栏上不可见
④ 一般Get请求用来获取数据,Post请求用来发送数据
8)Http请求-消息头 Request
客户端发送一个Http请求到服务器的请求消息包括:
请求行,请求头部,空行和请求数据
第一部分:请求行,第一行明了是Post请求,以及Http1.1版本
第二部分:请求头部,第二行至第六行
第三部分:空行,第七行的空行
第四部分:请求数据,第八行
9)Http响应
服务器接收并处理客户端发来的请求后会返回一个Http的响应消息
Http响应由四个部分组成:
状态行,消息报头,空行,响应正文
第一部分:状态行
由Http协议版本号,状态码,状态消息三部分组成
第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
第二部分:消息报头
用来说明客户要使用的 一些附加信息
第二行和第三行为消息报头,
Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
第三部分:空行
消息报头后面的空行是必须的
第四部分:响应正文
服务器返回给客户端的文本信息。
空行后面的html部分为响应正文。
10)Http响应常见向响应头
表示重定向的地址,该头和302的状态码一起使用
Location: http://www.it315.org/index.jsp
表示服务器的类型
Server:apache tomcat
表示服务器发送给浏览器的数据压缩类型
Content-Encoding: gzip
表示服务器发送给浏览器的数据长度
Content-Length: 80
表示服务器支持的语言
Content-Language: zh-cn
表示服务器发送给浏览器的数据类型及内容编码
Content-Type: text/html; charset=GB2312
GMT 表示服务器资源的最后修改时间
Last-Modified: Tue, 11 Jul 2000 18:23:51
表示定时刷新
Refresh: 1;url=http://www.it315.org
表示告诉浏览器以下载方式打开资源(下载文件时用到)
Content-Disposition: attachment; filename=aaa.zip
Transfer-Encoding: chunked
表示服务器发送给浏览器的cookie信息(会话管理用到)
Set-Cookie:SS=Q0=5Lb_nQ; path=/search
表示通知浏览器不进行缓存
Expires: -1
Cache-Control: no-cache
Pragma: no-cache
表示服务器和浏览器的连接状态。close:关闭连接 keep-alive:保存连接
Connection: close/Keep-Alive
11) HTTP之状态码
状态码有三位数字组成,第一个数字定义了响应的类别,共分为五种类别
1xx:指示信息:表示请求已接收,继续处理
2xx:成功:表示请求已被成功接收,理解,接受
3xx:重定向:要完成请求必须进行更进一步的操作
4xx:客户端错误:请求有语法错误或请求无法实现
5xx:服务器端错误:服务器未能实现合法的需求
常见的状态码:
客户端请求成功
200 OK
客户端请求有语法错误,不能被服务器所理解
400 Bad Request
请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
401 Unauthorized
服务器收到请求,但是拒绝提供服务
403 Forbidden
请求资源不存在,eg:输入了错误的URl
404 Not Found
服务器发生不可预期的错误
500 Internal Server Error
服务器当前不能处理客户端的请求,一段时间后可能恢复
503 Server Unavailable
更多状态码:http://www.runoob.com/http/http-status-codes.html
Cookie
1)cookie概念
Cookie就是一个键和一个值构成的,随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。
Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie)。当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了!
2)Cookie应用场景
记录上次访问时间
记录用户名
显示浏览记录
3)原理
4)Cookie使用细节
Cookie数据类型只能保存非中文字符串类型的。可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
5)Session
在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
6)Session和Cookie的区别
Cookie是把数据保存在浏览器端的内存中
Session把数据保存在服务器端的内存中
cookie和session的联系
当服务器端生成一个session时就会向客户端发送一个cookie保存在客户端,这个cookie保存的是session的sessionid,这样才能保证客户端发起请求后客户端已经登录的用户能够与服务器端成千上万的session中准确匹配到已经保存了该用户信息的session,同时也能够确保不同页面之间传值时的正确匹配
接口
1)什么是接口
API(Application Programming Interface)接口是一些预先定义的函数,包括接口地址,传入参数和返回参数
可以简单理解为:当需要访问某些数据,正常状态下传入合格参数,会收到该数据范围内的返回参数
场景:在美团旅游频道,用户选定时间、地点后搜索航班,后台会调用搜索接口传入时间、地点等参数,接收航班类别、价格等参数,在前台页面上进行排列展示。同理,下单时会调用生单接口确认是否成单,支付时会调用支付接口完成交易,自动修改订单状态。
2)接口测试工作流程
① 接口测试做什么?怎么做?
接口测试的工作内容其实主要分为 1,功能; 2,性能;3,安全
② 接口测试原理
主要是通过测试程序模拟客户向服务器发送请求报文,服务器接口请求报文后对响应的报文做出处理然后把应答(响应)报文发送给客户端,客户端接收应答报文的这一个过程,说白了,就是发请求接收响应数据的一个过程
③ 接口测试的目的
为了测试接口的正确性和稳定性(持续集成是接口测试的核心内容)
④ 接口测试常用的工具
1,loadrunner
2,jmeter
3,postman
4,soapUI
⑤ 接口测试应该测什么
功能:
单一接口-------结构检查
组合接口 -------结构检查
1,单一接口测试
主要测试输入输出的值,一些具有业务意义的值需要特别测试。
比如一个文章列表的接口,其中有一个type的参数,可以从传1–10的参数,1为推荐文章,2为图片,3为热文接口,那么不同的参数的传参就代表不同的场景使用,这个时候就要分别测试这些参数场景的数据返回是否正确,大体可分为:
A、每个参数代表的场景请求,接口响应是否正常的响应;
B、接口的请求方式,是GET还是POST或者是其他方式(注意:提交数据的操作,一定使用POST方式,不能使用GET方式);
C、接口必传参数检查、非必传参数检查、参数的数据类型检查、取值范围检查、长度检查、大小写转换等
注意:判断接口正确与否的依据就是接口文档,没有接口文档,就无法判断一个接口是否符合需求
接口文档包含如下内容:
1、接口概述:
1)接口名称
2)接口功能
3)接口类别
4)提交者、提交时间、需求来源及时间要求
2、HTTP请求方式
3、认证说明
4、请求限制说明
5、请求参数说明 参数名、是否必选、类型、取值范围、描述(非必选项的默认值)
6、相关约束
7、注意事项
8、调用示例
9、返回说明
1)返回数据格式
2)返回结果示例
3)错误代码及返回说明
2,接口组合(接口场景测试)
这个是组合场景所用到的接口都进行过单接口测试之后才进行的步骤
实际上,我们使用软件时候,比如:
打开质询类app---->进入首页—>获取首页数据---->查看指定文章---->点赞文章或取消点赞文章---->评论------>收藏文章;
打开电商类app---->进入首页—>搜索商品—>选中商品----->添加进入购物车------->提交订单-------->支付------>查看订单;
以上一系列操作,都是可以通过接口来模拟场景的
在每个场景测试的时候,我们就查看每个接口配合时候返回的数据是否正确
性能
对于有性能需求的接口,做一些并发,负载等性能测试
安全
sql注入测试
跨站脚本攻击测试
权限管理测试
服务器信息收集
文件、目录测试
认证测试
⑥ 总结
接口测试流程:获取接口测试依据(接口文档)--------->依据接口文档、编写单接口的测试用例------>编写组合场景的接口测试用例----->针对特定接口,编写性能测试用例----->编写安全性能接口测试用例----->执行测试用例(postman,python,jmeter工具的使用)------>发现bug,提交bug---->bug跟踪直到质量达标----->编写接口测试报告----->接口自动化------>持续集成监控
3)接口测试用例编写要点
测试每个参数类型不合法的情况
测试每个参数取值范围不合法的情况
测试参数为空的情况
测试参数前后台定义的一致性
测试每个参数的上下限(这里容易出致命的BUG,如果程序处理不当,可能导致崩溃)
测试每个参数取值不合理的情况(包括取的值不属于自己,取值在这阶段不会出现,取值超出了自己所拥有的数量或者范围)
如果两个请求有严格的先后顺序,需要测试调转顺序的情况
自己和自己的交易、聊天等操作(这种特别容易遗漏)
4)接口文档
被测接口的地址
接口参数,以及各个参数的说明
必要的http头与http体 ( http头是可以自定义的,可以用来校验是否是自己人访问 )
接口返回什么值,以及各个返回值的说明
接口是干什么的
5)接口测试:json
Json是一种数据载体
互联网本质就是数据传输,数据传输就需要数据载体。比如:页面信息就是存储在HTML这种数据载体中
6)为什么使用json
Json传输数据效率更高,所以部分场景下使用HTML与XML
但是JSON语言描述不及标签语言,所以部分场景下使用HTML与XML
如果传递少量数据,使用JSON
7)常见接口测试工具
典型商业工具:loadrunner,soapui
典型开源工具: jmeter
扩展插件:Postman
实现原理:模拟客户端对服务器进行多连接
8)接口的分类
① webservice接口
webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。
② http api接口
http api接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。
一个URL就是一个接口:接口大致会分为一下几个部分:
请求协议:
http — 普通的http请求
https — 加密的http请求,传输数据更加安全
请求IP:就是指提供接口的系统所部署的服务器地址
请求端口:如果不填端口,默认是80,否则需要填写端口号
接口路径:指系统提供的接口在什么位置
接口参数:参数在接口路径后,用“?”来表示路径地址完了,剩下的都是参数了,用“&”来区分参数个数
接口抓包测试工具Charles
1)Charles的功能
1.截取http 和https 网络封包(抓包)
2.支持和重发网络请求
3.支持修改网络参数
4.支持网络请求请求并修改
5.支持弱网测试
Structure用来将访问请求按访问的域名分类,Sequence用来将请求按访问的时间排序
Filter : 过滤,可以输入关键字来快速筛选出 URL 中带指定关键字的网络请求
Overview : 查看这次请求的详细内容,例如耗时详细列车了请求开始时间、结束时间,响应开始时间、结束时间,总耗时、DNS耗时、网络延时等。
对于Size也详细列出了请求头大小、响应头大小、压缩比例等内容。
URL:进行网络请求的链接;
Status:当前状态,complete表示请求完成;
Responce Code:返回码。不同的接口,不同的请求结果,返回码都不同;
Protocol:使用的协议;
Method:请求方式,如GET请求,POST请求等;
Kept Alive:判断当前是否正在链接(活跃);
Content-Type:发送的内容类型,如这里用的是XML文本,以UTF8的方式发送;
Client Address:客户端的IP地址;
Remote Address:远程服务器的IP;
Timing:
Request Start Time:请求开始的时间;
Request End Time:请求结束的时间;
Response Start Time:返回开始的时间;
Response End Time : 返回结束的时间;
Duration : 总时间;
Size:
Request Header :请求的头部大小;
Response Header:返回的头部大小;
Request : 请求发送的大小;
Response:返回数据的大小;
Total:所有数据大小;
Request Compression : 请求压缩;
Response Compression : 返回压缩;
Request : 查看请求内容(底下的Headers,Query String,Cookies,Raw。)
Headers:发送请求的头部信息;
Query String : 发送参数列表;
Cookies: 浏览器缓存;
Raw:发送的原生数据,包括了头部和参数;
Reponse : 查看响应内容
Headers:是返回的头部信息;
Text:返回信息(除去头部)后的文本;
Hex:返回信息的16进制表示;
XML:我返回的数据是XML。如果你返回的是JSON,这里就会显示JSON;
XML Text:如果你返回JSON,这里会显示JSON Text;
Raw:返回的所有原生数据,包括头部;
Summary: 查看发送数据的一些简要信息(主机,状态码,数据的类型,header和body大下,加载时间,总时间)
Chart: Summary中简要信息以图表形式展示
Notes: 其他信息